Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Jul 2012 18:48:31 +0200
From:      Hans Petter Selasky <hselasky@c2i.net>
To:        Andreas Longwitz <longwitz@incore.de>
Cc:        freebsd-isdn@freebsd.org
Subject:   Re: ISDN4BSD (HPS version) is going into ports
Message-ID:  <201207191848.31049.hselasky@c2i.net>
In-Reply-To: <500833F5.2050205@incore.de>
References:  <4FFDB2DE.6010107@incore.de> <201207161801.46422.hselasky@c2i.net> <500833F5.2050205@incore.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday 19 July 2012 18:21:09 Andreas Longwitz wrote:
> Hi Hans,

Hi Andreas,

> 
> >> 1. example: Default options + SPPP + RBCH, crash on kldload i4b, test PC
> > 
> >> without isdn hardware:
> > I cannot reproduce this crash over here. I think it is not a bug in I4B,
> > but rather some hardware generating spurious interrupts when probing!
> > Loading I4B will cause a re-probe of existing devices with no driver
> > attached.
> 
> OK, the re-probe of the existing devices is done by the kernel because a
> DRIVER_MODULE is loaded via kldload, or did you some special programming
> for this ?

No, this is done by generic PNP/PCI code when the module is loaded as far as 
I'm aware.

> 
> > The I4B module as a whole cannot be unloaded, it requires a reboot. Some
> > parts of I4B supports unload, but others not. A crash at this point is
> > like expected. However it is possible in theory to split I4B into
> > separate modules, which can be loaded/unloaded, but not the core itself
> > currently.
> 
> So it seems a little bit safer to load i4b - or any other DRIVER_MODULE
> - via loader.conf, because the re-probe must not be done.

Right.

> 
> > I believe the SPPP functionality has not been tested for a while.
> 
> In the meantime I found the reason for my troubles with i4b + sppp on
> incoming calls:
> 
> There was a commit for if_spppsubr.c (Revision 1.222) with the text:
> Use monotonic time_uptime instead of 'time_second' as timebase for
> timeouts. After changing in i4b_global.h from
>      #define SECOND                time_second
> to   #define SECOND                time_uptime
> the problem was gone.

I4B also uses SECOND for other purpose. I think your change is OK and have 
committed it.

> 
> One bagatelle is left: On every incoming call I see in /var/log/messages
> kernel: i4b-L3 dss1_decode_q931_cs0_ie_cd: IEI_BEARERCAP - Unsupported
>         B-Sub-Protocol 0x00
> kernel: i4b: unit 0, assigned TEI = 253 = 0xfd (example),

This warning can be ignored. I4B looks for a Voice type byte which is not 
there and the safety wrapper returns zero. Try this patch:

Modified:
   trunk/i4b/src/sys/i4b/dss1/dss1_l3decoder.h
Log:
i4b: Silence warning when using HDLC.

Modified: trunk/i4b/src/sys/i4b/dss1/dss1_l3decoder.h
===================================================================
--- trunk/i4b/src/sys/i4b/dss1/dss1_l3decoder.h 
+++ trunk/i4b/src/sys/i4b/dss1/dss1_l3decoder.h 
@@ -177,8 +177,10 @@
              break;
 
            default:
-             NDBGL3(L3_P_ERR, "IEI_BEARERCAP - "
+             if (dss1_get_valid(buf,4)) {
+               NDBGL3(L3_P_ERR, "IEI_BEARERCAP - "
                     "Unsupported B-Sub-Protocol 0x%02x", temp);
+             }
              cd->channel_bsubprot = BSUBPROT_UNKNOWN;
            }
            break;


> 
> but the incoming SETUP frame is ok. Can you give me a hint how to deal
> with this ? In /etc/isdn/isdnd.rc I do not have any subaddress specific
> parameters.

Subaddress is not matched unless specified.

I'll roll out a new tarball when time permits. Until further simply checkout 
code via SVN and type "make package" in the i4b direction to get a new tarball 
for ports.

After replacing the file in /usr/ports/distfiles, you type make makesum or 
something like that to update the checksum file.

Thanks for testing!

--HPS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207191848.31049.hselasky>