Adding RTL8153 support to rue(4) USB to Ethernet driver

Ben Woods woodsb02 at gmail.com
Wed Jun 3 15:42:30 UTC 2015


On 3 June 2015 at 23:18, Hans Petter Selasky <hps at selasky.org> wrote:
> On 06/03/15 17:01, Ben Woods wrote:
>>
>> On 3 June 2015 at 22:59, Ben Woods <woodsb02 at gmail.com> wrote:
>>>
>>> Hi everyone,
>>>
>>> I am wondering what it would take to add support for RTL8153 to the
>>> rue(4) USB to Fast Ethernet driver for Realtek.
>>>
>>> I bought one of these from NEC in Japan (their part number
>>> PC-VP-BK06), as shown here (use Google translate):
>>> http://121ware.com/product/option/cable/pc-vp-bk06/index.html
>>>
>>> Here is the diff when support was added to the Linux kernel:
>>> https://lkml.org/lkml/2013/7/7/127
>>>
>>> Regards,
>>> Ben
>>>
>>> --
>>> From: Benjamin Woods
>>> woodsb02 at gmail.com
>>
>>
>> I nearly forgot the output from my usbconfig(8):
>>
>> # usbconfig -u 1 -a 2 dump_device_desc
>> ugen1.5: <USB 101001000 LAN Realtek> at usbus1, cfg=0 md=HOST spd=HIGH
>> (480Mbps) pwr=ON (100mA)
>>
>>    bLength = 0x0012
>>    bDescriptorType = 0x0001
>>    bcdUSB = 0x0210
>>    bDeviceClass = 0x0000  <Probed by interface class>
>>    bDeviceSubClass = 0x0000
>>    bDeviceProtocol = 0x0000
>>    bMaxPacketSize0 = 0x0040
>>    idVendor = 0x0bda
>>    idProduct = 0x8153
>>    bcdDevice = 0x3000
>>    iManufacturer = 0x0001  <Realtek>
>>    iProduct = 0x0002  <USB 10/100/1000 LAN>
>>    iSerialNumber = 0x0003  <9CEBE81A1976>
>>    bNumConfigurations = 0x0002
>>
>> Regards,
>> Ben
>
>
> Hi,
>
> Can you dump the configuration descriptors?
>
> Have you tried:
>
> usbconfig -d X.Y set_config 1
>
> --HPS
>

Wow - it works after running your recommended "usbconfig -d X.Y
set_config 1"! It shows up as interface ue0, I can get an IP address
with DHCLIENT and networking works fine. Note that I am running
FreeBSD 11-current r283879.


Thank you for your help HPS! How can we make this work out of the box
in the future?


Here is the dmesg output:
kernel: ugen0.3: <Realtek> at usbus0
root: Unknown USB device: vendor 0x0bda product 0x8153 bus uhub0
kernel: cdce0: <CDC Communications Control> on usbus0
kernel: ue0: <USB Ethernet> on cdce0
kernel: ue0: Ethernet address: 9c:eb:e8:1a:19:76
root: Unknown USB device: vendor 0x0bda product 0x8153 bus uhub0
root: Unknown USB device: vendor 0x064e product 0xc801 bus uhub0
root: Unknown USB device: vendor 0x064e product 0xc801 bus uhub0



Here is a copy of the configuration descriptors BEFORE running the
above command:
ugen0.3: <USB 101001000 LAN Realtek> at usbus0, cfg=0 md=HOST
spd=SUPER (5.0Gbps) pwr=ON (36mA)


 Configuration index 0

    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x0039
    bNumInterfaces = 0x0001
    bConfigurationValue = 0x0001
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x00a0
    bMaxPower = 0x0012

    Interface 0
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0000
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0003
      bInterfaceClass = 0x00ff  <Vendor specific>
      bInterfaceSubClass = 0x00ff
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0400
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x30
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x06, 0x30, 0x03, 0x00, 0x00, 0x00


     Endpoint 1
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0002  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0400
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x30
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x06, 0x30, 0x03, 0x00, 0x00, 0x00


     Endpoint 2
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0083  <IN>
        bmAttributes = 0x0003  <INTERRUPT>
        wMaxPacketSize = 0x0002
        bInterval = 0x0008
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x30
      bDescriptorSubType = 0x00
       RAW dump:
       0x00 | 0x06, 0x30, 0x00, 0x00, 0x02, 0x00



Here is a copy of the configuration descriptors AFTER running the command:
ugen0.3: <USB 101001000 LAN Realtek> at usbus0, cfg=1 md=HOST
spd=SUPER (5.0Gbps) pwr=ON (36mA)


 Configuration index 1

    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x0062
    bNumInterfaces = 0x0002
    bConfigurationValue = 0x0002
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x00a0
    bMaxPower = 0x0012

    Interface 0
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0000
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0002  <Communication device>
      bInterfaceSubClass = 0x0006
      bInterfaceProtocol = 0x0000
      iInterface = 0x0005  <CDC Communications Control>

      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 = 0x0d
      bDescriptorType = 0x24
      bDescriptorSubType = 0x0f
       RAW dump:
       0x00 | 0x0d, 0x24, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00,
       0x08 | 0xea, 0x05, 0x00, 0x00, 0x00


     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0083  <IN>
        bmAttributes = 0x0003  <INTERRUPT>
        wMaxPacketSize = 0x0010
        bInterval = 0x0008
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x30
      bDescriptorSubType = 0x00
       RAW dump:
       0x00 | 0x06, 0x30, 0x00, 0x00, 0x08, 0x00



    Interface 1
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0000
      bInterfaceClass = 0x000a  <CDC-data>
      bInterfaceSubClass = 0x0000
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>


    Interface 1 Alt 1
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0001
      bNumEndpoints = 0x0002
      bInterfaceClass = 0x000a  <CDC-data>
      bInterfaceSubClass = 0x0000
      bInterfaceProtocol = 0x0000
      iInterface = 0x0004  <Ethernet Data>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0400
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x30
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x06, 0x30, 0x03, 0x00, 0x00, 0x00


     Endpoint 1
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0002  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0400
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x30
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x06, 0x30, 0x03, 0x00, 0x00, 0x00


Regards,
Ben


More information about the freebsd-net mailing list