Post on 17-Jan-2016
IPX Cisco Beta Customer Training
Q3-2005
Meeting Requests
• Please put your phone on mute
• Please hold questions until end of each section
Agenda
• What is included in the IPX Cisco beta
• Brief product / Roadmap update
• Network Topology and TappingSusan Bettica
• IPX Application Development Don Howell
• IPM260 Application ConsiderationKaren Van Blarcum
What’s in the IPX Starter Kit
IPX Starter Kit• IPX board• TX100 tap box• Power supply• 19” rack bracket and hardware• IPM260 – 120, No span board• SmartWORKS CD ROM• AudioCodes CD ROM
Packet filter & signaling monitorPassive VoIP monitoring solution• Provides all network interface and packet filtering• Decode for proprietary phone sets
• Alcatel, Avaya, Cisco, Nortel, Siemens, etc.• H323v4, Avaya proprietary, Skinny, SIP, Megaco
• Common API abstracts PBX differences • Built on current SmartWORKS technology• Product flexibility supports most network topologies• Requires off-board recording device (AUDC IPM260)• Error Monitoring
IPX Series – VoIP Monitor
Patent Pending
July 2006
TX100 - IPX / IPR accessory
To Network port A (DTE)
To Network Port B (DCE)
To Monitor B
To Monitor A
Single link tapping
• Each IP link needs four physical ports • TX100 supports one IP link• May not be needed for some apps
Also available as a PCI card
July 2006
IPM260 PCI Board
• 30, 60, 120 and 240 channels• Wireline Vocoders
G.711(PCM), G.726(ADPCM), G.727, OKI-ADCM, G.723.1, G.729A/B, GSM-FR (6.10), MS-GSM, NetCoder.
• Wireless & Cable VocodersGSM-EFR, AMR(NB), EVRC, QCELP8, QCELP13
• MVIP, SC Bus, H.100 • On Board 10/100BaseT Interfaces • Powered by one AudioCodes’ TPM-1100 PMC VoP module• Universal PCI support 3.3 V signaling• PCI bus 32/64 bit, 33/66 MHz
In Development
• IPR Series – VoIP RecordingPassive VoIP recording solution• Provides all network interface and packet filtering plus all voice data handling• Advance Media Processing: (no IPM260 required)
• Multi-stream synchronization• Multi-stream summation• Voice compression, real time transcoding • Silence processing • Stereo Recording
• Decode for proprietary phone sets• Alcatel, Avaya, Cisco, Nortel, Siemens, etc.• H323v4, Avaya proprietary, Skinny, SIP, Megaco
• Common API abstracts PBX differences • Built on current SmartWORKS technology• Product flexibility supports most network topologies
VoIP Recording
Preliminary
Patent Pending
July 2006
Product Rollout
Sept 05Sept 05 Dec 05 Dec 05 Mar 06Mar 06
IPX
IPX
IPR
IPR
June 06June 06
IPX Beta
IPX Release
PB
X S
up
ort
PB
X S
up
ort
IPR Beta
IPR Release
Avaya-Communication
Manager
CiscoCall Manager
NortelMeridian
SiemensHiPath4000
AlcatelOmniPCX
Office
MitelM3300
Avaya- IP office
EricssonMD110
GenericSIP
Product Review and Roadmap
Questions
Network Topology
Network Components
Call Manager
Gateway
Switch
Is a VoIP server that receives calls or initiation requests from the PSTN or web
Is a Layer 2 device that uses MAC Addresses to decide where to forward the packets
Is an inter-networking system that connects two Networks together
TX100
IPX
IPM 260
Ai-Logix Network Components
An external passive tapping device connected to the Network and IPX (tap box)
Board for passive VoIP monitoring of packets,filtering data and forwarding media
Board that receives media packets that is capable of transcoding, summation and recording to a file
Where you TAP matters
• Configurations vary from site to site• Even if it is the same product
• Follow the path of the call• Tap point must be in the call flow
• Mirror Port (Span Port) • Can help in some cases but are not always needed
• Peer to Peer• May require additional tap points
Basic Configuration
Basic Configuration
Basic Configuration
Basic Configuration
Centralized Call Logger
Network Signaling
Tapping External Traffic on Switch
External Data Logging
External Call Recording
Peer to Peer Tapping
Recording utilizing Span Port
Peer to Peer Tapping
Recording utilizing Span Port
RTP packetsTo phones (RX)
Peer to Peer Call ( same workgroup)
Peer to Peer Tapping
Recording utilizing Span Port
RTP packetsfrom phones (TX)to gateway
External Call
Peer to Peer Tapping
Recording utilizing Span Port
External CallBoth directions
Limitations of Span Port
• Bandwidth is limited to 100 Mb
• Data may be lost if the traffic exceeds 100Mb (due to Span port limitations)
•
• Example: monitoring multiple phones on a Span port
Topology and Tapping
Questions
IPX Application Development
Topics for Discussion
• Overview of the IPX features
• Presentation of the IPX Logical Card Model
• Sample IPX Application
IPX Features
• Near real-time passive network monitoring
• Filtering of non-VoIP related packets
• Decoding of signaling protocols
• RTP media session reporting
• RTP media forwarding to a network voice processor
IPX Logical Card Model
• Three 10/100 Ethernet ports
• Packet Redirection (Filtering)
• Session Manager• Station Manager• Passive Protocol Stacks• RTP Media Forwarding
EventMailer
Session Manager
Ethernet
Host Computer Interface (PCI)
Packet Redirection
Rx/TxLegend SwitchRx/Tx
Packets
RTPForwarding
D-channelDecodingand CallControl
AVAYA
CISCO
Session Manager &
Three Ethernet Ports
• Two ports in promiscuous mode.• One receives upstream (TX) packets• One receives downstream (RX) packets• Configuration Optional
• One port in “active” mode • Transmits RTP packets• Must be configured
• All ports are configurable• IP Address• Subnet Mask• Default Gateway
Packet Redirection (Filtering)
• Filters all VoIP related packets and forwards to on-board resources:• Signaling Protocol
Stack• RTP RTP Forwarder• Others Discarded
• Host PC performs no packet filtering
Packet filtering is the selective passing or blocking of packets as they move through the network.
Session Manager
• Tracks all RTP media connections• Allocates a unique session (Session
ID) for each RTP connection pair• Reports media session
creation/deletion via SmartWorks events
• Session IDs are returned to free pool when media session ends
NOTE: The maximum number of sessions per board is 256.
Station Manager
• Dynamically identifies devices and adds stations on the IPX
• Assigns a unique Station ID to each device• Protocol ID + Station Number • Station IDs are not unique across
multiple boards.
• Reports station added/removed via SmartWorks events
• Station IDs are returned to free pool when a station is removed
NOTE: The maximum number of stations per board is 120.
Passive Protocol Stacks
• Terminal Control decoding similar to the SmartWorks NGX D-Channel• Message-to-event translation• Messages reported to application via
SmartWorks events
• Call Control decoding reports changes in call state similar to the SmartWorks DP• Message-to-CC event translation
The IPX abstracts the various VoIP protocols and provides a consistent interface to the user application.
RTP Media Forwarding
• Forwards the media stream, associated with a Session ID, to a network device
• User controls forwarding dynamically as sessions are created and destroyed
• User supplies destination information• IP Addresses• UDP port numbers
• Forwarding stops when the session stops
New SmartWorks APIs for IPX
• Configuration• Adapter, Signaling Protocol
• Status and Control• Signaling Protocol, Media Session, Station
• Statistics• Signaling Protocol, Station, Network Interface
Note: SmartWorks release 3.3.1 was extended to support the IPX
Event Reporting
• Station Events
• Session Events
• Call Control Events EVT_CC_CALL_ALERTINGEVT_CC_CALL_CONNECTEDEVT_CC_CALL_RELEASEDEVT_CC_CALL_SUSPENDEDEVT_CC_CALL_RESUMEDEVT_CC_CALL_HELDEVT_CC_CALL_RETRIEVEDEVT_CC_CALL_ABANDONEDEVT_CC_CALL_REJECTED
EVT_STATION_ADDEDEVT_STATION_REMOVED
EVT_MEDIA_SESSION_STARTEDEVT_MEDIA_SESSION_STOPPED
DATA: StationID, TCP Port, UDP Port
DATA: SessionID, StationID, Caller IP Addr & UDP, & Callee IP Addr & UDP
DATA: MT_CALL_INFO structure
The IPX includes the StationID in the XtraInfo field of the event structure for all D-Channel, CC, Station and Media session events.
SmartControl
Accepts:• IP Address• Subnet mask• Default gateway
Interface 0:• Active Port• Forwarding
Interface 1:• Passive Port
Interface 2:• Passive Port
Things to Consider
The IPX:• has no channels (no channel events) • all events arrive on the board queue• does not support the H.100 bus• does not have in-band detectors
VoIP:• no dedicated circuits• semi-intelligent terminals
#include "NtiApi.h"
CINTERFACE void MyCallback(BOARD iBrd, int iEvtCount, PMT_EVENT pEvent, LPARAM myParam);
int main(int argc, char* argv[])
{
int BrdNum = 0;
BOOLEAN bOn = 1;
MTSysStartup();
MTSetBoardEventCallback(BrdNum, MyCallback, 0);
MTIpDChannelEventControl(BrdNum, MT_IP_CISCO_SKINNY, bOn);
MTIpCCEventControl(BrdNum, MT_IP_CISCO_SKINNY, bOn);
printf("Waiting for events...(Press any key to exit)\n");
while(!kbhit()) Sleep(10);
MTSysShutdown();
return 0;
}
A Simple Example
#include "NtiApi.h"
CINTERFACE void MyCallback(BOARD iBrd, int iEvtCount, PMT_EVENT pEvent, LPARAM myParam);
int main(int argc, char* argv[])
{
int BrdNum = 0;
BOOLEAN bOn = 1;
MTSysStartup();
MTSetBoardEventCallback(BrdNum, MyCallback, 0);
MTIpDChannelEventControl(BrdNum, MT_IP_CISCO_SKINNY, bOn);
MTIpCCEventControl(BrdNum, MT_IP_CISCO_SKINNY, bOn);
printf("Waiting for events...(Press any key to exit)\n");
while(!kbhit()) Sleep(10);
MTSysShutdown();
return 0;
}
A Simple Example
#include "NtiApi.h"
CINTERFACE void MyCallback(BOARD iBrd, int iEvtCount, PMT_EVENT pEvent, LPARAM myParam);
int main(int argc, char* argv[])
{
int BrdNum = 0;
BOOLEAN bOn = 1;
MTSysStartup();
MTSetBoardEventCallback(BrdNum, MyCallback, 0);
MTIpDChannelEventControl(BrdNum, MT_IP_CISCO_SKINNY, bOn);
MTIpCCEventControl(BrdNum, MT_IP_CISCO_SKINNY, bOn);
printf("Waiting for events...(Press any key to exit)\n");
while(!kbhit()) Sleep(10);
MTSysShutdown();
return 0;
}
A Simple Example
A Simple ExampleCINTERFACE void MyCallback(BOARD iBrd, int iEvtCount, PMT_EVENT pEvent, LPARAM myParam){
char buffer[128] = {0};MTGetEventCodeDescription(pEvent->EventCode, buffer, sizeof(buffer));printf("Received %s\n", buffer);
switch(pEvent->EventCode){case EVT_STATION_ADDED:case EVT_STATION_REMOVED:{
PMT_IP_STATION_PARAMS pStation = (PMT_IP_STATION_PARAMS)(pEvent->ptrBuffer);printf(" Station ID: - 0x%x \n", pStation->StationID);break;}
case EVT_MEDIA_SESSION_STARTED:{PMT_IP_SESSION_PARAMS pSession = (PMT_IP_SESSION_PARAMS)(pEvent->ptrBuffer);printf(" Media Session: Caller - 0x%x, Callee - 0x%x, SessionID - %d\n",
pSession->CallerIPAddress, pSession->CalleeIPAddress, pSession->SessionID);
MT_IP_SESSION_DEST Params = {NETWORK, 0, 0, 0, 0};ULONG Size = sizeof(MT_IP_SESSION_DEST);
Params.fTarget = NETWORK; // Destination type (i.e., network, host)Params.DestTxIPAddr = Params.DestRxIPAddr = 0xAC15DC28; // 172.21.220.40Params.DestTxBaseID = (3 * pSession->SessionID) + 0x4000;Params.DestRxBaseID = (3 * pSession->SessionID) + 0x4010;
MTIpSetSessionMediaDest(iBrd, pSession->SessionID, &Params, &Size); }break;
}}
A Simple ExampleCINTERFACE void MyCallback(BOARD iBrd, int iEvtCount, PMT_EVENT pEvent, LPARAM myParam){
char buffer[128] = {0};MTGetEventCodeDescription(pEvent->EventCode, buffer, sizeof(buffer));printf("Received %s\n", buffer);
switch(pEvent->EventCode){case EVT_STATION_ADDED:case EVT_STATION_REMOVED:{
PMT_IP_STATION_PARAMS pStation = (PMT_IP_STATION_PARAMS)(pEvent->ptrBuffer);printf(" Station ID: - 0x%x \n", pStation->StationID);break;}
case EVT_MEDIA_SESSION_STARTED:{PMT_IP_SESSION_PARAMS pSession = (PMT_IP_SESSION_PARAMS)(pEvent->ptrBuffer);printf(" Media Session: Caller - 0x%x, Callee - 0x%x, SessionID - %d\n",
pSession->CallerIPAddress, pSession->CalleeIPAddress, pSession->SessionID);
MT_IP_SESSION_DEST Params = {NETWORK, 0, 0, 0, 0};ULONG Size = sizeof(MT_IP_SESSION_DEST);
Params.fTarget = NETWORK; // Destination type (i.e., network, host)Params.DestTxIPAddr = Params.DestRxIPAddr = 0xAC15DC28; // 172.21.220.40Params.DestTxBaseID = (3 * pSession->SessionID) + 0x4000;Params.DestRxBaseID = (3 * pSession->SessionID) + 0x4010;
MTIpSetSessionMediaDest(iBrd, pSession->SessionID, &Params, &Size); }break;
}}
A Simple ExampleCINTERFACE void MyCallback(BOARD iBrd, int iEvtCount, PMT_EVENT pEvent, LPARAM myParam){
char buffer[128] = {0};MTGetEventCodeDescription(pEvent->EventCode, buffer, sizeof(buffer));printf("Received %s\n", buffer);
switch(pEvent->EventCode){case EVT_STATION_ADDED:case EVT_STATION_REMOVED:{
PMT_IP_STATION_PARAMS pStation = (PMT_IP_STATION_PARAMS)(pEvent->ptrBuffer);printf(" Station ID: - 0x%x \n", pStation->StationID);break;}
case EVT_MEDIA_SESSION_STARTED:{PMT_IP_SESSION_PARAMS pSession = (PMT_IP_SESSION_PARAMS)(pEvent->ptrBuffer);printf(" Media Session: Caller - 0x%x, Callee - 0x%x, SessionID - %d\n",
pSession->CallerIPAddress, pSession->CalleeIPAddress, pSession->SessionID);
MT_IP_SESSION_DEST Params = {NETWORK, 0, 0, 0, 0};ULONG Size = sizeof(MT_IP_SESSION_DEST);
Params.fTarget = NETWORK; // Destination type (i.e., network, host)Params.DestTxIPAddr = Params.DestRxIPAddr = 0xAC15DC28; // 172.21.220.40Params.DestTxBaseID = (3 * pSession->SessionID) + 0x4000;Params.DestRxBaseID = (3 * pSession->SessionID) + 0x4010;
MTIpSetSessionMediaDest(iBrd, pSession->SessionID, &Params, &Size); }break;
}}
A Simple ExampleCINTERFACE void MyCallback(BOARD iBrd, int iEvtCount, PMT_EVENT pEvent, LPARAM myParam){
char buffer[128] = {0};MTGetEventCodeDescription(pEvent->EventCode, buffer, sizeof(buffer));printf("Received %s\n", buffer);
switch(pEvent->EventCode){case EVT_STATION_ADDED:case EVT_STATION_REMOVED:{
PMT_IP_STATION_PARAMS pStation = (PMT_IP_STATION_PARAMS)(pEvent->ptrBuffer);printf(" Station ID: - 0x%x \n", pStation->StationID);break;}
case EVT_MEDIA_SESSION_STARTED:{PMT_IP_SESSION_PARAMS pSession = (PMT_IP_SESSION_PARAMS)(pEvent->ptrBuffer);printf(" Media Session: Caller - 0x%x, Callee - 0x%x, SessionID - %d\n",
pSession->CallerIPAddress, pSession->CalleeIPAddress, pSession->SessionID);
MT_IP_SESSION_DEST Params = {NETWORK, 0, 0, 0, 0};ULONG Size = sizeof(MT_IP_SESSION_DEST);
Params.fTarget = NETWORK; // Destination type (i.e., network, host)Params.DestTxIPAddr = Params.DestRxIPAddr = 0xAC15DC28; // 172.21.220.40Params.DestTxBaseID = (3 * pSession->SessionID) + 0x4000;Params.DestRxBaseID = (3 * pSession->SessionID) + 0x4010;
MTIpSetSessionMediaDest(iBrd, pSession->SessionID, &Params, &Size); }break;
}}
Outbound Call Events
Received EVT_STATION_ADDED - Station ID: - 0x10000 Received EVT_SOFT_BUTTON_PRESSEDReceived EVT_AUDIO_CHANGEReceived EVT_RING_OFFReceived EVT_LINE_LIGHT_ONReceived EVT_START_TONEReceived EVT_DIGIT_PRESSEDReceived EVT_STOP_TONEReceived EVT_DIGIT_PRESSED
.
.Received EVT_DIGIT_PRESSEDReceived EVT_STATION_ADDED - Station ID: - 0x10001Received EVT_CALL_ALERTINGReceived EVT_STOP_TONEReceived EVT_CALL_CONNECTEDReceived EVT_MEDIA_SESSION_STARTED - Media Session: Caller
- 0xa0a0a33, Callee - 0xa0a0a01, SessionID - 0Received EVT_STOP_TONEReceived EVT_ONHOOKReceived EVT_CALL_RELEASEDReceived EVT_MEDIA_SESSION_STOPPED
.
Outbound Call Events
Received EVT_STATION_ADDED - Station ID: - 0x10000 Received EVT_SOFT_BUTTON_PRESSEDReceived EVT_AUDIO_CHANGEReceived EVT_RING_OFFReceived EVT_LINE_LIGHT_ONReceived EVT_START_TONEReceived EVT_DIGIT_PRESSEDReceived EVT_STOP_TONEReceived EVT_DIGIT_PRESSED
.
.Received EVT_DIGIT_PRESSEDReceived EVT_STATION_ADDED - Station ID: - 0x10001Received EVT_CALL_ALERTINGReceived EVT_STOP_TONEReceived EVT_CALL_CONNECTEDReceived EVT_MEDIA_SESSION_STARTED - Media Session: Caller
- 0xa0a0a33, Callee - 0xa0a0a01, SessionID - 0Received EVT_STOP_TONEReceived EVT_ONHOOKReceived EVT_CALL_RELEASEDReceived EVT_MEDIA_SESSION_STOPPED
.
Outbound Call Events
Received EVT_STATION_ADDED - Station ID: - 0x10000 Received EVT_SOFT_BUTTON_PRESSEDReceived EVT_AUDIO_CHANGEReceived EVT_RING_OFFReceived EVT_LINE_LIGHT_ONReceived EVT_START_TONEReceived EVT_DIGIT_PRESSEDReceived EVT_STOP_TONEReceived EVT_DIGIT_PRESSED
.
.Received EVT_DIGIT_PRESSEDReceived EVT_STATION_ADDED - Station ID: - 0x10001Received EVT_CALL_ALERTINGReceived EVT_STOP_TONEReceived EVT_CALL_CONNECTEDReceived EVT_MEDIA_SESSION_STARTED - Media Session: Caller
- 0xa0a0a33, Callee - 0xa0a0a01, SessionID - 0Received EVT_STOP_TONEReceived EVT_ONHOOKReceived EVT_CALL_RELEASEDReceived EVT_MEDIA_SESSION_STOPPED
.
Outbound Call Events
Received EVT_STATION_ADDED - Station ID: - 0x10000 Received EVT_SOFT_BUTTON_PRESSEDReceived EVT_AUDIO_CHANGEReceived EVT_RING_OFFReceived EVT_LINE_LIGHT_ONReceived EVT_START_TONEReceived EVT_DIGIT_PRESSEDReceived EVT_STOP_TONEReceived EVT_DIGIT_PRESSED
.
.Received EVT_DIGIT_PRESSEDReceived EVT_STATION_ADDED - Station ID: - 0x10001Received EVT_CALL_ALERTINGReceived EVT_STOP_TONEReceived EVT_CALL_CONNECTEDReceived EVT_MEDIA_SESSION_STARTED - Media Session: Caller
- 0xa0a0a33, Callee - 0xa0a0a01, SessionID - 0Received EVT_STOP_TONEReceived EVT_ONHOOKReceived EVT_CALL_RELEASEDReceived EVT_MEDIA_SESSION_STOPPED
.
Outbound Call Events
Received EVT_STATION_ADDED - Station ID: - 0x10000 Received EVT_SOFT_BUTTON_PRESSEDReceived EVT_AUDIO_CHANGEReceived EVT_RING_OFFReceived EVT_LINE_LIGHT_ONReceived EVT_START_TONEReceived EVT_DIGIT_PRESSEDReceived EVT_STOP_TONEReceived EVT_DIGIT_PRESSED
.
.Received EVT_DIGIT_PRESSEDReceived EVT_STATION_ADDED - Station ID: - 0x10001Received EVT_CALL_ALERTINGReceived EVT_STOP_TONEReceived EVT_CALL_CONNECTEDReceived EVT_MEDIA_SESSION_STARTED - Media Session: Caller
- 0xa0a0a33, Callee - 0xa0a0a01, SessionID - 0Received EVT_STOP_TONEReceived EVT_ONHOOKReceived EVT_CALL_RELEASEDReceived EVT_MEDIA_SESSION_STOPPED
.
Outbound Call Events
Received EVT_STATION_ADDED - Station ID: - 0x10000 Received EVT_SOFT_BUTTON_PRESSEDReceived EVT_AUDIO_CHANGEReceived EVT_RING_OFFReceived EVT_LINE_LIGHT_ONReceived EVT_START_TONEReceived EVT_DIGIT_PRESSEDReceived EVT_STOP_TONEReceived EVT_DIGIT_PRESSED
.
.Received EVT_DIGIT_PRESSEDReceived EVT_STATION_ADDED - Station ID: - 0x10001Received EVT_CALL_ALERTINGReceived EVT_STOP_TONEReceived EVT_CALL_CONNECTEDReceived EVT_MEDIA_SESSION_STARTED - Media Session: Caller
- 0xa0a0a33, Callee - 0xa0a0a01, SessionID - 0Received EVT_STOP_TONEReceived EVT_ONHOOKReceived EVT_CALL_RELEASEDReceived EVT_MEDIA_SESSION_STOPPED
.
Outbound Call Events
Received EVT_STATION_ADDED - Station ID: - 0x10000 Received EVT_SOFT_BUTTON_PRESSEDReceived EVT_AUDIO_CHANGEReceived EVT_RING_OFFReceived EVT_LINE_LIGHT_ONReceived EVT_START_TONEReceived EVT_DIGIT_PRESSEDReceived EVT_STOP_TONEReceived EVT_DIGIT_PRESSED
.
.Received EVT_DIGIT_PRESSEDReceived EVT_STATION_ADDED - Station ID: - 0x10001Received EVT_CALL_ALERTINGReceived EVT_STOP_TONEReceived EVT_CALL_CONNECTEDReceived EVT_MEDIA_SESSION_STARTED - Media Session: Caller
- 0xa0a0a33, Callee - 0xa0a0a01, SessionID - 0Received EVT_STOP_TONEReceived EVT_ONHOOKReceived EVT_CALL_RELEASEDReceived EVT_MEDIA_SESSION_STOPPED
.
IPX Application Development
Questions
IPM260 Application Considerations
Overview
Using the IPM 260 for VoIP Recording
• Receive incoming RTP packets from IPX
• Sum both sides of the conversation
• Record Conversation - Vocoders: GSM-FR, GSM-EFR, AMR, G711, G732.1, G729.A, G728, G727, and EVRC_QCELP
Sample Network Architecture
• Three channel resources required
• Two channels are opened to receive Rx and Tx packets
• Third channel used for summation recording
Logical Overview
Traffic Flow
• RTP packets are treated as separate streams by the IPX
• Upstream (Tx) and Downstream (Rx) are forwarded to two unique UDP ports on the IPM 260
• Direction of traffic is relative to the tapped VoIP endpoint
API Overview
Limited Development Required
• Most control via SmartWORKS API on IPX
• IPM used solely for receiving/recording RTP media
• This example does not require DTMF/Activity/CPM detectors
Application Flow
User Application
IPX IPM 260EVT_MEDIA_SESSION_STARTED
Application Flow
User Application
IPX IPM 260EVT_MEDIA_SESSION_STARTED
Open/configure receive channels
Application Flow
User Application
IPX IPM 260EVT_MEDIA_SESSION_STARTED
Open/configure receive channels
Acquire/Set port numbers
Application Flow
User Application
IPX IPM 260EVT_MEDIA_SESSION_STARTED
Open/configure receive channels
Acquire/Set port numbersSet Session Routing Rules
Application Flow
User Application
IPX IPM 260EVT_MEDIA_SESSION_STARTED
Open/configure receive channels
Acquire/Set port numbersSet Session Routing Rules
Summation and Recording
Application Flow
User Application
IPX IPM 260EVT_MEDIA_SESSION_STARTED
Open/configure receive channels
Acquire/Set port numbersSet Session Routing Rules
Summation and Recording
EVT_MEDIA_SESSION_STOPPED
Application Flow
User Application
IPX IPM 260EVT_MEDIA_SESSION_STARTED
Open/configure receive channels
Acquire/Set port numbersSet Session Routing Rules
Summation and Recording
EVT_MEDIA_SESSION_STOPPED
Stop Recording / Stop Summation
Application Flow
User Application
IPX IPM 260EVT_MEDIA_SESSION_STARTED
Open/configure receive channels
Acquire/Set port numbersSet Session Routing Rules
Summation and Recording
EVT_MEDIA_SESSION_STOPPED
Stop Recording / Stop Summation
Close channels
Board Configuration
• Initialize the VoP library – acinitLib()
• Configure board – use acGetDefaultBoardParameters() acOpenBoard()
• network settings – IP Address, etc.
• TDM bus settings – clock settings (Master mode)
• disable PSTN settings
Application Note: Using the IPM 260 for VoIP Recording
Event Reporting
• All events are board events• Only interested in error events • Call acGetEvent() to get event from the
board’s status buffer (FIFO)• Polling method only• A list of board error events can be found in
the VopLib API Reference Manual
Channel Configuration
• Open Channels - acGetDefaultChannelParameters() acOpenChannel() (“change-on-the-fly”)
Voice Settings (CODEC), Transport Settings (RTP Delivery),
Jitter Buffer, TDM settings (channel output)
• Activate RTP - acActivateRTP_RTCPChannel() (IP address of IPX)
•Get Port Number(Optional) - acGetRTP_RTCPAddress()
Review
Currently, the IPX is forwarding upstream and downstream packets to two UDP ports.
On the IPM 260 two channels are opened, RTP is activated, and each channel is configured to pass the decoded voice to a TDM timeslot.
Channel Configuration
Record Channel
• Configure Channel – acGetDefaultChannelParameters()acOpenChannel() (same values except one transport setting – use PCI (local TDM)
• Listen to one timeslot - acMakeTDMConnection()
• Start Summation (listen to second timeslot) - acChannelAdditionalTimeSlotSummation()
• Start Recording - acRecord(), select file name and CODEC
Managing Port Numbers
Controlled by Recording Device:
IPM 260’s Resource Manager Assigns Port Number when channel is opened
• User application invokes acGetRTP_RTCPAddress()
• Pass port numbers into IPX – MTIpSetSessionMediaDest()
Controlled by User Application:
• Build port number scheme into application
• Configure IPM 260 receive channels with number – acActivateRTP_RTCP()
• Pass port numbers into IPX – MTIpSetSessionMediaDest()
Maximum Channels per Board
• IPX supports a max. 256 RTP sessions
• IPM 260-120 has 120 channels • Three channels needed per RTP session when
using summation• Results in 40 RTP sessions supported per
board
Load Balancing
Sending RTP media from a single IPX to multiple boards
On IPX use: MTIpSetSessionMediaDest()
Quality of Service
Jitter• Congestion – LAN, edge equipment, low
bandwidth WAN
• Resource sharing – packets spread out among resources, transmitted along different routes
You can’t control the design of the tapped network, nor can you predict the level of congestion from day to day.
Quality of Service
Manage QOS• Transmit from IPX to IPM 260 on dedicated LAN
(or subnet)
• Set Jitter settings on IPM 260 to maximum value supported by current SDK
Documentation
• Supporting documentation• White Paper – VoIP Recording• Application Note – Using the IPM 260 for VoIP
Recording• Manual - IPX Integration and User Guide
• Sample Application
IPX & IPM260 Technical Support
• Web support: • www.ai-logix.com/support.html
• Phone, Email or Online support: • Monday thru Friday 8:30AM to 5:30PM EST• Email -> support@ai-logix.com• Online -> http://support.ai-logix.com• Phone -> 732-469-0880
IPM260 Programming
Questions
Key Points
• IPX rollout• Avaya coming up next• IPR product will preserve your current development
• Network Topology• Very important to understand the configuration
• IPX Application Considerations• An understanding of how the IPX works • What features it provides.• How to build an application with the IPX
• IPM260 Application Considerations• Each conversation requires 3 resources• Application notes and whitepapers are available
Thank You!