Hi Daniel,
Issue is fixed. Thank you for your help.
I used to have this:
# cat /sys/class/net/usb0/uevent
INTERFACE=usb0
IFINDEX=7
I changed my driver in the kernel to probe it as a wwan info device based on vid and pid .
Now I have the DEVTYPE correct:
# cat /sys/class/net/wwan0/uevent
DEVTYPE=wwan
INTERFACE=wwan0
IFINDEX=7
Below my kernel patch in case of anyone having the same issue.
PS: I'm using a Cinterion PLS8 modem.
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
index b1897c7..b1c29c2 100644
--- a/drivers/net/usb/cdc_ether.c
+++ b/drivers/net/usb/cdc_ether.c
@@ -480,7 +480,7 @@ static const struct driver_info wwan_info = {
#define ZTE_VENDOR_ID 0x19D2
#define DELL_VENDOR_ID 0x413C
#define REALTEK_VENDOR_ID 0x0bda
-
+#define GEMALTO_VENDOR_ID 0x1e2d
static const struct usb_device_id products [] = {
/*
* BLACKLIST !!
@@ -709,6 +709,17 @@ static const struct usb_device_id products [] = {
.bInterfaceProtocol = USB_CDC_PROTO_NONE,
.driver_info = (unsigned long)&wwan_info,
}, {
+ /* Cinterion pls8 by GEMALTO */
+ .match_flags = USB_DEVICE_ID_MATCH_VENDOR
+ | USB_DEVICE_ID_MATCH_PRODUCT
+ | USB_DEVICE_ID_MATCH_INT_INFO,
+ .idVendor = GEMALTO_VENDOR_ID,
+ .idProduct = 0x0061,
+ .bInterfaceClass = USB_CLASS_COMM,
+ .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET,
+ .bInterfaceProtocol = USB_CDC_PROTO_NONE,
+ .driver_info = (unsigned long)&wwan_info,
+},{
/* Telit modules */
USB_VENDOR_AND_INTERFACE_INFO(0x1bc7, USB_CLASS_COMM,
USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
Thanks,
Bassem.
Hi Bassem,
On 02/20/2018 10:44 AM, Bassem BOUBAKER wrote:
> Hello Daniel,
>
> Exactly, my modem is creating an additional ethernet interface, and I don't know
why.
>
> Please find in the link below the full log of connman.
>
>
https://ufile.io/dmgbw
Feb 20 08:52:21 pcm kernel: cdc_acm 1-1:1.4: ttyACM2: USB ACM device
Feb 20 08:52:21 pcm kernel: cdc_acm 1-1:1.6: ttyACM3: USB ACM device
Feb 20 08:52:21 pcm kernel: cdc_acm 1-1:1.8: This device cannot do calls on its own. It is
not a modem.
Feb 20 08:52:21 pcm kernel: cdc_acm 1-1:1.8: ttyACM4: USB ACM device
Feb 20 08:52:21 pcm kernel: usbcore: registered new interface driver cdc_acm
Feb 20 08:52:21 pcm kernel: cdc_acm: USB Abstract Control Model driver for USB modems and
ISDN adapters
Feb 20 08:52:21 pcm kernel[657]: cdc_acm 1-1:1.0: ttyACM0: USB ACM device
Feb 20 08:52:21 pcm kerncdc_ether 1-1:1.10 usb0: CDC: unexpected notification 01!
el[657]: cdc_acm 1-1:1.2: ttyACM1: USB ACM device
Feb 20 08:52:21 pcm kernel[657]: cdc_acm 1-1:1.4: ttyACM2: USB ACM device
Feb 20 08:52:21 pcm kernel[657]: cdc_acm 1-1:1.6: ttyACM3: USB ACM device
Feb 20 08:52:21 pcm kernel[657]: cdc_acm 1-1:1.8: This device cannot do calls on its own.
It is not a modem.
Feb 20 08:52:21 pcm kernel[657]: cdc_acm 1-1:1.8: ttyACM4: USB ACM device
Feb 20 08:52:21 pcm kernel[657]: usbcore: registered new interface driver cdc_acm
Feb 20 08:52:21 pcm kernel[657]: cdc_acm: USB Abstract Control Model driver for USB modems
and ISDN adapters
Feb 20 08:52:21 pcm connmand[700]: src/rtnl.c:rtnl_message() buf 0x7eeffbf8 len 1076
Feb 20 08:52:21 pcm connmand[cdc_ether 1-1:1.12 usb1: CDC: unexpected notification 01!
700]: src/rtnl.c:rtnl_message() NEWLINK len 1076 type 16 flags 0x0000 seq 0 pid 0
Feb 20 08:52:21 pcm connmand[700]: src/ipconfig.c:__connman_ipconfig_newlink() index 7
Feb 20 08:52:21 pcm connmand[700]: usb0 {create} index 7 type 1 <ETHER>
Feb 20 08:52:21 pcm connmand[700]: usb0 {update} flags 4098 <DOWN>
Feb 20 08:52:21 pcm connmand[700]: usb0 {newlink} index 7 address XX:XX:XX:XX:00:00 mtu
1500
Feb 20 08:52:21 pcm connmand[700]: usb0 {newlink} index 7 operstate 2 <DOWN>
Check if the DEVTYPE is set correctly on the modem. If it is not
wwan ConnMan wont ignore it src/rntl.c:
static void read_uevent(struct interface_data *interface)
{
[...]
found_devtype = false;
while (fgets(line, sizeof(line), f)) {
char *pos;
pos = strchr(line, '\n');
if (!pos)
continue;
pos[0] = '\0';
if (strncmp(line, "DEVTYPE=", 8) != 0)
continue;
found_devtype = true;
if (strcmp(line + 8, "wlan") == 0) {
interface->service_type = CONNMAN_SERVICE_TYPE_WIFI;
interface->device_type = CONNMAN_DEVICE_TYPE_WIFI;
} else if (strcmp(line + 8, "wwan") == 0) {
interface->service_type = CONNMAN_SERVICE_TYPE_CELLULAR;
interface->device_type = CONNMAN_DEVICE_TYPE_CELLULAR;
} else if (strcmp(line + 8, "bluetooth") == 0) {
interface->service_type = CONNMAN_SERVICE_TYPE_BLUETOOTH;
interface->device_type = CONNMAN_DEVICE_TYPE_BLUETOOTH;
} else if (strcmp(line + 8, "gadget") == 0) {
interface->service_type = CONNMAN_SERVICE_TYPE_GADGET;
interface->device_type = CONNMAN_DEVICE_TYPE_GADGET;
} else if (strcmp(line + 8, "vlan") == 0) {
interface->service_type = CONNMAN_SERVICE_TYPE_ETHERNET;
interface->device_type = CONNMAN_DEVICE_TYPE_ETHERNET;
} else if (strcmp(line + 8, "bond") == 0) {
interface->service_type = CONNMAN_SERVICE_TYPE_ETHERNET;
interface->device_type = CONNMAN_DEVICE_TYPE_ETHERNET;
} else {
interface->service_type = CONNMAN_SERVICE_TYPE_UNKNOWN;
interface->device_type = CONNMAN_DEVICE_TYPE_UNKNOWN;
}
}
[...]
}
DEVTYPE=wwan in /sys/class/net/<device>/uevent.
HTH!
Thanks,
Daniel