Re: Clarification regarding USB Data Card (3G Dongle) enumeration in Linux udev

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, May 8, 2014 at 9:08 PM, Dan Williams <dcbw@xxxxxxxxxx> wrote:
> On Wed, 2014-05-07 at 15:30 +0530, Suresh Kumar N. wrote:
>> On Tue, May 6, 2014 at 9:42 PM, Dan Williams <dcbw@xxxxxxxxxx> wrote:
>> > On Tue, 2014-05-06 at 14:27 +0530, Suresh Kumar N. wrote:
>> >> On Mon, May 5, 2014 at 8:38 PM, Dan Williams <dcbw@xxxxxxxxxx> wrote:
>> >> > On Mon, 2014-05-05 at 11:07 +0530, Suresh Kumar N. wrote:
>> >> >> Hi,
>> >> >>
>> >> >> I am new to udev and device enumeration.
>> >> >>
>> >> >> I am interested to know how USB Data Card would get enumerated.
>> >> >>
>> >> >> Based on my understanding Data Card can get enumerated below 2 possible ways -
>> >> >>   1. As a modem
>> >> >>   2. As a Network Interface Card (NIC)
>> >> >
>> >> > Or both at the same time.
>> >> >
>> >> >> Is there a Standard defining the way a Data Card should be enumerated?
>> >> >
>> >> > There is no single standard.  There is a few "standards" and multiple
>> >> > proprietary mechanisms, and sometimes these are combined in the same
>> >> > device.
>> >> >
>> >> > The device simply enumerates as a normal USB device, providing to the
>> >> > host computer one or more USB interfaces.
>> >> >
>> >> > Each USB interface can be any one of:
>> >> >
>> >> > 1) serial interface (AT, QCDM, WMC, WDM, CDC-ACM, etc)
>> >> > 2) pseudo-ethernet NIC (proprietary, CDC-ETHER, CDC-NCM, etc)
>> >>
>> >> In such case (pseudo-ethernet NIC) do we assume that the firmware on
>> >> the USB Dongle is responsible to establish IP address?
>> >> In other words how does IP address allocation occur in this case?
>> >
>>
>> Thank you very much for such a clear and exhaustive explanation.
>>
>> > The firmware is always involved, because the IP address comes from the
>> > cellular network, and the firmware is what receives it.  The firmware
>> > must then provide that address to the host, so that the host can
>> > communicate with the network.  This happens in a few ways:
>> >
>> > 1) firmware implements a DHCP server, IPv6 Router, etc; host uses DHCP
>> > client or IPv6 Router Discovery to obtain IP address and DNS details
>> >
>> > 2) firmware provides static IP address and DNS details over AT commands
>> >
>> > 3) firmware provides static IP address and DNS details via proprietary
>> > protocols (QMI, MBIM, etc)
>> >
>> > 4) firmware implements PPP over serial port and provides IP address and
>> > DNS details via IPCP/IPV6CP
>>
>> Based on 1) and 2), Firmware refers to be driver code implemented on
>> USB device-side, but 3) and 4) refer to Firmware implemented on
>> Host-side.
>> Does Firmware here refer to Host-side or USB device-side?
>
> "Firmware" here always refers to USB device side.  So all 4 of these
> refer to things that the USB device can do, based on what the USB device
> has implemented in its firmware.  It's up to the host to determine which
> protocols the USB device firmware implements, and then to speak to the
> USB device with those protocols to determine the IP address the host
> must use to communicate with the USB device firmware.
>
>> >
>> > Most modems still support #4 over at least one AT-capable serial port.
>> > Many modems implement multiple methods (eg, Qualcomm firmware often does
>> > #1, #3, and #4).
>> >
>> > Note that in all cases, connection setup (with the APN and other
>> > details) must occur via control channels (with AT, QMI, MBIM, etc)
>> > before you can use any of these methods to obtain an IP address from the
>> > firmware.
>> >
>> > There is actually another class of "plug and play" 3G dongle that
>> > provides a NAT-ed IP network (192.168.0.x or 10.x) to the host over what
>> > looks like a USB ethernet NIC.  These appear exactly like a normal USB
>> > ethernet dongle or a home router to the host, and to configure the
>> > device, you use a web browser on the host like you would with a home
>> > router.  None of the 3G stuff is exposed to the host.  One example is
>> > Huawei HiLink devices like the E3256, though not all HiLink-branded
>> > devices operate this way.
>>
>> In all of the above, how do we visualize the Connect/Disconnect option
>> provided by the Host side application?
>
> The steps you must take are *always* dependent on the specific modem
> that you are communicating with.  Depending on which protocols the modem
> implements your host application must do many different things.
>
>> 1. Is it defined to just Enable/Disable a network interface (USB
>> ethernet NIC) on Host side, but in that case would the Active context
>> get Deactivated?
>
> Your host application must perform setup and context activation using
> the control channel protocols (AT commands, proprietary protocols, etc)
> before it can start real IP networking.
>
> Perhaps a concrete example will help.  This is the procedure for
> connecting an Ericsson "MBM" (F3507, F3607, F5521, etc) modem.  This
> modem provides 2 CDC-ACM ports which are used for AT command
> communication, and a CDC-ETHER port which emulates an ethernet
> interface.  Both of these ports use standard protocols and are handled
> automatically by the Linux kernel drivers.
>
> 1) first, check and ensure that the modem is registered on the network
> with AT+CGREG.  Once the modem has registered, you can proceed.
> 2) check for an existing PDP context that matches the APN you want to
> use.  If there is one, save that PDP context ID for the next step.  If
> not, create on with AT+CGDCONT and your APN
> 3) Set authentication for the given PDP context ID with AT*EIAAUW
> 4) Request data session activation with AT*ENAP
> 5) Poll AT*ENAP until it reports that you are connected
> 6) Finally you can run DHCP on the network port to get your IP address
> and DNS servers

Thank You once again Dan for the explanation.

>
> For many devices from Option NV, you follow much the same procedure
> except that the authentication command is AT$QCPDPP for Qualcomm-based
> chipsets, and AT_OPDPP for non-Qualcomm based chipsets (step 3 above).
> Then you use the AT_OWANCALL command to request the data session (step
> 4).  Then to retrieve the IP configuration (step 6), you use AT_OWANDATA
> which returns the IP address, which you then apply to the network port.
> DHCP is not used with these devices.
>
> Huawei devices often have different AT commands (AT^NDISDUP and AT^DHCP)
> for data session activation.  Many Qualcomm devices support QMI, which
> is used instead of AT commands for data session setup.  So you see, what
> procedure you use to start the data session depends on exactly what
> specific USB device you are using.

Please provide some references wherein I can fetch more information
about USB devices and functionality.

>
> Dan
>
>> OR
>> 2. Is it defined to Activate/Deactivate context?
>>
>> >
>> > Dan
>> >
>> >> > 3) proprietary control protocols (CnS, QMI, etc)
>> >> > 4) standard non-serial control protocols (MBIM)
>> >> >
>> >> > A modem can provide any of these in combination.  Which port speaks what
>> >> > protocol is detected by one or more of the following methods:
>> >> >
>> >> > a) USB VID/PID and interface number hardcoded in the drivers or in
>> >> > userland udev rules
>> >> > b) USB interface type (eg, serial port or NIC port, done in userland)
>> >> > c) probing with known request/response to determine different
>> >> > communication protocols used if the port type is indeterminate
>> >>
>> >> Thanks for the information.
>> >>
>> >> >
>> >> > Dan
>> >> >
>> >> >> Please correct if my understanding is not correct or incomplete.
>> >> >>
>> >> >> Thanks in advance for your clarifications.
>> >> >>
>> >> >> Warm Regards,
>> >> >> Suresh
>> >> >> --
>> >> >> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
>> >> >> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> >> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> >> >
>> >> >
>> >> --
>> >> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
>> >> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> >
>> >
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux