Call Blocker (landline) using dgcmodem?

EDIT : The modem can be enabled simply by running 'opkg install kmod-usb-acm' at the command line and then plugging it in. In my case, having installed the module, when I accessed the modem using picocom, the machine hung and on reboot had massive filesystem corruption. My advice would be to run away from this mess!

A few years ago I setup a call blocker using a USB modem connected to a really old PC running slackware linux. It was a bit of a pain to compile and install the drivers but then once /dev/ttyACM0 appeared all went well. In more recent Linux builds, the drivers are built in (presumably) and the modem 'just works' on Slackware 14.2 and Rasbian Jessie Lite.

The PC takes 28 watts at idle, whereas a BT Homehub 5A + powered USB hub takes 7 watts. For the planet and my elec bill, it's time for an upgrade!

Any clues you can give me as to how to get this modem working on openwrt would be gratefully accepted! Note that googling 'linuxant dgcmodem' will get drivers for a 2.6 kernel which don't compile on a 3.1 kernel, never mind 4.9

Alternatively, please recommend a voice modem with UK compatible caller ID that is going to work with openwrt!

Or Linux 4.14 / 4.19 for that matter!

Is the modem recognized by a current Linux distro? If so, there may be a kernel module that is available for OpenWrt. Using that system to identify the associated driver would be the first step on that path.

You should also know that OpenWrt and all-in-one routers are often poor choices for real-time audio processing, between limited resources and seldom-used support (if any) for common Linux-based OS audio subsystems. If it works on Raspbian, that would be a better path, in my opinion.

Hi Jeff, thanks for your comments, a very useful start thanks.

I installed OpenWRT a couple of weeks ago and 'uname -a' gives:
Linux MyGateway 4.9.152 #0 SMP Wed Jan 30 12:21:02 2019 mips GNU/Linux

  • isn't that kernel 4.9?

Modem recognised (and currently working) in Slackware 14.2 (kernel 4.4.14) I may have imagined it working on a Pi so forget about that for now! I could try the Pi angle if the Slackware route gets me nowhere.

"all-in-one routers are often poor choices for real-time audio "
I absolutely agree but if the modem was a pure hardware one then the worst that's going to happen is 8000 bytes per second of audio data, surely it can handle that? If that proves too much, the modem only really needs to recognise caller ID and if it's dodgy pick the phone up and put it back down again.
But you've made me start to think about the 'soft' (datapump) part of the modem. I'll need to do some testing on my existing setup and check processor load. The PC's processor is a 586 single core (VIA Samuel 2) running at 500Mhz, the Homehub has a Lantiq PSB 80910 dual core MIPS 34Kc processor also running at 500Mhz, so I'm reasonably optimistic. ( one 586 vs two mips34k cores?)
I intentionally bought a Homehub 5A for an extra bit of ooomph!

Maybe I need to start asking questions in a Slackware forum and come back here for OpenWrt specifics.

Did your old Slackware box have a DSL or voice/data/fax modem?

Or are u adding a modem?

Unless you've got a lightly loaded, multi-core CPU, that isn't "a given". Many all-in-one devices are already pushed to their limits with day-to-day routing tasks at the line rates now prevalent in many parts of the world. They just don't have the CPU power to be able to ensure smooth audio.

The other complication is that while systems like ALSA and supporting tools like Pulse Audio work well on the x86 architecture with gigabytes on memory, they aren't tailored for resource-constrained devices that may only have 64-256 MB of memory. As they aren't widely used on OpenWrt, they are likely to have more bugs or unexpected behaviors than the commonly used packages.

@ lleachii : Sorry, to be clear,
I had, still have and am currently using as my all-in-one gateway ...
a PC running Slackware 14.2 with a USB 'soft' DGC modem with Conexant CX93010 chipset.
edit: its a voice/fax/data modem

I am intent on transferring all services from that box to a new OpenWRT box.
(firewall, badhosts adblock, call blocker, 433mhz remote control, text message and email reminders, etc)

1 Like

What's your bandwidth on wan?

@ Jeff, @ dlakelan
Thanks guys for your concerns about CPU load and bandwidth.
I get 14mbps peaks or 5mbps sustained throughput when gratuitously watching HD video at the same time as browsing rich web pages and downloading email. In real life I don't do this.
A broadband speed test on my phone over wifi gets me 20mbps sustained.
I can't make sense of the Luci real time load graph as it never goes above 1.8, so I use a command line 'top' which never goes below 55% for idle time except for the broadband speed test on my phone when I can get it down to 35%. Still looking good to me.
If I do run into CPU load issues, it really is rather easy in Linux to manage process priorities and therefore the kernel modules they use.
Wan bandwidth? Surely it's irrelevant as it's higher than I can use unless I use a cable or stand next to the hub! It's 50mbps.

Much of the CPU load comes at low levels in the kernel with things like handling interrupts, processing packets, managing NAT and firewall rules. They really aren't things that can be lowered in usage. 55% is still rather high load, especially for what I believe is a single-core device. I'm running at 5% on one of my routers that I just checked, for comparison.

The reason I asked is we get lots of people on the forum complaining that their routers act flaky and can't really handle the bandwidth they have and that's just routing and firewall, if you were to try doing audio processing it'd fall over right away.

I'm skeptical that you will get a reliable solution. Maybe if someone calls while you aren't using the network it will work, but then if someone calls while you are watching Netflix everything will lock up... Or maybe not, basically just a warning.

Thanks for the warnings guys. You were right. OpenWRT can't be trusted. I'll be looking elsewhere now.

dgcmodem code was (presumably) folded into module cdc-acm as that is the module required in ubuntu, raspbian and slackware for the modem to be recognised and /dev/ttyACM0 to appear. I have had this modem working successfully (though clunky) on those operating systems on hardware using a single core 386 @500Mhz and a single core mips @1Ghz (RPI zero).
So I was somewhat surprised when I installed the module onto OpenWRT ('opkg install kmod-usb-acm') running on a dual core mips @500Mhz and accessed the modem.
No, not a SEGV or even a KP, the system just seemed to hang and actually needed power to be disconnected and re-applied. Serious corruption of the overlay filesystem followed. Nasty!
Seriously???? I've been using Unix for 25 years and Linux for 20. I've brought KPs on myself by doing stupid things to kernel modules but I've never seen this before.
Not sure what to do next as I can't trust this anymore. How did it become so broken?

A TTYACM should be exposed like a serial port. There is not a model specific modem driver involved. The voice/fax/data chipsets handle everything through the interface as a single stream of bytes to be compatible with the original systems that used an RS-232 cable. Voice is coded as 4 bit ADPCM at 8 K samples, resulting in a flow of 4000 bytes per second through the interface.

To debug this, open two SSH sessions having one being logread -f or dmesg -w to watch for errors that might occur. I usually use picocom.

What programming language is your high level call control software?

Before doing any testing on this I will need to create a test setup as I can't have my multipurpose box of tricks going down in flames! (again)

When I setup the call blocker a few years ago I wrote a prototype call control program in Bourne shell and using chat and cat to control the modem. It has worked so well I haven't yet needed to rewrite it in anything better.

I will return when I have test results.

Ummm. no it's the meager hardware put into typical consumer routers that can't handle this sort of application. the software would work fine on an x86.

A quick update of progress so far ...
On meagre hardware with the processor running at 333mhz and it having 32mb flash and 64mb ram, using OpenWrt 18.06.1 r7258-5eb055306f the modem works GREAT, no issues at all.
But on a router with the same processor running at 500mhz and having four times the flash and twice the ram but running OpenWrt 18.06.2 r7676-cddd7b4c77, it crashes and may scramble the filesystem.
It did it once and I'm not willing to try it again on a live system!

So it is starting to look like something got broken recently though I have to do more controlled testing before I can be sure. As I have a working solution for now (a second, dedicated router) I may not progress this very quickly.

Hi @gingerlee
I'm trying to connect a Conexant 93010 USB modem on a Netgear WNDR3800 router (AR71xx) running 15.05. At this time, the router can't identify the dongle, did you used specific kernel module ?

[    6.530000] usb 2-1: new full-speed USB device number 2 using ohci-platform
[    6.720000] usb 2-1: device descriptor read/64, error -62

On OpenWrt 18.06.1 r7258-5eb055306f I just did ...

opkg update
opkg install kmod-usb-acm

then plugged it in and used /dev/ttyACM0

But be warned, once I tried it with OpenWrt 18.06.2 r7676-cddd7b4c77 and it crashed horribly and corrupted an attached USB stick. I haven't yet diagnosed the problem but I suspect it may have something to do with missing propriety code in the module.

Thanks for your quick answer. kmod-usb-acm is already installed so it should work. Actually, my issue might be related to USB power. I'll try with a USB hub tonight and let you know if it crashs.

Getting off of the unsupported v15 should be a top priority. It’s kernel, wireless protocols, and third-party software have multiple, actively exploited, severe security flaws.

Just upgrade in 18.06, lsusb reports me the correct device:

root@OpenWrt:/dev# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0572:1300 Conexant Systems (Rockwell), Inc. SoftK56 Data Fax Voice CARP
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Only this log dmesg:

[  713.447424] usb 2-1: new full-speed USB device number 3 using ohci-platform

And no /dev/ttyACM0
The kmod-usb-acm is well loaded. Any idea ?