What controls the silenceSupp attribute?


I have a SIP provider who is sending Silence Suppression. I have asked them to turn this off and they will not. After a week of back and forth with them and the vendor of their switch it has been decided that i need to send a=silenceSupp:off as part of the SDP.

According to my research asterisk should already do this. But in my packet capture it does not. I have pored over source code and found only 1 relevant part of the code. in chan_sip.c

	if (!p->owner || ast_channel_timingfd(p->owner) == -1) {
		ast_str_append(&a_audio, 0, "a=silenceSupp:off - - - -\r\n");

This code seems to be a part of creating the SDP packet, I am however new to asterisk source so I don’t know what condition that if statement is looking for.

Is there a way. Seriously any way, hack or not… to get the silenceSupp:off to be sent.

I am desperate Thank you


Asterisk 13.38.2 using chansip driver
I am using FreePBX but I am fimillier with asterisk dialplan. and to me this does not seem a freepbx problem

That version is a about five weeks from full end of life, and has not been receiving routine fixes for almost a year.

I believe that test is basically saying only insist that silence suppression is not used if Asterisk is relying on the regular arrival of frames to provide timing for outgoing traffic, otherwise it will try to tolerate silence suppression. No sensible current configuration should rely on the incoming media as the primary source of timing.

What problem is the silence suppression causing.

(I think the test translates as either there is no Asterisk channel associated with the session, or the channel has no timing source.

The initial symptom was garbled audio. Which started soon after my provider upgraded switches. From my packet captures it looks like the remote side is going into science suppress too aggressively and cutting off low talkers.

They remain unwilling (or unable) to change their options. They have suggested to me that I send a request to disable science suppress.

Any way you can think of to force that check to send the option? Could a module be written to do it?

Any other ideas?

Thanks again

As you describe it, the problem is purely with them, and will affect many of their customers. It really sounds like you should change service providers.

However, you could simply delete if (!p->owner || ast_channel_timingfd(p->owner) == -1) and recompile.

Note that chan_sip is, effectively, no longer supported.

I agree

Is there an easy way to recompile? Can I somehow compile the one file chan_sip.so without the rest of it? I’m scared that a ‘make install’ will break something else and we will go from bad to worse

In other news my weekend plans now include getting up to asterisk 16LTS and trying my hand at pjsip to see if that changes anything.

Changing providers is on my radar-- but not really feasible at this moment

If you built it, or if it is, otherwise, configured the same as the running system, you can replace chan_sip.so, manually, with the you just built. However make install doesn’t disrupt anything configurable and does ensure that the whole of Asterisk is using the same options.

Actually, if you built it, you can restart the build process from “make”, and, as you haven’t changed any included files, it will just built chan_sip.so.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.