# ISDN: kernel-4.8, vbox3 hebt nicht ab

## hopsi

Hallo,

ich nutze eine XEN-VM unter Gentoo als Faxserver und Anrufbeantworter. Dazu wird eine Fritz-PCI durchgereicht. Treiberseitig nutze ich fcpci mit einem Patch, der das Kompilieren unter Kernel >4.1 ermöglicht.

Kernel-config

```
CONFIG_ISDN=y

CONFIG_ISDN_I4L=y

# CONFIG_ISDN_PPP is not set

CONFIG_ISDN_AUDIO=y

CONFIG_ISDN_TTY_FAX=y

#

# ISDN feature submodules

#

CONFIG_ISDN_DIVERSION=y

#

# ISDN4Linux hardware drivers

#

#

# Passive cards

#

# CONFIG_ISDN_DRV_HISAX is not set

CONFIG_ISDN_CAPI=y

CONFIG_CAPI_TRACE=y

CONFIG_ISDN_CAPI_CAPI20=y

CONFIG_ISDN_CAPI_MIDDLEWARE=y

CONFIG_ISDN_CAPI_CAPIDRV=y

CONFIG_ISDN_CAPI_CAPIDRV_VERBOSE=y

#

# CAPI hardware drivers

#

# CONFIG_CAPI_AVM is not set

# CONFIG_CAPI_EICON is not set

# CONFIG_ISDN_DRV_GIGASET is not set

# CONFIG_HYSDN is not set

# CONFIG_MISDN is not set

# CONFIG_NVM is not set
```

Versionen:

net-dialup/isdn4k-utils-3.27

net-misc/hylafax-6.0.6

net-dialup/vbox3-0.1.9.4

Bis einschließlich Kernel 4.7.10 alles wunderbar. Mit Kernel 4.8.16 (und auch 4.9 und 4.10) habe ich das Problem, daß vbox3 den Anruf nicht mehr entgegennimmt. Log:

```
02-Jul 18:32:56 <D> Parsing day(s) "SO"...

02-Jul 18:32:56 <D> Range SO: match.

02-Jul 18:32:56 <D> Call will be answered after 1 ring(s).

02-Jul 18:32:56 <D> Reading modem answer (6s timeout)...

02-Jul 18:33:02 <D> *** Timeout [14] ***

02-Jul 18:33:02 <W> Can't read from modem [0] (timeout).

02-Jul 18:33:02 <D> Hangup modem (drop dtr 400 ms)...

02-Jul 18:33:02 <D> Flushing modem (with timeout)...
```

Korrekte Annahme bis 4.7 sieht so aus:

```
02-Jul 18:36:48 <D> Parsing day(s) "SO"...

02-Jul 18:36:48 <D> Range SO: match.

02-Jul 18:36:48 <D> Call will be answered after 1 ring(s).

02-Jul 18:36:48 <D> Reading modem answer (6s timeout)...

02-Jul 18:36:53 <D> Creating directory "/var/spool/vbox/phone"...

02-Jul 18:36:53 <D> Creating directory "/var/spool/vbox/phone/new"...

02-Jul 18:36:53 <D> Creating directory "/var/spool/vbox/phone/msg"...

02-Jul 18:36:53 <D> Creating directory "/var/spool/vbox/phone/tcl"...

02-Jul 18:36:53 <A> Answering call...

02-Jul 18:36:53 <D> Tcl variable "vbxv_savetime" set to "0".
```

Hylafax funktioniert mit 4.8 und folgenden übrigens einwandfrei.

Mir ist klar, daß vbox3 schon lange nicht mehr gepflegt wird, aber ich habe bisher keine brauchbare Alternative für mich gefunden.

Wer kann mir sagen, was sich mit Kernel 4.8 geändert hat, daß dieses Verhalten im ISDN-Bereich erklärt. Mir war nicht aufgefallen, daß 4.8 Änderungen bei ISDN enthält.

Christian

----------

## arfe

Vermutlich verwendest Du meine Patches, weil AVM für die Fritz-PCI die Treiberentwicklung komplett eingestellt hat.

Aktuell gibt es von mir diese Patches und laufen bis Kernel 4.11 und vermutlich auch für 4.12, aber ich es habe

noch nicht getestet und würde ggf. auch dazu ein Patch nachliefern.

-rw-r--r-- 1 portage portage  444 26. Jun 2015  fcpci-gcc-4.9.patch

-rw-r--r-- 1 portage portage 4358 26. Jun 2015  fcpci-kernel-2.6.34.patch

-rw-r--r-- 1 portage portage 1663 26. Jun 2015  fcpci-kernel-2.6.39-amd64.patch

-rw-r--r-- 1 portage portage  850 26. Jun 2015  fcpci-kernel-2.6.39.patch

-rw-r--r-- 1 portage portage  781 26. Jun 2015  fcpci-kernel-3.10.0.patch

-rw-r--r-- 1 portage portage  336 26. Jun 2015  fcpci-kernel-3.2.0.patch

-rw-r--r-- 1 portage portage  342 26. Jun 2015  fcpci-kernel-3.4.0.patch

-rw-r--r-- 1 portage portage 1838 26. Jun 2015  fcpci-kernel-3.8.0.patch

-rw-r--r-- 1 portage portage  315  3. Jul 2015  fcpci-kernel-4.1.0.patch

-rw-r--r-- 1 portage portage  519 13. Dez 2016  fcpci-kernel-4.9.0.patch

-rw-r--r-- 1 portage portage  903  3. Jul 2015  fcpci-kernel-warnings.patch

----------

## hopsi

Die Patches sehen bei mir so ähnlich aus.

4.1.0 und 4.9.0 haben bei mir eine andere Länge, dürften aber ähnlich aussehen.

```
nodi ~ # cat /usr/local/portage/local/net-dialup/fcpci/files/fcpci-kernel-4.1.0.patch

diff -urN s01/src/driver.c s02/src/driver.c

--- s01/src/driver.c    2014-01-14 21:25:32.000000000 +0100

+++ s02/src/driver.c    2015-10-03 23:16:55.717706993 +0200

@@ -91,6 +91,14 @@

 # error You must define a card identifier...

 #endif

+/* deprecated IRQF_DISABLED is a NOOP for a long time.

+ * The flag was removed entirely with kernel 4.1.

+ */

+#ifndef IRQF_DISABLED

+# define IRQF_DISABLED 0x0

+#endif

+

+

 /*---------------------------------------------------------------------------*\

 \*---------------------------------------------------------------------------*/

 card_t *                       capi_card               = NULL;
```

```
nodi ~ # cat /usr/local/portage/local/net-dialup/fcpci/files/fcpci-kernel-4.9.0.patch

--- fritz/src/driver.c~ 2017-05-24 12:10:41.000000000 +0200

+++ fritz/src/driver.c  2017-05-24 12:36:10.303778208 +0200

@@ -24,5 +24,4 @@

 #include <asm/irq.h>

 #include <asm/atomic.h>

-#include <asm/switch_to.h>

 #include <linux/version.h>

 #include <linux/ioport.h>

@@ -53,4 +52,5 @@

 #include <linux/proc_fs.h>

 #include <linux/seq_file.h>

+#include <asm/switch_to.h>

 /*---------------------------------------------------------------------------*\
```

fcpci-kernel-warnings.patch habe ich nicht. Der Name klingt aber nicht kriegsentscheidend.

patch 4.9.0 ist auch gar nicht aktiv, ich habe die Probleme ja bereits ab 4.8 (auch 4.9 und 4.10). Kernel 4.7 läuft problemlos.

Wie geschrieben, läuft vbox3 ab Kernel 4.8 in einen timeout und nimmt den Anruf nicht an.

Christian

----------

## arfe

Du scheinst nur einen Teil von meinen Patches bei Dir zu verwenden.

Für 4.9.0 muss er so aussehen und nicht wie bei Dir:

```
--- fritz/src/driver.c_orig     2016-12-13 21:57:40.774608946 +0100

+++ fritz/src/driver.c  2016-12-13 22:06:53.213669425 +0100

@@ -20,13 +20,13 @@

  * Contact: AVM GmbH, Alt-Moabit 95, 10559 Berlin, Germany, email: info@avm.de

  */

 

+#include <linux/sched.h>

 #include <asm/io.h>

 #include <asm/irq.h>

 #include <asm/atomic.h>

 #include <asm/switch_to.h>

 #include <linux/version.h>

 #include <linux/ioport.h>

-#include <linux/sched.h>

 #include <linux/interrupt.h>

 #include <linux/export.h>

 #include <linux/spinlock.h>
```

4.9.0 unterdrückt nicht nur die Warnings:

```
--- fritz/src/driver.c  2015-07-03 22:07:29.722401231 +0200

+++ fritz/src/driver.c.old      2015-07-03 22:08:59.024406871 +0200

@@ -362,7 +362,6 @@

                return FALSE;

        }

 #endif

-       card->data = (unsigned) &irq_handler;

        tasklet_init (&scheduler_tasklet, scheduler, 0);

        disable_scheduler ();

        result = request_irq (

--- fritz/src/driver.h  2015-07-03 22:07:29.361401208 +0200

+++ fritz/src/driver.h.old      2015-07-03 22:08:51.454406393 +0200

@@ -40,7 +40,6 @@

        unsigned                                                base;

        unsigned                                                irq;

        unsigned                                                info;

-       unsigned                                                data;

        char *                                                  version;

        char *                                                  string[8];

        unsigned                                                count;

--- fritz/src/lib.c     2006-01-05 00:00:00.000000000 +0100

+++ fritz/src/lib.c.old 2015-07-03 22:09:15.622407919 +0200

@@ -40,7 +40,7 @@

 #include "devif.h"

 #endif

 

-#define        PRINTF_BUFFER_SIZE      1024

+#define        PRINTF_BUFFER_SIZE      992

 #define        TEN_MSECS               (HZ/100)

 #define JIFF2MSEC              (1000/HZ)

```

CAPI/ISDN funktioniert bei > 4.11 immer noch einwandfrei:

[    3.772262] ISDN subsystem Rev: 1.1.2.3/-21" ready.

[    3.740212] CAPI 2.0 started up with major 68 (middleware)

[    3.773660] capidrv-1: now up (2 B channels)

[    3.773663] capidrv-1: D2 trace enabled

capiinfo

Number of Controllers : 1

Controller 1:

Manufacturer: AVM GmbH

CAPI Version: 2.0

Manufacturer Version: 3.11-07  (49.23)

Serial Number: 1000001

BChannels: 2

Global Options: 0x00000039

   internal controller supported

   DTMF supported

   Supplementary Services supported

   channel allocation supported (leased lines)

B1 protocols support: 0x4000011f

   64 kbit/s with HDLC framing

   64 kbit/s bit-transparent operation

   V.110 asynconous operation with start/stop byte framing

   V.110 synconous operation with HDLC framing

   T.30 modem for fax group 3

   Modem asyncronous operation with start/stop byte framing

B2 protocols support: 0x00000b1b

   ISO 7776 (X.75 SLP)

   Transparent

   LAPD with Q.921 for D channel X.25 (SAPI 16)

   T.30 for fax group 3

   ISO 7776 (X.75 SLP) with V.42bis compression

   V.120 asyncronous mode

   V.120 bit-transparent mode

B3 protocols support: 0x800000bf

   Transparent

   T.90NL, T.70NL, T.90

   ISO 8208 (X.25 DTE-DTE)

   X.25 DCE

   T.30 for fax group 3

   T.30 for fax group 3 with extensions

   Modem

  0100

  0200

  39000000

  1f010040

  1b0b0000

  bf000080

  00000000 00000000 00000000 00000000 00000000 00000000

  01000001 00020000 00000000 00000000 00000000

Supplementary services support: 0x000003ff

   Hold / Retrieve

   Terminal Portability

   ECT

   3PTY

   Call Forwarding

   Call Deflection

   MCID

   CCBS

ls -la /dev/isdn* /dev/capi*

crw-rw---- 1 root dialout 68,   0  8. Jul 20:28 /dev/capi20

crw-rw---- 1 root dialout 45,   0  8. Jul 20:28 /dev/isdn0

crw-rw---- 1 root dialout 45,   1  8. Jul 20:28 /dev/isdn1

crw-rw---- 1 root dialout 45,  10  8. Jul 20:28 /dev/isdn10

crw-rw---- 1 root dialout 45,  11  8. Jul 20:28 /dev/isdn11

crw-rw---- 1 root dialout 45,  12  8. Jul 20:28 /dev/isdn12

crw-rw---- 1 root dialout 45,  13  8. Jul 20:28 /dev/isdn13

crw-rw---- 1 root dialout 45,  14  8. Jul 20:28 /dev/isdn14

crw-rw---- 1 root dialout 45,  15  8. Jul 20:28 /dev/isdn15

crw-rw---- 1 root dialout 45,   2  8. Jul 20:28 /dev/isdn2

crw-rw---- 1 root dialout 45,   3  8. Jul 20:28 /dev/isdn3

crw-rw---- 1 root dialout 45,   4  8. Jul 20:28 /dev/isdn4

crw-rw---- 1 root dialout 45,   5  8. Jul 20:28 /dev/isdn5

crw-rw---- 1 root dialout 45,   6  8. Jul 20:28 /dev/isdn6

crw-rw---- 1 root dialout 45,   7  8. Jul 20:28 /dev/isdn7

crw-rw---- 1 root dialout 45,   8  8. Jul 20:28 /dev/isdn8

crw-rw---- 1 root dialout 45,   9  8. Jul 20:28 /dev/isdn9

lrwxrwxrwx 1 root root          9  8. Jul 20:28 /dev/isdnctrl -> isdnctrl0

crw-rw---- 1 root dialout 45,  64  8. Jul 20:28 /dev/isdnctrl0

crw-rw---- 1 root dialout 45,  65  8. Jul 20:28 /dev/isdnctrl1

crw-rw---- 1 root dialout 45,  74  8. Jul 20:28 /dev/isdnctrl10

crw-rw---- 1 root dialout 45,  75  8. Jul 20:28 /dev/isdnctrl11

crw-rw---- 1 root dialout 45,  76  8. Jul 20:28 /dev/isdnctrl12

crw-rw---- 1 root dialout 45,  77  8. Jul 20:28 /dev/isdnctrl13

crw-rw---- 1 root dialout 45,  78  8. Jul 20:28 /dev/isdnctrl14

crw-rw---- 1 root dialout 45,  79  8. Jul 20:28 /dev/isdnctrl15

crw-rw---- 1 root dialout 45,  66  8. Jul 20:28 /dev/isdnctrl2

crw-rw---- 1 root dialout 45,  67  8. Jul 20:28 /dev/isdnctrl3

crw-rw---- 1 root dialout 45,  68  8. Jul 20:28 /dev/isdnctrl4

crw-rw---- 1 root dialout 45,  69  8. Jul 20:28 /dev/isdnctrl5

crw-rw---- 1 root dialout 45,  70  8. Jul 20:28 /dev/isdnctrl6

crw-rw---- 1 root dialout 45,  71  8. Jul 20:28 /dev/isdnctrl7

crw-rw---- 1 root dialout 45,  72  8. Jul 20:28 /dev/isdnctrl8

crw-rw---- 1 root dialout 45,  73  8. Jul 20:28 /dev/isdnctrl9

cr--r--r-- 1 root root    45, 255  8. Jul 20:28 /dev/isdninfo

----------

## hopsi

Die capiinfo sieht bei mir genau so aus.

```
dmesg unter 4.7.10:

nodi ~ # dmesg |egrep -i "isdn|capi"

[    1.298412] ISDN subsystem Rev: 1.1.2.3/1.1.2.2/none/1.1.2.2/1.1.2.2

[    1.298970] CAPI 2.0 started up with major 68 (middleware)

[    3.439912] fcpci: -- 64 bit CAPI driver --

[    3.668109] kcapi: controller [001]: fcpci-e000-75 attached

[    3.668110] kcapi: controller [001] "fcpci-e000-75" ready.

[    3.668129] capidrv: controller 1 up

[    3.668136] capidrv-1: now up (2 B channels)

[    3.668137] capidrv-1: D2 trace enabled

[    7.195636] isdn: Verbose-Level is 2

dmesg unter 4.10.17: 

nodi ~ # dmesg |egrep -i "isdn|capi"

[    1.811838] ISDN subsystem Rev: 1.1.2.3/

[    1.813799] CAPI 2.0 started up with major 68 (middleware)

[    2.661262] fcpci: -- 64 bit CAPI driver --

[    2.892135] kcapi: controller [001]: fcpci-e000-75 attached

[    2.892135] kcapi: controller [001] "fcpci-e000-75" ready.

[    2.892219] capidrv: controller 1 up

[    2.892226] capidrv-1: now up (2 B channels)

[    2.892227] capidrv-1: D2 trace enabled

[    4.258205] isdn: Verbose-Level is 2

```

Zumindest ist hier mal ein Unterschied zu sehen in der ersten Zeile. Bewerten kann ich das aber irgendwie nicht. Sollte mir das weiterhelfen?

Deinen Patch habe ich eingebaut. Sind die irgendwo online zu finden?

Christian

----------

## arfe

Ein Teil meiner Patches liegt hier: http://data.gpo.zugaina.org/dfreise/net-dialup/fcpci/

Dennis pflegt allerdings meine Patches nicht mehr ein, weil er vermutlich keine ISDN-Karte mehr hat.

Solltest Du eine alternative zu vbox suchen, dann nimm capisuite-0.5 aus dem o.g. GITHUB.

Den hatte ich auch damals entsprechend Patches geliefert.

----------

## hopsi

capisuite schaue ich mir mal an. vbox ist ein totes Pferd, fürchte ich.

Kernel 4.7 und 4.8 habe ich mal im ISDN-Zweig verglichen. Da ist nichts von Belang verändert. Von daher muß es irgendwo anders liegen. Und damit wird's schwierig...

Danke für die Hilfe soweit,

Christian

----------

## hopsi

So, capisuite läuft einwandfrei, derzeit mit Kernel 4.10.

Gegenüber vbox3 haben mir ein paar Einstellungsmöglichkeiten gefehlt, die konnte ich aber nachrüsten, so daß ich meine Scripte nur geringfügig anpassen muß.

Nachgerüstet habe ich:

ab_killswitch: wenn Datei vorhanden, dann geht der AB nicht ran

ab_answerall: wenn Datei vorhanden, dann geht der AB immer ran (jeweils unabhängig von den definierten Zeitfenstern)

Zeitfenster: nach Wochentagen konfigurierbar, wann der AB rangehen soll.

In der answering_machine.conf wird das dann in der user-section z.B. so konfiguriert:

```
# ab_killswitch: touch file to disable answeringmachine

ab_killswitch="/etc/capisuite/capisuite.off"

# ab_answerall: touch file to answer all calls on voice_number

ab_answerall="/etc/capisuite/capisuite.answerall"

# define times to answer calls on voice_numer

# format: german weekdays mo,di,mi,do,fr,sa,so for monday to sunday

# multiple time-intervals possible

# example: mo="19:00-23:59,00:00-07:39"

# example: so="00:00-23:59"

mo="19:00-23:59,00:00-07:39"

di="19:00-23:59,00:00-07:39"

mi="19:00-23:59,00:00-07:39"

do="19:00-23:59,00:00-07:39"

fr="19:00-23:59,00:00-07:39"

sa="13:30-23:59,00:00-07:39"

so="00:00-23:59"

```

```
files # cat capisuite-add-some-functions.patch

--- scripts/incoming.py.bak     2017-07-13 18:36:02.257048787 +0200

+++ scripts/incoming.py 2017-07-17 09:14:18.780853365 +0200

@@ -14,5 +14,5 @@

 # general imports

-import time, os

+import datetime, time, os

 # CapiSuite imports

@@ -51,4 +51,7 @@

         return

+    now = datetime.date.today()

+    wd = ("mo", "di", "mi", "do", "fr", "sa", "so")[now.weekday()]

+

     for user in config.listUsers():

         # accept a voice call on 'voice_numbers'

@@ -56,4 +59,33 @@

             numbers = config.getList(user, 'voice_numbers')

             if numbers == ["*"] or call.to_nr in numbers:

+                if config.has_option(user, 'ab_killswitch'):

+                    ab_killswitch = config.getUser(user, 'ab_killswitch')

+                    if os.path.isfile(ab_killswitch):

+                        call.log("call from %s to %s ignoring due to off-file" % (call.from_nr, call.to_nr), 1)

+                        call.reject(1)

+                        return

+                if config.has_option(user, 'ab_answerall'):

+                    ab_answerall = config.getUser(user, 'ab_answerall')

+                    if os.path.isfile(ab_answerall):

+                        call.log("answering call from %s to %s due to answerall-file" % (call.from_nr, call.to_nr), 1)

+                        #in_zeitfenster = 1

+                        break

+                if config.has_option(user, wd):

+                    in_zeitfenster = 0

+                    ABactive = config.getList(user, wd)

+                    for ABarray in ABactive:

+                        ABhours = ABarray.split('-')

+                        now = time.strftime("%H:%M")

+                        call.log("AB active on %s: from %s till %s. Now: %s" % (wd, ABhours[0], ABhours[1], now), 1)

+                        if ABhours[0] < now < ABhours[1]:

+                            call.log("%s in timeframe %s, %s - %s" % (now, wd, ABhours[0], ABhours[1]),1)

+                            in_zeitfenster = 1

+                            break

+                        else:

+                            call.log("%s is not in timeframe %s, %s - %s" % (now, wd, ABhours[0], ABhours[1]), 1)

+                    if in_zeitfenster == 0:

+                        call.log("Voice call outside timeframe for %s, do not answer" % wd, 1)

+                        call.reject(1)

+                        return

                 if service in (core.SERVICE_VOICE, ):

                     break
```

Ich muß dazusagen, daß ich bisher noch nie python-code geschrieben habe. Sofern das also programmiertechnisch alles Käse ist, bitte gerne verbessern.

Aber vielleicht kann das ja jemand brauchen.

Christian

----------

## hopsi

@arfe: hast Du Patches für fcpci und kernel 4.12 bzw. 4.14?

Für 4.12 nutze ich das hier, vielleicht hast Du eine andere Alternative:

```
nodi /usr/src/linux # cat /usr/local/portage/local/net-dialup/fcpci/files/fcpci-kernel-4.12.patch

--- fritz/src/main.c~   2017-12-10 22:04:14.000000000 +0100

+++ fritz/src/main.c    2017-12-10 22:10:09.165818630 +0100

@@ -30,4 +30,5 @@

  */

+#include <linux/cache.h>

 #include <stdarg.h>

 #include <asm/uaccess.h>

nodi /usr/src/linux #
```

Nur mit 4.14 bin ich mit meinem Latein am Ende.

Christian

----------

## arfe

Hi,

ich habe wegen mehrfachen Anfragen ein github angelegt:

https://github.com/afeldmueller/fcpci

Die fcpci Module laufen auf den aktuellen Kernel 4.14.13 und auch 4.15.

Soweit es noch ISDN geben wird, werde ich das weiter pflegen.

Viel Spaß!Last edited by arfe on Thu Jan 11, 2018 7:56 pm; edited 1 time in total

----------

## ChrisJumper

Hopsi es gibt noch einen kernel 3.x mit Langzeit Support. Bzw der Langzeit Support ist bald für die nächsten 10 weiteren Jahre bei einem 4.x Linux. Schau mal welche Versionsreihe den Langzeit Support betrifft und verwende den.

Da muss es auch welche mit KAISER Patch geben gegen Meltdown und Spectre. Per Suchmaschiene solltest du die Versionen finden und das ist vllt einfacher.

Mit dem aktuellen Langzeit Support hast du 10 Jahre ruhen und die AVM Dinger funktioniere da noch. Da ist es vllt. Einfacher den vorerst zu verwenden Statt 4.14...

----------

## hopsi

Danke Euch beiden!

Christian

----------

