[asterisk-ss7] chan_ss7-1.4.3/1.2.1 MTP3D - No signaling channels
Matthias van der Vlies
mvdvlies at gmail.com
Fri Dec 3 07:39:38 CST 2010
Dear all,
Two weeks ago a working interconnection with another carrier went down,
due to a reboot of our system. Since then chan_ss7 stopped working.
When I load the module all looks fine:
apollo*CLI> module load chan_ss7.so
[Dec 3 14:12:04] NOTICE[27660]: config.c:804 load_config_link:
Configured link 'KPN-XXX-sig' on linkset 'XXX-XXX', firstcic=1
[Dec 3 14:12:04] NOTICE[27660]: config.c:804 load_config_link:
Configured link 'KPN-XXX-Z05-01' on linkset 'XXX-XXX', firstcic=1
[Dec 3 14:12:04] NOTICE[27660]: config.c:804 load_config_link:
Configured link 'KPN-XXX-sig' on linkset 'XXX-XXX', firstcic=1
[Dec 3 14:12:04] NOTICE[27660]: config.c:804 load_config_link:
Configured link 'KPN-XXX-Z05-01' on linkset 'KPN-XXX', firstcic=1
[Dec 3 14:12:04] NOTICE[27660]: config.c:1277 load_config: Configuring
OPC XXXX, DPC XXX for linkset 'XXX-XXX'.
[Dec 3 14:12:04] NOTICE[27660]: config.c:1277 load_config: Configuring
OPC XXXX, DPC XXX for linkset 'XXX-XXX'.
-- Starting cluster thread, pid=27628.
-- Starting continuity check thread, pid=27628.
[Dec 3 14:12:04] NOTICE[27660]: mtp.c:2378 mtp_init: Initialising 2
signalling links
-- Starting MTP thread, pid=27628.
-- Starting monitor thread, pid=27628.
[Dec 3 14:12:04] NOTICE[28090]: mtp.c:2259 mtp_init_link: Initialising
link 'XXX-XXX-Z05-01/16', linkset 'XXX-XXX', sls 0.
[Dec 3 14:12:04] NOTICE[28090]: mtp.c:2277 mtp_init_link: Signalling
channel on link 'KPN-XXX-Z05-01/16' has signalling type 0x80080.
[Dec 3 14:12:04] NOTICE[28090]: mtp.c:2259 mtp_init_link: Initialising
link 'XXX-XXX-Z05-01/16', linkset 'XXX-XXX', sls 0.
[Dec 3 14:12:04] NOTICE[28090]: mtp.c:2277 mtp_init_link: Signalling
channel on link 'XXX-XXX-Z05-01/16' has signalling type 0x80080.
-- SS7 channel loaded successfully.
When I issue a reset I see the following:
[Dec 3 14:15:30] NOTICE[28090]: l4isup.c:1442 t22_timeout: T22 timeout
(No "circuit group reset acknowledge" from peer) CIC=1.
[Dec 3 14:15:30] WARNING[28090]: l4isup.c:442 mtp_enqueue_isup_packet:
MTP send fifo not ready, lsi=0.
[Dec 3 14:15:30] NOTICE[28090]: l4isup.c:1442 t22_timeout: T22 timeout
(No "circuit group reset acknowledge" from peer) CIC=17.
[Dec 3 14:15:30] WARNING[28090]: l4isup.c:442 mtp_enqueue_isup_packet:
MTP send fifo not ready, lsi=0.
[Dec 3 14:15:30] NOTICE[28090]: l4isup.c:1442 t22_timeout: T22 timeout
(No "circuit group reset acknowledge" from peer) CIC=1.
[Dec 3 14:15:30] WARNING[28090]: l4isup.c:442 mtp_enqueue_isup_packet:
MTP send fifo not ready, lsi=0.
[Dec 3 14:15:30] NOTICE[28090]: l4isup.c:1442 t22_timeout: T22 timeout
(No "circuit group reset acknowledge" from peer) CIC=17.
[Dec 3 14:15:30] WARNING[28090]: l4isup.c:442 mtp_enqueue_isup_packet:
MTP send fifo not ready, lsi=0.
Conclusion, the module is unable to contact the MTP3D. When I run it
manually I get the following message:
No signaling channels
Which comes from mtp3d.c:
349 for (i = 0; i < this_host->n_slinks; i++) {
350 struct link* link = this_host->slinks[i];
351 if (strcmp(link->mtp3server_host, this_host->name) == 0) {
352 if (*link->mtp3server_port) {
353 port = atoi(link->mtp3server_port);
354 link->mtp3fd = mtp3_setup_socket(port, 0);
355 if (link->mtp3fd == -1) {
356 ast_log(LOG_ERROR, "Could not setup mtp3 listen port %d,
%d:%s\n", port, errno, strerror(errno));
357 return;
358 }
359 printf("Using mtp3 service port %d, socket %d\n", port,
link->mtp3fd);
360 n_listen++;
361 }
362 }
363 }
364 if (!n_listen) {
365 fprintf(stderr, "No signaling channels\n");
366 exit(1);
367 }
See the exit(1), meaning the MTP daemon shuts down. When I comment it
out, the same problem exists because there were no sockets opened. So I
looked for code setting link->mtp3server_host and link->mtp3server_port.
It's in config.c in a rather odd place:
663 } else if(0 == strcasecmp(v->name, "schannel")) {
664 link->remote = 0;
665 spec = &chan_spec_buf[0];
666 if (strcmp(v->value, "")) {
667 if ((sscanf(v->value, "%[^@]@%[^:]:%s", chan_spec_buf,
link->mtp3server_host, link->mtp3server_port) == 3) || (sscanf(v->value,
"%[^@]@%[^:]", chan_spec_buf, link->mtp3server_host) == 2)) {
668 if (!is_mtp3d)
669 link->remote = 1;
670 } else
671 snprintf(chan_spec_buf, sizeof(chan_spec_buf), "%s",
v->value);
672 p = strsep(&spec, ",");
673 while(p && *p) {
674 int i, first, last;
675 if(sscanf(p, "%d-%d", &first, &last) == 2) {
676 if (first < 0 || first > last || last > 31) {
677 ast_log(LOG_DEBUG, "Schannel range '%s' is %d %d
\n", p, first,last);
678 ast_log(LOG_ERROR, "Illegal schannel range '%s' for
schannel specification for link '%s'.\n", p, link_name);
679 return -1;
680 }
681 }
682 else {
683 if((sscanf(p, "%d", &first) != 1) || (first < 0) ||
(first > 31)) {
684 ast_log(LOG_ERROR, "Illegal schannel value '%s' for
schannel specification for link '%s'.\n", p, link_name);
685 return -1;
686 }
687 last = first;
688 }
689 for (i = first; i <= last; i++)
690 link->schannel.mask |= 1 << (i-1);
691 p = strsep(&spec, ",");
692 }
693 for (i = 0; i < 32; i++)
694 if (link->schannel.mask & (1 << i))
695 link->n_schannels++;
696 }
697 has_schannel = 1;
698 }
It's set by the schannel configuration. I think that has something to do
with chan_ss7's capabilty to cluster. However I'm a bit clueless why the
same configuration does not work anymore. Tried 1.2.1 (original version
used) and 1.4.3
Kind regards,
Matthias van der Vlies
More information about the asterisk-ss7
mailing list