[asterisk-ss7] chan_ss7 1.4.3 bug with overlapping CIC numbers on combined linksets

Robert Verspuy robert at exa-omicron.nl
Fri Jan 7 12:55:47 CST 2011

Op 06-01-11 19:19, Gregory Massel schreef:
> Hi Robert
Hi Gregory,

I don't see your e-mail on the asterisk-ss7 list. Are you still a member?
> I think the write buffer notice you're getting is normal audio loss 
> due to the jitter buffer and jitter associated with the SIP channel.
That's my idea also.
> It seems that remove_from_idlelist() in l4isup.c may be the issue:
> static void remove_from_idlelist(struct ss7_chan *pvt) {
>   struct linkset* linkset = pvt->link->linkset;
>   struct ss7_chan *prev, *cur;
>   cur = linkset->group_linkset->idle_list;
>   prev = NULL;
>   while(cur != NULL) {
>     if(pvt->cic == cur->cic) {
>       if(prev == NULL) {
>         linkset->group_linkset->idle_list = pvt->next_idle;
>       } else {
>         prev->next_idle = pvt->next_idle;
>       }
>       pvt->next_idle = NULL;
>       return;
>     }
>     prev = cur;
>     cur = cur->next_idle;
>   }
>   ast_log(LOG_NOTICE, "Trying to remove CIC=%d from idle list, but not 
> found?!?.\n", pvt->cic);
> }
> What concerns me is the following line:
> if(pvt->cic == cur->cic) {
> I get the impression that it should read something like:
> if(pvt->cic == cur->cic && linkset->dpc == cur->linkset->dpc) {
> In my mind, this should, in theory, ensure that the CIC is matched not 
> just on the CIC number but also on the DPC.
> My thinking is that perhaps the current code is causing the wrong 
> channel to be removed from the idle list.
> Does this sound logical to you?
Yes, maybe there is still an issue in this source.

But the problem is a bit more complicated.
With our connection to the Dutch ISUP (KPN), we have two linksets (Asd2 
and Asd3).
The linksets do not share a E1's.
Both linksets have their own signalling link on the first E1.
But it is possible to receive signalling on the Asd2 signal link for a 
call on CIC 25 from the Asd3 link.

So only checking the dpc is not enough. When calling the 
remove_from_idlelist function, besides the pvt also the corresponding 
dpc must be passed along,
just like I did in my patch.

> Unfortunately this doesn't explain why I'm experiencing the problem 
> but you arn't, although I suspect that the crash may only occur once 
> you try dial out a call using a channel that wasn't correctly removed 
> from the idle list. Depending on the hunting policy in use, it may be 
> that you're receiving calls on even CICs and making them on odd CICs 
> as long as there are free CICs, in which case you may not experience 
> the problem if you don't use more than 50% of your capacity. Just a 
> theory...
We have seperate E1's for inbound and outbound traphic.
And we don't have much outbound traphic, maybe even nothing in the last 

> --Greg
With kind regards,

Patroonsweg 10
3892 DB Zeewolde
Tel.: 088-OMICRON (66 427 66)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-ss7/attachments/20110107/8fb4fdff/attachment.htm>

More information about the asterisk-ss7 mailing list