Voice Gateways FAQ
Back to Unified Communications FAQ
What is the difference between an FXS and an FXO??
The basic and most important difference is that FXSs (Foreign Exchange Station) are used for endpoints, like your old phone using a landline, it will provide you with ringtone and will allow you to dial. The FXO (Foreign Exchange Office) is where you plug the actual landline you would get from your telco, to handle those calls and re-route them. For some old integrations between different systems, you can actually use FXSs and FXOs to call across the systems.
An FXS interface connects the router or access server to end-user equipment such as telephones, fax machines, or modems. The FXS interface supplies ring, voltage, and dial tone to the station and includes an RJ-11 connector for basic telephone equipment, keysets, and PBXs.
An FXO interface is used for trunk, or tie line, connections to a PSTN CO or to a PBX that does not support E&M signaling (when local telecommunications authority permits). This interface is of value for off-premise station applications. A standard RJ-11 modular telephone cable connects the FXO voice interface card to the PSTN or PBX through a telephone wall outlet.
FXO and FXS interfaces indicate on-hook or off-hook status and the seizure of telephone lines by one of two access signaling methods: loop start or ground start. The type of access signaling is determined by the type of service from the CO; standard home telephone lines use loop start, but business telephones can order ground start lines instead.
Loop-start is the more common of the access signaling techniques. When a handset is picked up (the telephone goes off-hook), this action closes the circuit that draws current from the telephone company CO and indicates a change in status, which signals the CO to provide dial tone. An incoming call is signaled from the CO to the handset by sending a signal in a standard on/off pattern, which causes the telephone to ring.
Loop-start has two disadvantages, however, that usually are not a problem on residential telephones but that become significant with the higher call volume experienced on business telephones. Loop-start signaling has no means of preventing two sides from seizing the same line simultaneously, a condition known as glare. Also, loop start signaling does not provide switch-side disconnect supervision for FXO calls. The telephony switch (the connection in the PSTN, another PBX, or key system) expects the router's FXO interface, which looks like a telephone to the switch, to hang up the calls it receives through its FXO port. However, this function is not built into the router for received calls; it only operates for calls originating from the FXO port.
Another access signaling method used by FXO and FXS interfaces to indicate on-hook or off-hook status to the CO is ground start signaling. It works by using ground and current detectors that allow the network to indicate off-hook or seizure of an incoming call independent of the ringing signal and allow for positive recognition of connects and disconnects. For this reason, ground start signaling is typically used on trunk lines between PBXs and in businesses where call volume on loop start lines can result in glare. See the "Disconnect Supervision Commands" section and "FXO Supervisory Disconnect Tone Commands" section for voice port commands that configure additional recognition of disconnect signaling.
In most cases, the default voice port command values are sufficient to configure FXO and FXS voice ports.
You can find plenty of info on this topic by googling "fxs vs fxo"
What is a DTMF??
The simple answer is, the signals you send when you press the digits 0-9, * and # on the phone, how are they sent, completely depends on the kind of phone you're using, for old analog phones, they actually use frequencies to transmit those over the copper pairs. In VoIP telephony, we no longer rely on actual frequencies to do that, depending on the protocol the phone is using, you will send a digital packet which will contain what digits you're typing.
In VoIP we have two main method for passing them:
- OOO, Out-Of-Band, which means there is a dedicated channel over which they are sent
- In-Band, which means they are sent along with the RTP stream and need to be taken out of it to be processed and recognized.
If you configure a VoIP system and have trouble with an AA (CUC, CUE, UCCX, UCCE, etc) within premises, or when you call the bank, for example, and it seems as it's ignoring (or not recognizing) your input, the problem most likely relies in the DTMF signaling not being passed correctly.
What DTMF method should I configure??
It depends on the protocol you're using.
For H.323 gateways there are two methods you can use:
Both of them are out-of-band, the main difference between them, is that h245-signal also contains the actual duration of the keypress for systems that depend on that to perform a certain function.
For SIP, you can use:
- sip-notify, this is a Cisco proprietary OOO method, created to inter-work with all of the SCCP devices which only support OOO DTMFs
- sip-kplm, also an OOO method, defined in RFC 4730 which uses SUBSCRIBE messages to register the DTMF, and NOTIFY messages to transport them. KPLM stands for Key Press Markup Language. Good for SIP interoperability between different products.
- sip-info, another OOO method, this one uses SUBSCRIBE messages to register the digits, but uses INFO messages to transport them. Always enabled in SIP dial-peers
- rtp-nte, NTE stands for Named Telephone Event, this is an in-band method, defined by RCF 2833 (and many times referred by that name), they are sent along with the RTP and distinguished by the RTP payload type, commonly used. It's a reliable method even if low-bandwidth codecs are used for the RTP
- cisco-rtp, the other in-band method, this one is Cisco Proprietary and uses the payload type 121 to distinguish the DTMFs from the RTP media, CUCM did not support it, and it has been discontinued.
The way to configure any of the above, is under the dial-peer, use the command:
dtmf-relay <option1> <option2> ... <option6>
They will be used in that order of precedence
Plenty of information in the topic can be found on cisco.com:
- Cisco Unified Border Element Configuration Guide, DTMF Relay
- CallManager/ DTMF/ MTP Allocation
- Configuring SIP DTMF Features
- DTMF Events through SIP Signaling
What is a PVDM??
A PVDM is a Packet Voice Media Module, this is a Cisco proprietary term that we use for chips on which we have DSPs (Digital Signal Processors). You're actually a lot closer to DSPs, these are found in plenty of common devices, they are used to transform audio data stored in a chip, into an analog wave you hear from a speaker. Have you ever seen any kids toy in which you press something and a sound comes out of it??? It has a DSP. Cisco IP Phones also have them, they take your voice from the microphone, and transform the analog wave into a digital interpretation after using the Nyquist theorem which we send in the RTP packets, the other end, does the opposite procedure, it takes those 0s and 1s in which your voice is sent over the network, and then the DSP turn them into an analog signal which can be played over the speaker.
There's plenty of information on DSPs on the web if you want to dig further into them and know exactly how they work. I just wanted to give a brief explanation so you had an idea, I'll cover some other functionalities they have in another question.
When do I need PVDMs??
You need them for several reasons:
- TDM termination
If you want to use a PRI, FXS or FXO, you need a PVDM channel per DS0 or FXS / FXO you want to use to turn the analog signal into a digital form
- Transcoding, which is very similar in a sense to using them for TDM termination if you think about it, changing from codec A to codec B, for example G711uLaw to G.729A.
- Conference Bridge, the CUCM SW conference bridge only understands G.711, but the DSPs on a PVDM understand a lot more codecs. A HW CFB can be used when you want to user other codecs beyond G.711 in the same conference. The DSP will take care of changing all codecs to G.711, mix the different streams, and send each conferencee the mix, minus his own voice.
- MTP, when you require an MTP for other codecs other than G.711, and you use them for supplementary services, or transrating.
In modern scenarios using SIP trunks, you might use them for CFB or XCODING if required, but a SIP trunk does not require them for TDM termination as you already receive the calls in a digital format.
Why are my call failing??
Well, there is any number of reasons why calls might fail, I'll try to list all the ones I can think of.
The debugs you usually want to look at are:
- debug isdn q931
- debug voip ccapi inout
ccpapi inout will contain a disconnect reason code like this:
XXXXXX: May X XX:XX:XX.XXX: //1234/XXXXXXXXXXXX/CCAPI/cc_api_call_disconnected: Call Entry(Responsed=TRUE, Cause Value=47, Retry Count=0)
In the above snip, 1234 would be the process ID for that leg of the call, you can then look for the rest of the messages, there should also be another call ID for the other leg of the call in the debugs.. But what we're interested in, is in Cause Value=47, what does that mean??
Well, you can find all the codes here:
Using Call Flows to Resolve Call Processing Problems
47 stands for:
Resource unavailable, unspecified. Whenever you see Cisco Unified Communications Manager initiate a disconnect with cause code 0xAF, 99% of the time the problem is related to a media setup failure. Check for codec capabilities mismatches, especially your regions configuration.
If you get a 47 there, usually check for codecs, make sure XCODERs are available, etc.
Another common cause would be 1:
Unallocated (unassigned) number. This cause indicates that the destination requested by the calling user cannot be reached because the number is unassigned. This number is not in the routing table, or it has no path across the ISDN network.
This one has a lot more options, because it basically means it cannot find a proper routing path:
- Incorrect digit manipulation, either in the H.323 config, or in CUCM. Wrong number of digits, incorrect inbound CSS, wrong significant digits, etc.
- In some cases, problems with IP routing, or not binding the signaling to the right interface, which causes the SETUP messages to end up getting no response.
- In recent releases you can enable the H.323 process in all nodes, but in old releases, the H.323 daemon was only enabled on servers that were listed under the Device Pool's CUCM Group from H.323 gateways. You would get this if you were trying to send the calls to a server where the H.323 daemon was not running
Causes 16 and 17 are quite common and are not usually related to failures, but normal call events.
Depending on the telco, another reason for calls to fail is that they expect a certain combination of PLAN and TYPE to be sent, depending on the kind of call, you'll see it in a debug isdn q931:
Calling Party Number i = 0x2180, 'XXXXXXXXXXX' Plan:ISDN, Type:National Called Party Number i = 0x81, 'XXXXXX' Plan:ISDN, Type:Unknown
I've seen several kinds of requests from telcos, send type unknown for all calls, send type as international and do not send the access digits (011 for US, or whatever + means in your country) send country code + subscriber number, send as international with 011, etc. Make sure to ask your telco what combination they expect to accept your calls.
Another reason for failure is that some telcos will not allow you to send the ANI if it's not something within the range that you own, some telcos might simply reject the calls, some others will accept the call, but will re-write the ANI, most usually to the main number.
- Understanding debug isdn q931 Disconnect Cause Codes
- Troubleshooting and Debugging VoIP Call Basics
- T1 PRI Troubleshooting
What is the difference between MGCP, H.323 and SIP??
You might want to review this doc:
SIP on some level is similar to H.323, it's a peer to peer protocol, but it's much more powerful and geared towards audio / video / multimedia.
You can review a good explanation about SIP Vs. H.323 here:
You usually want to go to MGCP when you want a centralized dial plan within CUCM, easier to manage, but not as powerful as H.323 or SIP. H.323 requires a lot more configuration in the ISR and CUCM, and usually dial plan changes need to be done on both. This allows for a more flexible dial plan, and to manage the calls before they even reach CUCM, modifying the calling, called numbers, dial plan, etc.
There is a lot of information on this topic, a good reading from Bill Bell can be found here:
A simple google search on H.323 Vs SIP or any of the possible combinations, will render a good number of links on the topic.
How to configure E1-CAS??
This are not found very often, except down here in MX, here's a sample config:
isdn switch-type primary-net5 controller E1 1/0 framing NO-CRC4 ds0-group 0 timeslots 1-15,17-31 type r2-digital r2-compelled cas-custom 0 country telmex category 2 answer-signal group-b 1 caller-digits 4 dnis-digits min 4 max 10 interface Loopback0 ip address 22.214.171.124 255.255.255.0 h323-gateway voip interface
Another version for MX
controller E1 0/0/0 framing NO-CRC4 line-termination 75-ohm ds0-group 0 timeslots 1-15,17-31 type r2-digital r2-compelled ani cas-custom 0 country telmex category 2 answer-signal group-b 1 caller-digits 4 dnis-digits min 1 max 4 ani-digits min 0 max 10 dnis-complete answer-guard-time 1000 groupa-callerid-end
I found this snip from a config for Argentina
controller E1 0/0/0 framing NO-CRC4 ds0-group 0 timeslots 1-15,17-31 type r2-digital r2-compelled cas-custom 0 country argentina
Unfortunately this old technology is not something the one size fits all kind of config, and it will vary a lot depending on the needs and country on which you're deploying this. The easiest method would be to engage with your local telco and ask for a sample config.
Here are some configuration docs:
- Configuring MGCP CAS PBX and AAL2 PVC
- MGCP with Digital CAS and Cisco CallManager Configuration Example
- Implementing T1 CAS for VoIP
- Understanding How Digital T1 CAS (Robbed Bit Signaling) Works in IOS Gateways
I upgraded my IOS to 15.x and now calls are failing, CCAPI debugs show _ManagedAppProcess_TOLLFRAUD_APP??
This is due to a new security enhancement in IOS 15.1(2)T
voice service voip ip address trusted list ipv4 x.x.x.x x.x.x.x --> Subnet, or exact IP ipv4 0.0.0.0 0.0.0.0 ----> This would allow connections from ANY source
It is worth noting that any IP which is configured under a dial-peer, will also be added to the trusted list (even-though, it won't show in the config) as the system will understand that you're actually expecting to make / receive calls from that IP.
I have a new ISR 4XXX but my CUCM does not have it as an option for MGCP??
Support the ISR 4XXX series is only native in CUCM 10.5(2), an enhancement bug was filed for this, and some ES will provide support for some older releases in the MR train.
See CSCuo85914 Add QED support for ISR4351, ISR4331 and ISR4321 gateways
How can I tell if I can configure recording on my GW??
The requirements are outlined here:
UCM 10 - Unified CM Gateway Recording requirements
UCM 10 - Unified CM Gateway Recording requirements
The two main options that are available right now are BiB recording and NBR (Network Based Recording), you can find some information around monitoring and recording in the SRND
How do I enable the Feature Licenses on ISR G2 and 4K??
This has been nicely outlined here, the various options that you have, as well as the steps to do so:
Where do I have to install the PVDM4 on my ISR 4K??
That depends on what you want to use them for:
Q. Can I use the motherboard PVDM4 for T1/E1 TDM voice service?
A. No. Only PVDM4 installed on T1/E1 NIM can be used for TDM voice services, the motherboard PVDM4 can only be used for IP based voice services such as conferencing, transcoding and MTP. However, extra DSP resources on PVDM4 installed on T1/E1 NIM can be pooled together with motherboard PVDM4 in dspfarm for IP based voice services.
Q. Can PVDM4 on one T1/E1 NIM be shared with another T1/E1 module for TDM voice service?
A. No. Each T1/E1 NIM needs to have a dedicated PVDM4 to support TDM voice services.
Q. Can I use the PVDM4 on the motherboard on T1/E1 NIM?
A. Yes. The PVDM4 on motherboard and T1/E1 NIM are identical.
Cisco 4000 Series PVDMs are available in two form factors with four supported densities in each form factor:
● Motherboard PVDMs (PVDM4) for densities up to 256 channels (Figure 1)
● PVDM enhanced services modules (SM-X-PVDM) for densities up to 3080 channels (Figure 2)
The motherboard PVDMs are supported on all Cisco 4000 Series ISRs. They can be plugged directly into the single slot on the router motherboard or into the network interface module (NIM) that supports T1/E1 ports. A PVDM4 module plugged into the motherboard delivers IP-based voice services such as conferencing, media optimization, and transcoding only.
A PVDM4 module plugged into the T1/E1 NIM would be used for voice T1/E1 connectivity. Any excess channels can be reused toward other IP-based services supported on the motherboard slot. Enhanced DSP architecture accommodates a new packet-processing engine optimized for rich-media voice applications, while concurrently supporting the TDM-IP voice framework.
The PVDM enhanced services modules are supported on ISRs that contain an SM-X slot - namely the Cisco 4331, 4351, and 4451 ISRs. The SM-X modules support only IP-based voice services and cannot be used for TDM applications.
Can I configure encryption between my CUCM and my MGCP GW??
Yes, although this is not commonly seen, specially since you would only enable security between CUCM and MGCP, once the call goes out to the PSTN, it would not be encrypted. If you want to do so, you can find the instructions here:
Media and Signaling Authentication and Encryption
How to bind MGCP signaling to an interface??
This is quite easy, you just need the following commands:
mgcp bind control source-interface <interface> mgcp bind media source-interface <interface>
How to configure an IOS MGCP GW??
There are already several documents on this:
- How to Configure MGCP with Digital PRI and Cisco CallManager
- MGCP with Digital CAS and Cisco CallManager Configuration Example
- Configuring MGCP Gateway Support
This is an example from a GW in my lab, 2851 running c2800nm-adventerprisek9_ivs-mz.124-20.T1.bin, using:
WIC Slot 0: T1 (1 port) Multi-Flex Trunk WAN daughter card Hardware revision 1.0 Board revision E0 FRU Part Number VWIC-1MFT-T1=
My running config is:
network-clock-participate wic 0 ! ip domain name pdimx.cisco.com ip host CUCM86.pdimx.cisco.com 126.96.36.199 ! voice-card 0 dspfarm dsp services dspfarm ! controller T1 0/0/0 framing esf linecode b8zs pri-group timeslots 1-24 service mgcp ! interface Serial0/0/0:23 no ip address encapsulation hdlc isdn switch-type primary-ni isdn incoming-voice voice isdn bind-l3 ccm-manager no cdp enable ! voice-port 0/0/0:23 ! ccm-manager mgcp ccm-manager music-on-hold ccm-manager config server 188.8.131.52 ccm-manager config ! mgcp mgcp call-agent CUCM86 2427 service-type mgcp version 0.1 mgcp rtp unreachable timeout 1000 action notify mgcp modem passthrough voip mode nse mgcp package-capability rtp-package mgcp package-capability sst-package mgcp package-capability pre-package no mgcp package-capability res-package no mgcp package-capability fxr-package no mgcp timer receive-rtcp mgcp sdp simple mgcp rtp payload-type g726r16 static ! mgcp profile default
How to configure FXS / FXO with MGCP??
Besides the configuration from How to configure an IOS MGCP GW??, if you have these two lines:
ccm-manager config server x.x.x.x ccm-manager config
Then once you configure the endpoints in CUCM, and reset the GW, CUCM will push the configuration you need, if you don't have them, or want to fully manually configure MGCP, then you just need to add a dial-peers so that you bind MGCP control
dial-peer voice 999100 pots application mgcpapp port 1/0/0 dial-peer voice 999101 pots application mgcpapp port 1/0/1
- Configure MGCP Gateway and FXO/FXS Ports on a Cisco CallManager Server I know this is quite old, but the theory is still the same, just a different interface
How to block inbound calls with MGCP??
A document for this has been written before, the instructions are the same, I believe you require CUCM 8.5+ for this to work:
Blocking Calls Based on Calling Party ID
How to check MGCP registration??
Most people believe that this command will get you what the actual registration status on CUCM should be:
2851-PDI#show ccm-manager MGCP Domain Name: 2851-PDI.pdimx.cisco.com Priority Status Host ============================================================ Primary Registered CUCM86 (184.108.40.206) First Backup None Second Backup None Current active Call Manager: 220.127.116.11 Backhaul/Redundant link port: 2428 Failover Interval: 30 seconds Keepalive Interval: 15 seconds Last keepalive sent: 16:38:44 CST May 4 2015 (elapsed time: 00:00:10) Last MGCP traffic time: 16:38:44 CST May 4 2015 (elapsed time: 00:00:10) Last failover time: None Last switchback time: None Switchback mode: Graceful MGCP Fallback mode: Not Selected Last MGCP Fallback start time: None Last MGCP Fallback end time: None MGCP Download Tones: Disabled TFTP retry count to shut Ports: 2 Backhaul Link info: Link Protocol: TCP Remote Port Number: 2428 Remote IP Address: 18.104.22.168 Current Link State: OPEN Statistics: Packets recvd: 4 Recv failures: 0 Packets xmitted: 4 Xmit failures: 0 PRI Ports being backhauled: Slot 0, VIC 0, port 0 Configuration Auto-Download Information ======================================= No configurations downloaded Current state: Waiting for commands Configuration Download statistics: Download Attempted : 2 Download Successful : 2 Download Failed : 0 TFTP Download Failed : 1 Configuration Attempted : 1 Configuration Successful : 0 Configuration Failed(Parsing): 0 Configuration Failed(config) : 1 Last config download command: FAX mode: cisco Configuration Error History: voice-port 0/1/0 signal groundStart end
But, that actually only shows the status of the connection between MGCP and CUCM on port 2428, that does not really determine the actual registration status on CUCM. Specially with PRIs, that can lead to confusion.
Besides the above showing that it's able to get the config, and proper communication is going on over ports 2427 and 2428, you want to make sure your PRI is actually up:
2851-PDI#sh isdn status Global ISDN Switchtype = primary-ni %Q.931 is backhauled to CCM MANAGER 0x0003 on DSL 0. Layer 3 output may not apply ISDN Serial0/0/0:23 interface dsl 0, interface ISDN Switchtype = primary-ni L2 Protocol = Q.921 0x0000 L3 Protocol(s) = CCM MANAGER 0x0003 Layer 1 Status: ACTIVE Layer 2 Status: TEI = 0, Ces = 1, SAPI = 0, State = MULTIPLE_FRAME_ESTABLISHED Layer 3 Status: 0 Active Layer 3 Call(s) Active dsl 0 CCBs = 0 The Free Channel Mask: 0x807FFFFF Number of L2 Discards = 0, L2 Session ID = 1 Total Allocated ISDN CCBs = 0
If you see under Layer 1 Status:
Layer 1 Status: SHUTDOWN
If you see under Layer 2 Status:
Layer 2 Status: TEI = 0, Ces = 1, SAPI = 0, State = TEI_ASSIGNED
Your PRI will NEVER show up as registered in CUCM, once you plug in a live PRI in the card and Layers 1, 2 and 3 come up, it will register fine.
Is a partial PRI supported with MGCP??
No, this is officially NOT SUPPORTED by Cisco, if you want to use partial PRIs, you would need to switch to H.323 for this.
However, there is an unsupported method for this via CUCM service parameters:
Change B-Channel Maintenance Status 1:
This parameter allows Cisco CallManager to change individual B-Channel maintenance status for PRI and CAS interfaces in real time for troubleshooting.
Input Format: Device Name = B-channel Maintenance Status
S0/DS1-0@SDA123456789ABC = 0000 1111 0000 0000 0000 0001 (24 bits for T1. Channel number begins with 1 to 24 from left to right. In the case of PRI, the last bit specifies the D-Channel, which does not get affected. In this example, the 5th through 8th B-Channels are out of service.)
S1/DS1-0@DLS2-CM136-VG200-2.SELSIUSCMLAB.CISCO.COM = 0000 0000 0000 0000 0000 0000 1111 1111 (32 bits for E1. B-Channel number begins with 1 to 32 from left to right. The 16th channel specifies the D-Channel. The last bit does not affect any channel. In this example, the 25th through 31st channels are marked out of service.)
The Device Name as specified in the Gateway Configuration page in Cisco CallManager Administration MUST exactly match the gateway name that this field specifies. To avoid any manual inputting mistake, copy the Device Name from Cisco CallManager Administration and paste it into this service parameter. "=" is mandatory and unique to distinguish the Device Name and B-Channel Maintenance Status fields.
BCHANNEL MAINTENANCE STATUS = xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
Where x can be:
0 -- In service
1 -- Graceful out of service (Change channel status until active call ends if an active call exists on that channel.)
2 -- Forceful out of service (Tear down active call first; then, change channel status immediately if an active call exists on that channel.)
Because values other than 0,1, or 2 are invalid, the system ignores them. Make sure that the total number of 'x' is either 24 for T1 or 32 for E1. Any other invalid length or mismatch (for example, 24 for E1) gets treated as error, and no action gets taken for that device.
The spaces between device name and "=", between '=' and BCHANNEL MAINTENANCE STATUS, and between x and x, are all optional. You cannot use any space inside the DEVICE NAME field.
PRI Specific: To use this feature, the Enable status poll check box must be checked on the PRI Gateway Configuration window. If it is not, you need to check the check box, click Update, and reset the gateway for the service parameter change to take effect.
Maximum length: 255
The related bugs are:
- CSCdw78580 need ability to take channels in and out of service on PRI gateway
- CSCdx92111 ChangeBChannelMaintenanceStatus is limited to 5 gateways
My PRI is not registering, what can I check??
Besides making sure that your config, and your GW registration is fine, the most common causes for an MGCP GW not registering are:
- Not having the proper DNS resolution, or typos
- Configuring just the hostname and not the FQDN of the ISR on CUCM
- Choosing the wrong slot / card
- Firewalls or ACLs
If all the above is correct, then you want to enable:
- debug mgcp packets
- debug mgcp events
- or you can enable debug mgcp all
Then you would need to go through the debugs to try and pinpoint at what point the process is failing.
- Verify and Troubleshoot the Cisco IOS MGCP Gateway
- Troubleshooting ISDN BRI Layer 3 Using the debug isdn q931 Command I'm aware BRIs are becoming less and less common, but if you're new to MGCP, the theory is very nicely explained here, as well as the messages that are exchanged.
- MGCP Gateway Registration Failure with Cisco CallManager
- Monitor, Reset, and Delete MGCP Gateways for Cisco CallManager
How to configure an H.323 GW??
There are some documents on this:
- Cisco IOS H.323 Gateway Configuration for Use with Cisco CallManager
- H.323 Configuration Guide, Cisco IOS Release 15M&T
This is an example from my lab, running a 2801 with c2801-ipvoice_ivs-mz.124-20.T1.bin
WIC/VIC/HWIC Slot 3: T1 (1 port) Multi-Flex Trunk WAN daughter card Hardware revision 1.0 Board revision E0 FRU Part Number VWIC-1MFT-T1=
Which is directly on slot 0
This is my running config
network-clock-participate wic 3 ip domain name pdimx.cisco.com voice service voip allow-connections h323 to h323 allow-connections h323 to sip allow-connections sip to h323 allow-connections sip to sip h323 voice class codec 1 codec preference 1 g711ulaw bytes 160 codec preference 2 g711alaw bytes 160 codec preference 3 g729r8 bytes 20 voice class h323 1 h225 timeout tcp establish 3 controller T1 0/3/0 framing esf linecode b8zs pri-group timeslots 1-24 interface FastEthernet0/0 ip address 22.214.171.124 255.255.255.0 duplex auto speed auto h323-gateway voip interface h323-gateway voip bind srcaddr 126.96.36.199 interface Serial0/3/0:23 no ip address encapsulation hdlc isdn switch-type primary-ni isdn protocol-emulate network isdn incoming-voice voice no cdp enable voice-port 0/3/0:23 dial-peer voice 101 voip preference 1 destination-pattern .... voice-class codec 1 voice-class h323 1 session target ipv4:188.8.131.52 dtmf-relay h245-alphanumeric ! dial-peer voice 102 voip voice-class codec 1 incoming called-number . ! dial-peer voice 103 pots incoming called-number . direct-inward-dial ! dial-peer voice 104 pots destination-pattern 9.T port 0/3/0:23 ! dial-peer voice 105 voip preference 2 destination-pattern .... voice-class codec 1 voice-class h323 1 session target ipv4:184.108.40.206 dtmf-relay h245-alphanumeric
One thing you would not require on a production environment, would be the command:
isdn protocol-emulate network
I only have that command in order to have a PRI connection for lab purposes, this is the other end of the PRI from my MGCP config example
H323 Failover for outbound calls
The default behavior in IOS, when there are no valid POTS dial-peers for a call to go out of, is to return “unallocated number” as a cause code to CCM. This can happen even if a t1 goes down. When the T1 goes down, the POTS peer is marked as down, and when CCM sends a call to the gateway, it’ll return a UAN cause code to the ccm, causing CCM (by default) to stop hunting for other available gateways.
There are ways to change the behavior using service parameters in CCM, and an alternative in the IOS config. Both are outlined here:
You can issue the global command "no dial-peer outbound status-check pots" on the IOS GW, if you're opposed to changing the CCM behavior. What this command will do is cause the dial-peer to stay up. IOS will try and route the call, and when the T1 is down, it returns "No circuit available" to CCM. When CCM receives this cause code, it knows there's been a non-user error, and continues hunting, achieving the desired behavior. The IOS code will translate any code we get from pots side to IP side
Go to service parameters >> CCM >> route pattern (cluster wide config) and change the following:
Stop Routing on Unallocated Number Flag = False
Stop Routing on User Busy Flag = False
How can I block / reject inbound calls on an H.323 GW??
You can find plenty of examples and the full explanation of how to do this in the below two links:
Use the reject keyword to reject calls that match. This example rejects all calls that start with "234".
rule 1 reject /^234/ router#test voice translation-rule 10 1234 1234 Didn't match with any of rules router#test voice translation-rule 10 2345 blocked on rule 1
How, and why, to bind H.323 signaling to an interface??
You only need to add the commands:
h323-gateway voip interface h323-gateway voip bind srcaddr 220.127.116.11
this would be an example
interface FastEthernet0/0 ip address 18.104.22.168 255.255.255.0 duplex auto speed auto h323-gateway voip interface h323-gateway voip bind srcaddr 22.214.171.124
Why would you want to do this??'
In some scenarios your H.323 signaling might come out using another IP interface from the ISR, the problem with that, is that CUCM will only accept H.323 signaling from the IP with which you defined the H.323 GW, and that would cause a failure for inbound calls. That's the reason why you would want to manually set which IP interface you will use.
How to configure redundancy in dial peers pointing to CUCM??
This has already been covered in documentation:
This is actually quite easy:
voice class h323 1 h225 timeout tcp establish 3 dial-peer voice 101 voip preference 1 destination-pattern .... voice-class codec 1 voice-class h323 1 session target ipv4:126.96.36.199 dtmf-relay h245-alphanumeric dial-peer voice 105 voip preference 2 destination-pattern .... voice-class codec 1 voice-class h323 1 session target ipv4:188.8.131.52 dtmf-relay h245-alphanumeric
How many dial-peers can I configure in my ISR??
This is a question I've seen plenty of times, the simple answer, is that there are way too many factor to provide a straight answer.
The theoretical limit for most platforms, is 2 billion, I doubt anyone will be anywhere near that number.
As each DP takes memory in order to run, depending on how many options you configure in them, they will be smaller or larger. A very simple DP with a destination-pattern and IPv4 target will be around 6KB of memory. If you're already above 500 DPs, then you should start considering a GK / SME deployment, and a centralized dial plan.
The only real way to find out how many DPs you platform, with your current config can support, is to test it. As I mentioned, depending on the complexity of your DPs, they will take more than 6 KBs, and you also don't want to go too high on the memory usage on your ISR.
How to route calls on different PRI based on calling number from CUCM??
The easiest way to do this, is doing it with a CUCM config.
Assuming you want to configure a two groups of people to make calls using the same H.323 GW which has 2 (or more) PRIs
Group A Group B
Usually you would have just one Route Pattern like 9.1XXXXXXXXXX in one partition. For this, you will need to create a new partition, only Group B can reach, and use the same pattern.
You would end up with:
- 9.1XXXXXXXXXX on partitionA
- 9.1XXXXXXXXXX on partitionB
Now make sure you control access to only one of them for each group via their CSS. Now, the important part of this config, is that you will add a prefix on each route pattern, they need to be different.
- 9.1XXXXXXXXXX on partitionA Prefix 333
- 9.1XXXXXXXXXX on partitionB Prefix 444
We will set the Route Pattern to Discard PreDot
Now, in your GW, you will use that prefix to differentiate where do you want to route the call:
dial-peer voice 101 pots destination-pattern 3331T port 0/2/0:23 dial-peer voice 102 pots destination-pattern 4441T port 0/3/0:23
As exact matches will be removed from the called number in the SETUP message, you will only send 10 digits out to your telco.
What are the dial-peers??
The dial-peers are the equivalent of Route Patterns in CUCM, they will contain a destination-pattern, which will match the number you're trying to reach, and a target, using IP or hostname, for the peer where they are located.
dial-peer voice 101 voip --> We define 101 as the number, this is chosen by user, and voip, or pots
preference 1 --> The preference is used when you have more than one option for routing the same number
destination-pattern .... --> This is the number we're going to match, in this case, any 4 digits number
session target ipv4:184.108.40.206 --> This is the IP of the peer where the numbers are
dtmf-relay h245-alphanumeric --> This is the DTMF method we're going to use for the call (if necessary)
How to configure the dial-peers??
Well, this is a whole topic on its own, you can configure very basic dial-peers like the ones I've listed in the examples, to very complex dial-peers for very specific purposes, it depends what you need, I suggest you review the following docs:
Besides the actual configuration, you also need to understand two very important concepts in H.323 and dial-peers, the operational status, and inbound and outbound call legs:
- Understanding Inbound and Outbound Dial Peers Matching on IOS Platforms
- Understanding the Operational Status of Dial Peers on Cisco IOS Platforms
The importance of matching inbound and outbound dial-peers relies in the fact that you will set certain call properties with them, otherwise, you will use the default dial-peer which most usually is not desired. A VERY IMPORTANT thing to remember, is that by default, H.323 uses G.729r8 as the default codec, unless specifically changed in the dial-peer, or the voice-class codec
How to configure FXS / FXO with H.323??
An FXO configuration can be as simple as:
voice-port 0/1/1 connection plar opx 111 caller-id enable
Or a lot more elaborate
voice-port 0/1/1 supervisory disconnect dualtone mid-call supervisory custom-cptone CISCOTest-custom pre-dial-delay 0 input gain -6 echo-cancel coverage 32 no non-linear timeouts call-disconnect 5 timeouts wait-release 5 timing hookflash-out 50 connection plar opx immediate 111 caller-id enable
The settings for connection depend on the usage, most usually it's plar, or plar opx
Command reference: connection
The same for an FXS
voice-port 2/0 timeouts initial 60 timeouts interdigit 60 timeouts ringing infinity caller-id enable type 1 voice-port 0/1/1 supervisory disconnect dualtone mid-call no battery-reversal cable-detect echo-cancel mode 2 cptone XX timeouts call-disconnect 3 timeouts ringing infinity timeouts wait-release 3 timing digit 200 timing inter-digit 200 connection plar 111
The routing on this interfaces is most usually that you configure them using a trunk to bundle them as a single interface, at least for routing, and point to the trunk group. Otherwise, you point to the interface directly in the dial-peer configuration.
How to configure a SIP trunk??
Here are several examples, some of the configuration might depend on who is on the other side of the SIP trunk, if it's another call control agent, or if it's a telco, I'll add some Live presos around the topic at a later date:
- Cisco CallManager Express (CME) SIP Trunking Configuration Example
- SIP Configuration Guide, Cisco IOS Release 15M&T
- Configuration of SIP Trunking for PSTN Access (SIP-to-SIP) Configuration Guide, Cisco IOS XE Release 3S (Cisco ASR 1000)
- CUCM to CUBE Integration Configuration Example
- Configuring Multi-Tenants on SIP Trunks
Examples specific to certain platform and telcos can be found here:
What is early offer and delayed offer??
This refers to the SIP INVITE message which is used to start a call to a SIP endpoint. If the INVITE contains SDP (Session Description Protocol), then this would be an Early Offer, because you're already sending out what capabilities you have and want for the call. If you send the INVITE without SDP, and then wait for the OK message to come back from the called party with his capabilities, then this would be a Delayed Offer.
It's very important to know, specially for SIP trunks, whether they are expecting DO, or EO for the session establishment.
This topic is nicely explained here:
Can I configure multiple Registrars on a SIP trunk??
Yes, you can, please read the following documentation:
Example SCCP configuration for IOS
sccp local FastEthernet0/0 sccp ccm X.X.X.X identifier 10 sccp ccm X.X.X.X identifier 12 sccp sccp ccm group 1 associate ccm 10 priority 1 associate ccm 12 priority 2 stcapp ccm-group 1 stcapp dial-peer voice 1 pots service stcapp port 2/1 dial-peer voice 2 pots service stcapp port 2/2
Back to Unified Communications FAQ
Any comments, questions, suggestions, contributions, etc. please send them to email@example.com. Please make sure the subject is formatted "UC FAQ <anything else>" as I'll have rules in my mail to match them, otherwise, they'll end up in my spam folder.