cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
7986
Views
0
Helpful
0
Comments
TCC_2
Level 10
Level 10

Core Issue

The codec negotiation is successful in Cisco IOS  Release12.3(6) due to Cisco bug ID CSCeh19375, which treats g729r8 and g729br8 codecs as interoperable codecs. Codec negotiation fails in Cisco IOS Release 12.3(19) because this version has the fix for Cisco bug ID CSCeh19375.

These are two important facts to know regarding this scenario:

  1. The G729 (g729r8) and G729b (g729br8, g729r8 with Annex B) codecs are not compatible and interoperable on Cisco IOS DSPs.
  2. According to Section 4.1.9 of RFC 3555, the attribute annexb indicates whether Annex B is used or not. It is implied that Annex B is in use if this parameter is omitted in the Secure Device Provisioning (SDP) body.

If these three SDP messages for g729 are examined, Option 1 and Option 3 are considered for g729b, but only Option 2 is considered for g729 according to RFC 3555. If the third-party Session Initiation Protocol (SIP) proxy or SIP User Agent (SIP-UA) sends a g729 offer in Option 3 format, Cisco IOS assumes it is g729b, in compliance with RFC 3555.

Option 1

m=audio 18440 RTP/AVP 18 19
c=IN IP4 10.66.75.192
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=yes

Option 2

m=audio 18440 RTP/AVP 18 19
c=IN IP4 10.66.75.192
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no

Option 3

m=audio 18440 RTP/AVP 18 19
c=IN IP4 10.66.75.192
a=rtpmap:18 G729/8000

With Cisco bug ID CSCeh19375, Cisco IOS Release (12.3(6) thinks g729 and g729b are interoperable. This assumption is incorrect, and starts this chain of events:

  1. Cisco IOS sends g729r8 an INVITE in this way (if g729r8 is configured in the dial peer, which happens by default):

    INVITE sip:3000@172.16.3.130:5060 SIP/2.0
    a=rtpmap:18 G729/8000
    a=fmtp:18 annexb=no
  2. The third-party SIP-UA or SIP proxy sends this back:

    SIP/2.0 200 OK
    a=rtpmap:18 G729/8000
  3. Cisco IOS assumes the phone server wants a g729br8. This assumption is also made based Cisco on bug ID CSCeh19375.
  4. Cisco IOS chooses interoperable codec g729r8 in version 12.3(6), and the codec negotiation succeeds:

    May 17 16:14:03.240: sipSPIDoMediaNegotiation: number of m lines is 1
    May 17 16:14:03.240: sipSPIDoAudioNegotiation: An exact codec match not configured, using interoperable codec g729r8
    May 17 16:14:03.240: sipSPIDoAudioNegotiation: Codec (g729r8) Negotiation Successful on Static Payload for m-line 1
  5. After a Cisco IOS upgrade to Release 12.3(18), Cisco bug ID CSCeh19375 is fixed. It does not choose g729r8 as the interoperable codec for g729br8, so the codec negotiation fails:

    May 17 10:33:21.764: sipSPIDoMediaNegotiation: number of m lines is 1
    May 17 10:33:21.764: Codec (g729br8) is not in preferred list
    May 17 10:33:21.768: Dynamic Payload :101 in SDP Body
    May 17 10:33:21.768: sipSPIDoAudioNegotiation: No matching voice codec found for m-line 1
    May 17 10:33:21.772: sipSPIDoAudioNegotiation: Media negotiation failed for m-line 1

Resolution

After an upgrade to Cisco IOS Release 12.3(18) or later, Cisco IOS becomes RFC 3555 compliant and is not able to interoperate with non-RFC 3555 compliant SIP-UA.

To resolve this issue, the phone server must comply with RFC 3555. A hidden command, g729-annexb override under the sip-ua command, was added by Cisco bug ID CSCse16135 to interoperate with non-RFC 3555 compliant SIP-UA. Issue this command, which was added in CCO release 12.3(20), 12.4(10), 12.4(9)T1 and Cisco IOS Releases later than 12.4(9)T1.

For related information, refer to:

Getting Started

Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: