D-Link DWM-157 USB Stock not recognized



  • Hey,

    i bought  an D-Link DWM-157 HSPA+ stick because it is listed here as known working stick https://doc.pfsense.org/index.php/Known_Working_3G-4G_Modems .
    Unfortunately pfsense 2.2.6 und 2.3 beta don't recognize the stick / modem.

    First because of the normal problem that the stick was mounted as CD0
    I compared the usb idProduct with working windows machine:

    Windows: 0x7d0e -> Modem Mode
    pfsense usbconfig: 0xa407 -> CD Mode

    so i run:

     camcontrol eject cd0 
    

    and usbconfig -d 1.2 dump_device_desc returns:

      bLength = 0x0012
      bDescriptorType = 0x0001
      bcdUSB = 0x0200
      bDeviceClass = 0x00ef  <miscellaneous device="">
      bDeviceSubClass = 0x0002
      bDeviceProtocol = 0x0001
      bMaxPacketSize0 = 0x0040
      idVendor = 0x2001
     idProduct = 0x7d0e
      bcdDevice = 0x0300
      iManufacturer = 0x0009  <d-link,inc >
      iProduct = 0x000a  <d-link dwm-157="">
      iSerialNumber = 0x0000  <no string="">
      bNumConfigurations = 0x0001</no></d-link></d-link,inc ></miscellaneous>
    

    looks good. Stick seems to be in right mode.
    But dmesg output simply presents now a da1 device instead of u3g modems:

    (cd0:umass-sim1:1:0:0): Periph destroyed
    ugen1.2: <d-link,inc> at usbus1
    umass1: <mass storage=""> on usbus1
    da1 at umass-sim1 bus 1 scbus7 target 0 lun 0
    da1: <hspa 6225="" usb="" scsi="" cd-rom=""> Removable Direct Access SCSI device
    da1: 40.000MB/s transfers
    da1: Attempt to query device size failed: ILLEGAL REQUEST, Invalid field in CDB
    da1: quirks=0x2</hspa></mass></d-link,inc>
    

    #camcontrol devlist

    <sata ssd="" s9fm02.2="">                at scbus0 target 0 lun 0 (ada0,pass0)
    <multiple card ="" reader="" 1.00="">       at scbus6 target 0 lun 0 (pass1,da0)
    <hspa 6225="" usb="" scsi="" cd-rom="">        at scbus7 target 0 lun 0 (da1,pass2)</hspa></multiple></sata>
    

    maybe you guys have some input for ?
    Thanks

    regards



  • Hello,

    I have the same bug.

    To correct it i have to change the old product id (0x7d02 and 0xa707 for CD-ROM) for DWM-157 in the u3g driver with the new one (0x7d0e and 0xa407 for CD-ROM)

    if you want to change it those id are at line 1631 and 1632 of usbdev file (https://svnweb.freebsd.org/base/head/sys/dev/usb/usbdevs?view=markup&pathrev=277246)

    actualy i've done it only with freebsd 10.2 as for pfsense you need to recompile all the kernel with the new version of u3g (i am doing this as i'm writting those lines)

    Good luck.

    P.S sorry for my english it's not my native language



  • If it works on stock freebsd 10.3 (version for upcomming pfSense 2.3) and/or you know how to make it work: file a bugreport on https://redmine.pfsense.org/projects/pfsense

    post all relevant info & the devs will probably take a look at it when time permits



  • I have exactly the same problem. My D-Link DWM-157 is also recognized as a CD Drive, but it has another USB ID: 2001:a407 (Europe version?)

    Can you also add this ID to the usb file?

    Edit: I just saw that Tagashy has mentioned this USB ID. I also found out how to switch the device to modem mode. Could you provide a compiled kernel for pfSense 2.2.6-RELEASE (amd64) so I can test the changes?



  • @TheNetStriker:

    I have exactly the same problem. My D-Link DWM-157 is also recognized as a CD Drive, but it has another USB ID: 2001:a407 (Europe version?)

    Can you also add this ID to the usb file?

    Edit: I just saw that Tagashy has mentioned this USB ID. I also found out how to switch the device to modem mode. Could you provide a compiled kernel for pfSense 2.2.6-RELEASE (amd64) so I can test the changes?

    @TheNetStriker … maybe you want to share the information on how to switch the DWM-157 stick to modem mode ?

    @heper ... i run pfsense 2.3 RC1 but my DWM-157 stick doesn't work.

    meanwhile i got the documents (attached) from d-link support. i can confirm that the following MessageContent is switching my stick to modem mode

    usb_modeswitch -v 2001 -p a407 -m 1 -M 555342431234567800000000000003f0010300000000000000000000000000 -R 1
    

    But it's reconized as ethernet UE0 device ? Sime ideas ?

    dwm-157_revc1_1481819.zip



  • @peoples:

    @TheNetStriker:

    I have exactly the same problem. My D-Link DWM-157 is also recognized as a CD Drive, but it has another USB ID: 2001:a407 (Europe version?)

    Can you also add this ID to the usb file?

    Edit: I just saw that Tagashy has mentioned this USB ID. I also found out how to switch the device to modem mode. Could you provide a compiled kernel for pfSense 2.2.6-RELEASE (amd64) so I can test the changes?

    @TheNetStriker … maybe you want to share the information on how to switch the DWM-157 stick to modem mode ?

    @heper ... i run pfsense 2.3 RC1 but my DWM-157 stick doesn't work.

    meanwhile i got the documents (attached) from d-link support. i can confirm that the following MessageContent is switching my stick to modem mode

    usb_modeswitch -v 2001 -p a407 -m 1 -M 555342431234567800000000000003f0010300000000000000000000000000 -R 1
    

    But it's reconized as ethernet UE0 device ? Sime ideas ?

    My device is now listed as ugen1.2. I think I used the wrong MessageContent. Any idea how I can change the device back? This command doesn't seam to work:

    usb_modeswitch -R -v 2001 -p 7d0e
    


  • @heper:

    If it works on stock freebsd 10.3 (version for upcomming pfSense 2.3) and/or you know how to make it work: file a bugreport on https://redmine.pfsense.org/projects/pfsense

    post all relevant info & the devs will probably take a look at it when time permits

    I don't think that this will be fixed with FreeBSD 10.3. I've looked at the latest usbdevs file and there is no device with id a407. So I think this should be reported to the FreeBSD project. It seams as there are multiple possible ways to report problems in FreeBSD. Which one would be correct? File a bug report on GitHUB maybe?



  • hello,

    I am trying to make a D-Link DWM-157 D1 unit work on pfSense 2.4.4 and I have the same problem, pfSense sees it as CD-ROM despite it is shown as a "Known Working 3G-4G Modem" (https://docs.netgate.com/pfsense/en/latest/cellular/known-working-3g-4g-modems.html)

    I followed the steps https://redmine.pfsense.org/issues/6226 and http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=4&t=2687 however it is insisting to be a CD-ROM instead of a modem.

    Question: is it possible to use configuration=2 option instead of MessageContent in pfSense?

    Best,

    Savas


  • Netgate Administrator

    If it has 2 (or more) usb config indexes you can force it to use a different one using a usb quirk option.

    Try running usbconfig dump_all_desc against it.

    Steve



  • Thanks Steve,

    In the attached file, you can find the usbconfig dump_all_desc output.

    How can I use the quirk option?

    Best,

    Savas
    Shell Output.zip


  • Netgate Administrator

    Ok, so that device has 3 config indexes:

    ugen4.2: <D-Link,Inc D-Link DWM-157> at usbus4, cfg=1 md=HOST spd=HIGH
    (480Mbps) pwr=ON (98mA)
    bLength = 0x0012
    bDescriptorType = 0x0001
    bcdUSB = 0x0200
    bDeviceClass = 0x0000 <Probed by interface class>
    bDeviceSubClass = 0x0000
    bDeviceProtocol = 0x0000
    bMaxPacketSize0 = 0x0040
    idVendor = 0x2001
    idProduct = 0xa407
    bcdDevice = 0x0300
    iManufacturer = 0x0002 <D-Link,Inc >
    iProduct = 0x0003 <D-Link DWM-157>
    iSerialNumber = 0x0004 <531399703502680>
    bNumConfigurations = 0x0003
    Configuration index 0
    bLength = 0x0009
    bDescriptorType = 0x0002wTotalLength = 0x0020
    bNumInterfaces = 0x0001
    bConfigurationValue = 0x0001
    iConfiguration = 0x0000 <no string>
    bmAttributes = 0x00a0
    bMaxPower = 0x00fa
    Interface 0
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0000
    bAlternateSetting = 0x0000
    bNumEndpoints = 0x0002
    bInterfaceClass = 0x0008 <Mass storage>
    bInterfaceSubClass = 0x0006
    bInterfaceProtocol = 0x0050
    iInterface = 0x0001 <Mass Storage >
    Endpoint 0
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0081 <IN>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    Endpoint 1
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0001 <OUT>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    Configuration index 1
    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x0020
    bNumInterfaces = 0x0001
    bConfigurationValue = 0x0002
    iConfiguration = 0x0000 <no string>
    bmAttributes = 0x00a0
    bMaxPower = 0x0031
    Interface 0
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0000
    bAlternateSetting = 0x0000
    bNumEndpoints = 0x0002bInterfaceClass = 0x0008 <Mass storage>
    bInterfaceSubClass = 0x0006
    bInterfaceProtocol = 0x0050
    iInterface = 0x0001 <Mass Storage >
    Endpoint 0
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0081 <IN>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    Endpoint 1
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0001 <OUT>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    Configuration index 2
    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x0020
    bNumInterfaces = 0x0001
    bConfigurationValue = 0x0003
    iConfiguration = 0x0000 <no string>
    bmAttributes = 0x00e0
    bMaxPower = 0x0000
    Interface 0
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0000
    bAlternateSetting = 0x0000
    bNumEndpoints = 0x0002
    bInterfaceClass = 0x0008 <Mass storage>
    bInterfaceSubClass = 0x0006
    bInterfaceProtocol = 0x0050
    iInterface = 0x0001 <Mass Storage >
    Endpoint 0
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0081 <IN>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000bSynchAddress = 0x0000
    Endpoint 1
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0001 <OUT>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    

    All show as mass storage devices though...

    Try setting it manually first:
    usbconfig ugen4.2 set_config 2
    Or 1.

    Though it looks like you might have the C1 variant from the usbmodeswitch forum discussion.

    Steve



  • Thanks Steve,

    when I tried usbconfig ugen4.2 set_config 2, I got the following message;

    usbconfig - configure the USB subsystem
    usage: usbconfig -u <busnum> -a <devaddr> -i <ifaceindex> [cmds...]
    usage: usbconfig -d [ugen]<busnum>.<devaddr> -i <ifaceindex> [cmds...]
    commands:
    set_config <cfg_index>
    .
    .

    then I tried the following;

    usbconfig -d ugen4.2 set_config 0
    usbconfig -d ugen4.2 set_config 1
    usbconfig -d ugen4.2 set_config 2

    however they didn't work, still shows as cd0

    Best,

    Savas



  • btw, when I was searching something useful in the USB stick, this is what I found,

    intallation config file

    DefaultVendor= 0x2001
    DefaultProduct= 0xa407

    TargetVendor= 0x2001
    TargetProduct= 0x7d0e

    MagicId=2ds2dse5w885d5d5we5d2d2d5sd4dgg4fdfd5

    AutoRun=1

    I tried to use the MagicId as MessageContent with USB_switch, however it didn't work.

    Is there a way to convert the MagicId to MessageContent?

    Best,

    Savas


  • Netgate Administrator

    Ah sorry missed the -d switch. Ok well if you have the C1version you will need to use usb_modeswitch.

    Is the message content not in it already?

    It may not help you though because neither of those IDs is known to pfSense/FreeBSD:
    https://github.com/pfsense/FreeBSD-src/blob/ff7d4801f1b88de656e028209818ff005e8a1353/sys/dev/usb/usbdevs#L1663

    Steve



  • Unfortunately there is no message content. I found this cryptic MagicId, however it didn't work.

    btw, TargetVendor and TargetProduct are there,

    731 vendor DLINK 0x2001 D-Link
    813 product ABIT AK_020 0x7d0e 3G modem

    Best,

    Savas


  • Netgate Administrator

    Mmm, but that product is from a different vendor so it will not match.

    If you manage to make this work it will be via bunch of workarounds that may fail. I recommend using a different modem if you can.

    Steve



  • Thanks Steve, I will try with a different modem.

    Best,

    Savas


  • Netgate Administrator

    If it is the C1 version it just needs to be ejected anyway:
    https://github.com/NetworkManager/usb_modeswitch-data/blob/master/usb_modeswitch.d/2001:a407

    And then it may appear as a usb Ethernet device which you can use directly. There are issues with that though.

    Steve



  • I am afraid it is D1
    20190415_135623353_iOS.jpg



  • I also tried usb_modeswitch -v 2001 -p a407 -K -W, however it didn't generate any verbose output.

    and this is what I see on the system log,

    Apr 15 18:17:57 kernel da0: quirks=0x2<NO_6_BYTE>
    Apr 15 18:17:57 kernel da0: Attempt to query device size failed: ILLEGAL REQUEST, Invalid field in CDB
    Apr 15 18:17:57 kernel da0: 40.000MB/s transfers
    Apr 15 18:17:57 kernel da0: <HSPA USB SCSI CD-ROM 6225> Removable Direct Access SCSI device
    Apr 15 18:17:57 kernel da0 at umass-sim0 bus 0 scbus2 target 0 lun 0
    Apr 15 18:17:57 kernel umass0: <Mass Storage > on usbus4
    Apr 15 18:17:57 kernel umass0 on uhub1
    Apr 15 18:17:57 kernel ugen4.2: <D-Link,Inc D-Link DWM-157> at usbus4
    Apr 15 18:17:55 kernel ugen4.2: <D-Link,Inc D-Link DWM-157> at usbus4 (disconnected)
    Apr 15 18:17:55 kernel umass0: detached
    Apr 15 18:17:55 kernel (cd0:umass-sim0:0:0:0): Periph destroyed
    Apr 15 18:17:55 kernel cd0: <HSPA USB SCSI CD-ROM 6225> s/n 531399703502680 detached
    Apr 15 18:17:55 kernel cd0 at umass-sim0 bus 0 scbus2 target 0 lun 0
    Apr 15 18:17:55 kernel umass0: at uhub1, port 1, addr 2 (disconnected)
    Apr 15 18:17:36 kernel cd0: quirks=0x10<10_BYTE_ONLY>
    Apr 15 18:17:36 kernel cd0: 14MB (28672 512 byte sectors)
    Apr 15 18:17:36 kernel cd0: 40.000MB/s transfers
    Apr 15 18:17:36 kernel cd0: Serial Number 531399703502680
    Apr 15 18:17:36 kernel cd0: <HSPA USB SCSI CD-ROM 6225> Removable CD-ROM SCSI device
    Apr 15 18:17:36 kernel cd0 at umass-sim0 bus 0 scbus2 target 0 lun 0
    Apr 15 18:17:36 kernel umass0: <Mass Storage > on usbus4
    Apr 15 18:17:36 kernel umass0 on uhub1
    Apr 15 18:17:36 kernel ugen4.2: <D-Link,Inc D-Link DWM-157> at usbus4

    basically when I run usb_modeswitch -v 2001 -p a407 -K -W, it ejects cd0 and turns into da0, not modem.

    Best,

    Savas


  • Netgate Administrator

    Mmm, it sure looks like a C1 version in many ways. You see anything else in the system log after you do that?

    Try running usbconfig dump_all_desc against it after you have ejected it to change it's mode like LOM suggested.

    Steve



  • I cannot post the logs, I am getting SPAM message

    "Post content was flagged as spam by Akismet.com"



  • so these are the interfaces after the camcontrol eject cd0 command.

    MI_00 D-Link Mobile Broadband Device (Network Adapter) (cdc_mbim)
    MI_02 D-Link HSPA+DataCard Diagnostics Interface (also ppp dialup modem)
    MI_03 D-Link HSPA+DataCard NMEA Device
    MI_04 D-Link HSPA+DataCard Speech Port
    MI_05 D-Link HSPA+DataCard Debug Port
    MI_06 USB Mass Storage Device

    So I understand as follows,

    Since the drivers are not available in pfSense/BSD for the interfaces from 0 to 5, when I do camcontrol eject cd0, it uses the 6th interface (USB Mass Storage Device)

    Thoughts?

    Best,

    Savas


  • Netgate Administrator

    Yes, only interfaces 2 and 3 would otherwise be available if u3g attached to them.

    The usbconfig output should show those interfaces though even if no driver does attach.

    I have upvoted some of your posts which should stop akismet triggering but it does seem have a mind of it's own. We have almost no control over it.

    Steve



  • ugen4.2: <D-Link,Inc D-Link DWM-157> at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)
    
    bLength = 0x0012
    bDescriptorType = 0x0001
    bcdUSB = 0x0200
    bDeviceClass = 0x00ef <Miscellaneous device>
    bDeviceSubClass = 0x0002
    bDeviceProtocol = 0x0001
    bMaxPacketSize0 = 0x0040
    idVendor = 0x2001
    idProduct = 0x7d0e
    bcdDevice = 0x0300
    iManufacturer = 0x0009 <D-Link,Inc >
    iProduct = 0x000a <D-Link DWM-157>
    iSerialNumber = 0x0000 <no string>
    bNumConfigurations = 0x0001
    
    Configuration index 0
    
    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x00e4
    bNumInterfaces = 0x0007
    bConfigurationValue = 0x0001
    iConfiguration = 0x0000 <no string>
    bmAttributes = 0x00a0
    bMaxPower = 0x00fa
    
    Additional Descriptor
    
    bLength = 0x08
    bDescriptorType = 0x0b
    bDescriptorSubType = 0x00
    RAW dump:
    0x00 | 0x08, 0x0b, 0x00, 0x02, 0x02, 0x0e, 0x00, 0x01
    
    
    Interface 0
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0000
    bAlternateSetting = 0x0000
    bNumEndpoints = 0x0001
    bInterfaceClass = 0x0002 <Communication device>
    bInterfaceSubClass = 0x000e
    bInterfaceProtocol = 0x0000
    iInterface = 0x0001 <COM(comm_if)>
    
    Additional Descriptor
    
    bLength = 0x05
    bDescriptorType = 0x24
    bDescriptorSubType = 0x00
    RAW dump:
    0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
    
    
    Additional Descriptor
    
    bLength = 0x05
    bDescriptorType = 0x24
    bDescriptorSubType = 0x06
    RAW dump:
    0x00 | 0x05, 0x24, 0x06, 0x00, 0x01
    
    
    Additional Descriptor
    
    bLength = 0x0c
    bDescriptorType = 0x24
    bDescriptorSubType = 0x1b
    RAW dump:
    0x00 | 0x0c, 0x24, 0x1b, 0x00, 0x01, 0x00, 0x02, 0x10,
    0x08 | 0x40, 0xdc, 0x05, 0x20
    
    
    Endpoint 0
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0088 <IN>
    bmAttributes = 0x0003 <INTERRUPT>
    wMaxPacketSize = 0x0040
    bInterval = 0x0001
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    
    Interface 1
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0001
    bAlternateSetting = 0x0000
    bNumEndpoints = 0x0000
    bInterfaceClass = 0x000a <CDC-data>
    bInterfaceSubClass = 0x0000
    bInterfaceProtocol = 0x0002
    iInterface = 0x0002 <COM(data_if)>
    
    
    Interface 1 Alt 1
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0001
    bAlternateSetting = 0x0001
    bNumEndpoints = 0x0002
    bInterfaceClass = 0x000a <CDC-data>
    bInterfaceSubClass = 0x0000
    bInterfaceProtocol = 0x0002
    iInterface = 0x0000 <no string>
    
    Endpoint 0
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0081 <IN>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    Endpoint 1
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0001 <OUT>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    
    Interface 2
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0002
    bAlternateSetting = 0x0000
    bNumEndpoints = 0x0003
    bInterfaceClass = 0x00ff <Vendor specific>
    bInterfaceSubClass = 0x0002
    bInterfaceProtocol = 0x0001
    iInterface = 0x0003 <COM(comm_if)>
    
    Additional Descriptor
    
    bLength = 0x05
    bDescriptorType = 0x24
    bDescriptorSubType = 0x00
    RAW dump:
    0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
    
    
    Additional Descriptor
    
    bLength = 0x04
    bDescriptorType = 0x24
    bDescriptorSubType = 0x02
    RAW dump:
    0x00 | 0x04, 0x24, 0x02, 0x0f
    
    
    Additional Descriptor
    
    bLength = 0x05
    bDescriptorType = 0x24
    bDescriptorSubType = 0x06
    RAW dump:
    0x00 | 0x05, 0x24, 0x06, 0x02, 0x03
    
    
    Additional Descriptor
    
    bLength = 0x05
    bDescriptorType = 0x24
    bDescriptorSubType = 0x01
    RAW dump:
    0x00 | 0x05, 0x24, 0x01, 0x03, 0x03
    
    
    Endpoint 0
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0087 <IN>
    bmAttributes = 0x0003 <INTERRUPT>
    wMaxPacketSize = 0x0040
    bInterval = 0x0003
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    Endpoint 1
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0082 <IN>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    Endpoint 2
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0002 <OUT>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    
    Interface 3
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0003
    bAlternateSetting = 0x0000
    bNumEndpoints = 0x0002
    bInterfaceClass = 0x00ff <Vendor specific>
    bInterfaceSubClass = 0x0000
    bInterfaceProtocol = 0x0000
    iInterface = 0x0005 <COM(data_if)>
    
    Endpoint 0
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0083 <IN>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    Endpoint 1
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0003 <OUT>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    
    Interface 4
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0004
    bAlternateSetting = 0x0000
    bNumEndpoints = 0x0002
    bInterfaceClass = 0x00ff <Vendor specific>
    bInterfaceSubClass = 0x0000
    bInterfaceProtocol = 0x0000
    iInterface = 0x0006 <COM(data_if)>
    
    Endpoint 0
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0084 <IN>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    Endpoint 1
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0004 <OUT>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    
    Interface 5
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0005
    bAlternateSetting = 0x0000
    bNumEndpoints = 0x0002
    bInterfaceClass = 0x00ff <Vendor specific>
    bInterfaceSubClass = 0x0000
    bInterfaceProtocol = 0x0000
    iInterface = 0x0007 <COM(data_if)>
    
    Endpoint 0
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0085 <IN>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    Endpoint 1
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0005 <OUT>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    
    Interface 6
    bLength = 0x0009
    bDescriptorType = 0x0004
    bInterfaceNumber = 0x0006
    bAlternateSetting = 0x0000
    bNumEndpoints = 0x0002
    bInterfaceClass = 0x0008 <Mass storage>
    bInterfaceSubClass = 0x0006
    bInterfaceProtocol = 0x0050
    iInterface = 0x0008 <Mass Storage >
    
    Endpoint 0
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0086 <IN>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    
    Endpoint 1
    bLength = 0x0007
    bDescriptorType = 0x0005
    bEndpointAddress = 0x0006 <OUT>
    bmAttributes = 0x0002 <BULK>
    wMaxPacketSize = 0x0200
    bInterval = 0x0000
    bRefresh = 0x0000
    bSynchAddress = 0x0000
    


  • @stephenw10 said in D-Link DWM-157 USB Stock not recognized:

    Yes, only interfaces 2 and 3 would otherwise be available if u3g attached to them.

    The usbconfig output should show those interfaces though even if no driver does attach.

    I have upvoted some of your posts which should stop akismet triggering but it does seem have a mind of it's own. We have almost no control over it.

    Steve

    it worked now, I just posted the log


  • Netgate Administrator

    Yep, it really looks like that is a C1 device mislabelled. But that is still not recognised by u3g even is the most recent FreeBSD. https://github.com/freebsd/freebsd/blob/master/sys/dev/usb/usbdevs

    It's probably relatively easy to add it. The serial interfaces are there they just need to be attached but that's not something I can do. To add new devices requires rebuilding the kernel and hence it's only really practical to do in FreeBSD rather then in pfSense. Those changes usually happen there first and are brought into pfSense though it does happen the other way on occasion.

    It's still easier to use a different modem.

    Steve



  • Thanks Steve, how can I ask FreeBSD community to add this device? For some reason, this is/used to be a popular device in the region I live (middle east) and it would be nice to add it for the future users. Meanwhile I will try with a Huawei E173.


  • Netgate Administrator

    There are examples of people having done it for other devices. I would start by looking on the FreeBSD forums for other threads. And then opening your own thread if it's not obvious.
    Ultimately you would be looking to make a patch against udbdevs and u3g and then issue a pull request for it.

    It would be much easier to test if u3g was a loadable kernel module but I don't think that s possible.

    Steve



  • I found this, https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=196362

    I will post shortly with the experience we had here.



  • @chedxb said in D-Link DWM-157 USB Stock not recognized:

    I found this, https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=196362

    I will post shortly with the experience we had here.

    As explained here, I tried
    usb_modeswitch -v 2001 -p a407 -m 1 -M 555342431234567800000000000003f0010300000000000000000000000000 -R 1

    and I got this,

    Apr 16 16:51:21 kernel da0: quirks=0x2<NO_6_BYTE>
    Apr 16 16:51:21 kernel da0: Attempt to query device size failed: ILLEGAL REQUEST, Invalid field in CDB
    Apr 16 16:51:21 kernel da0: 40.000MB/s transfers
    Apr 16 16:51:21 kernel da0: <HSPA USB SCSI CD-ROM 6225> Removable Direct Access SCSI device
    Apr 16 16:51:21 kernel da0 at umass-sim0 bus 0 scbus2 target 0 lun 0
    Apr 16 16:51:21 kernel umass0: <Mass Storage > on usbus4
    Apr 16 16:51:21 kernel umass0 on uhub1
    Apr 16 16:51:21 kernel ue0: Ethernet address: 02:00:ff:aa:aa:aa
    Apr 16 16:51:21 kernel ue0: <USB Ethernet> on cdce0

    Apr 16 16:51:21 kernel cdce0: <COMcommif> on usbus4
    Apr 16 16:51:21 kernel cdce0 on uhub1
    Apr 16 16:51:21 kernel ugen4.2: <D-Link,Inc D-Link DWM-157> at usbus4
    Apr 16 16:51:19 kernel ugen4.2: <D-Link,Inc D-Link DWM-157> at usbus4 (disconnected)
    Apr 16 16:51:19 kernel umass0: detached
    Apr 16 16:51:19 kernel (cd0:umass-sim0:0:0:0): Periph destroyed
    Apr 16 16:51:19 kernel cd0: <HSPA USB SCSI CD-ROM 6225> s/n 531399703502680 detached
    Apr 16 16:51:19 kernel cd0 at umass-sim0 bus 0 scbus2 target 0 lun 0
    Apr 16 16:51:19 kernel umass0: at uhub1, port 1, addr 2 (disconnected)

    I see it under Available network ports: as well. I will test in the evening if it works or not.


  • Netgate Administrator

    Ah, OK that's mostly all done then. Nice!

    So yeah you can see that's a two line change to two files. Should be easy enough to replicate for the new ID.

    Can you try this against your modem?
    https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=196362#c9

    Does it then show up as ue0 as shown there?

    Steve


  • Netgate Administrator

    Ah cross posted I see you did! Yeah see what happens when you assign it.

    FreeBSD/pfSense handles serial port modems much better but the speed is limited there.

    It would be interesting to see hoe usbconfig sees the modem when it's in Ethernet mode like that.

    Steve



  • I assigned as a new interface and then added usb_modeswitch -v 2001 -p a407 -m 1 -M 555342431234567800000000000003f0010300000000000000000000000000 -R 1 on
    Shellcmd Configuration as earlyshellcmd and rebooted. So far so good :) I just need a SIM card to test the data connection.


  • Netgate Administrator

    The big problem with USB Ethernet type devices is that pfSense does not have any way to handle them disconnecting. If you reboot and unplug the modem pfSense will stop booting at the interfaces assign screen at the console because ue0 is no9 longer present on the system but is assigned in the config. There are workarounds but they are all hacky....

    What speeds do you expect to get from that device?

    Steve



  • I am planning to use it as a backup connection. I will cap download 5Mbps and upload 1Mbps with Traffic Shaper.

    Is it possible to put a timer for the interfaces? Say, if ue0 is not present for 10s, then continue booting without it.


  • Netgate Administrator

    Well you can script whatever you want but the further you move away from the default install the harder things will be or you at upgrade for example.

    You can easily get those speeds over a serial interface though so I would still with that if you can.

    Steve



  • Thanks Steve, do you recommend any particular serial interface modem?


  • Netgate Administrator

    I personally have a Sierra em7305. It's an internal m.2 card but usb connected. That provides serial ports. I get 20-30Mbps over it. The newer em7455 also works fine.

    Hard to recommend anything I don't actually use myself.

    Other than that external Ethernet connected modems are generally much easier to deal with like the Netgear lb1120.

    Steve


Log in to reply