01-08-2015 08:57 AM - edited 03-21-2019 10:22 AM
Hello,
I'll try to explain the situation as best as I can.
A fax device is connected to the phone port of the SPA 112 (Firmware Version: 1.3.5 (004_XU001) Sep 16 2014) . ATA has T38 support enabled and is a terminating gateway in this case. An voip account is configured and registered to a provider that supports T38 as fax relay protocol.
Another fax device is connected to originating gateway (in this case Patton Smartnode analog gateway) and another voip account is registered to the same provider. T.38 support is intentionally disabled on originating gateway.
I'd expect the following call flow:
- Terminating gateway answers the call (G711)
- Terminating gateway offers T38 when fax signalling is detected
- originating gateway rejects t38 offer (disabled on device)
- call is reinvited back to G711
If you look at the debug (attached; pcap zipped), seems that the call is reinvited to G711 but there is no RTP stream from the SPA112 after returning back to G711.
Any thoughts on this?
BR,
Sebastian
P.S.
To explain IP addresses used in trace:
10.128.3.1 - sip proxy
10.128.3.4 - media proxy
10.200.0.17 - originating gateway
10.200.0.253 - terminating gateway (SPA)
Solved! Go to Solution.
01-08-2015 11:22 AM
I would like to analyze the capture file and comment the most important steps. Lets go.
I see two sessions:
A: 10.200.0.17->10.128.3.1 | B: 10.128.3.1->10.200.0.253 |
---|---|
-> INVITE (with SDP, aLaw, media 10.200.0.17, sendrecv) <-180 RINGING (with SDP, aLaw, media 10.128.3.1, sendrecv) | -> INVITE (with SDP, aLaw, media 10.200.0.17, sendrecv) <- RINGING (no SDP) |
The session A is now in phase "call setup" with preliminary audio carrying call setup tones, media 10.200.0.17,10.128.3.1 aLaw, bidirectional (sendrecv).
The session B is now in phase "call setup", no preliminary audio, call progress announced by SIP message itself
A: 10.200.0.17->10.128.3.1 | B: 10.128.3.1->10.200.0.253 |
---|---|
<- OK (with SDP, aLaw,media 10.128.3.4, sendrecv) <-ACK | <- OK (with SDP, aLaw,media 10.200.0.253, sendrecv) -> ACK |
The session A is now in phase "call connected" with audio media 10.200.0.17,10.128.3.4 aLaw, bidirectional (sendrecv).
The session B is now in phase "call connected" with audio media 10.200.0.17,10.200.0.253 aLaw, bidirectional (sendrecv).
Two RTP streams can be seen within capture file
1: starting on packet 125&126 (Seq 4911) 10.200.0.17->10.128.3.4->10.200.0.253
2: starting on packet 129&130 (Seq 210) 10.200.0.253->10.128.3.4->10.200.0.17
CNG is passed trough them and has been detected by terminating device. So ReINVITE:
A: 10.200.0.17->10.128.3.1 | B: 10.128.3.1->10.200.0.253 |
---|---|
<- INVITE (with SDP, T.38,media 10.128.3.4) -> 488 Not acceptable here | <- INVITE (with SDP, T.38, media 10.200.0.253) -> OK (with SDP, T.38. media 10.128.3.4) |
So T.38 has been successfully (re-)negotiated on session B as sip proxy has approved the T.38. Session A remain in former state (e.g. aLaw audio) as originating device rejected transition to T.38.
Note that media proxy receive T.38 packets from 10.200.0.253 a resends them as-is to 10.200.0.17 despite there is no T.38 negotiated here. Also, aLaw packets received from 10.200.0.17 are resend as-is to 10.200.0.253 (they are interpreted as T.38 packets).
It is somewhat unfortunate behavior. Media proxy should recode media of the protocol on left side is not the same as the protocol on right side. SIP proxy should not approve protocol change unless it know the media proxy can handle them. On the ideal world, the SIP proxy should not OK T.38/reINVITE to 10.20.0.253 unless it received OK from 10.200.0.17. As originator is not willing to speak T.38 and media proxy can't translate aLaw<->T.38 the terminating reINVITE has to be rejected.
Well, we are not living in ideal word and reINVITE request has been approved. Now the SIP proxy know the media proxy can't handle the current configuration, so it start attempt to revert both session back to aLaw (despite the A session is aLaw already):
A: 10.200.0.17->10.128.3.1 | B: 10.128.3.1->10.200.0.253 |
---|---|
<- INVITE (with SDP, aLaw, media 10.128.3.4) -> OK (with SDP, aLaw. media 10.200.0.17) | -> INVITE (with SDP, aLaw, media 10.128.3.4) <- OK (with SDP, aLaw. media 10.200.0.253) |
Both sessions should be in aLaw mode now. Unfortunately, despite 10.200.0.253 ACKed the transition to aLaw it continue to speak T.38.
Conclusion:
It seems you hit firmware bug. SPA112 should either:
A: reject reINVITE from T.38 to aLaw if it is unable to do it correctly
or
B: do it correctly
By the way, in the "A" case, the SIP proxy can do nothing but terminate the both legs of call. Premature OK to aLaw->T.38 transition (as I described above) make it incompatible with devices that are unable to revert from T.38 back to raw audio.
Whats now ? You can turn in level 3 syslog and debug (Voice->System tab) and catch them. It may reveal more about the issue. But I'm not so sure it can reveal something that allow us to solve the issue. But you need the log if you decide to report the bug to Cisco SMB TAC.
You can report firmware bug to SMB TAC even in the case you have no support agreement.
Despite you have support contract or not, don't put so much hope the Cisco will help you. And zero chance it will solve the problem in reasonable time frame.
01-08-2015 11:22 AM
I would like to analyze the capture file and comment the most important steps. Lets go.
I see two sessions:
A: 10.200.0.17->10.128.3.1 | B: 10.128.3.1->10.200.0.253 |
---|---|
-> INVITE (with SDP, aLaw, media 10.200.0.17, sendrecv) <-180 RINGING (with SDP, aLaw, media 10.128.3.1, sendrecv) | -> INVITE (with SDP, aLaw, media 10.200.0.17, sendrecv) <- RINGING (no SDP) |
The session A is now in phase "call setup" with preliminary audio carrying call setup tones, media 10.200.0.17,10.128.3.1 aLaw, bidirectional (sendrecv).
The session B is now in phase "call setup", no preliminary audio, call progress announced by SIP message itself
A: 10.200.0.17->10.128.3.1 | B: 10.128.3.1->10.200.0.253 |
---|---|
<- OK (with SDP, aLaw,media 10.128.3.4, sendrecv) <-ACK | <- OK (with SDP, aLaw,media 10.200.0.253, sendrecv) -> ACK |
The session A is now in phase "call connected" with audio media 10.200.0.17,10.128.3.4 aLaw, bidirectional (sendrecv).
The session B is now in phase "call connected" with audio media 10.200.0.17,10.200.0.253 aLaw, bidirectional (sendrecv).
Two RTP streams can be seen within capture file
1: starting on packet 125&126 (Seq 4911) 10.200.0.17->10.128.3.4->10.200.0.253
2: starting on packet 129&130 (Seq 210) 10.200.0.253->10.128.3.4->10.200.0.17
CNG is passed trough them and has been detected by terminating device. So ReINVITE:
A: 10.200.0.17->10.128.3.1 | B: 10.128.3.1->10.200.0.253 |
---|---|
<- INVITE (with SDP, T.38,media 10.128.3.4) -> 488 Not acceptable here | <- INVITE (with SDP, T.38, media 10.200.0.253) -> OK (with SDP, T.38. media 10.128.3.4) |
So T.38 has been successfully (re-)negotiated on session B as sip proxy has approved the T.38. Session A remain in former state (e.g. aLaw audio) as originating device rejected transition to T.38.
Note that media proxy receive T.38 packets from 10.200.0.253 a resends them as-is to 10.200.0.17 despite there is no T.38 negotiated here. Also, aLaw packets received from 10.200.0.17 are resend as-is to 10.200.0.253 (they are interpreted as T.38 packets).
It is somewhat unfortunate behavior. Media proxy should recode media of the protocol on left side is not the same as the protocol on right side. SIP proxy should not approve protocol change unless it know the media proxy can handle them. On the ideal world, the SIP proxy should not OK T.38/reINVITE to 10.20.0.253 unless it received OK from 10.200.0.17. As originator is not willing to speak T.38 and media proxy can't translate aLaw<->T.38 the terminating reINVITE has to be rejected.
Well, we are not living in ideal word and reINVITE request has been approved. Now the SIP proxy know the media proxy can't handle the current configuration, so it start attempt to revert both session back to aLaw (despite the A session is aLaw already):
A: 10.200.0.17->10.128.3.1 | B: 10.128.3.1->10.200.0.253 |
---|---|
<- INVITE (with SDP, aLaw, media 10.128.3.4) -> OK (with SDP, aLaw. media 10.200.0.17) | -> INVITE (with SDP, aLaw, media 10.128.3.4) <- OK (with SDP, aLaw. media 10.200.0.253) |
Both sessions should be in aLaw mode now. Unfortunately, despite 10.200.0.253 ACKed the transition to aLaw it continue to speak T.38.
Conclusion:
It seems you hit firmware bug. SPA112 should either:
A: reject reINVITE from T.38 to aLaw if it is unable to do it correctly
or
B: do it correctly
By the way, in the "A" case, the SIP proxy can do nothing but terminate the both legs of call. Premature OK to aLaw->T.38 transition (as I described above) make it incompatible with devices that are unable to revert from T.38 back to raw audio.
Whats now ? You can turn in level 3 syslog and debug (Voice->System tab) and catch them. It may reveal more about the issue. But I'm not so sure it can reveal something that allow us to solve the issue. But you need the log if you decide to report the bug to Cisco SMB TAC.
You can report firmware bug to SMB TAC even in the case you have no support agreement.
Despite you have support contract or not, don't put so much hope the Cisco will help you. And zero chance it will solve the problem in reasonable time frame.
01-09-2015 03:05 AM
Hi Dan,
thanks for the detailed explanation.
Another question: when rejecting T38 offer, UAC/UAS should use "415 Unsupported media type" or "488 Not Acceptable here" message?
I'd say 488 but seems both methods are used dependent on the specific sip stack implementation.
01-09-2015 04:24 AM
I wish the 488 is more appropriate here. The 415 seems to be dedicated for unsupported packet's Content-Type (e.g. something other than application/sdp, for example).
But it should not be major issue in any way. Any 4xx response needs to be recognized as "reINVITE request has not been accepted" response regardless of exact response code.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide