# [SOLVED] Using USB connected Android phone as network?

## pgu

Is there a Linux driver to connect an Android phone (Samsung Galaxy S4) as a networking interface, using the mobile network on the phone as a route to the Internet? I've done this using WiFi, but is it possible over USB?Last edited by pgu on Fri Oct 03, 2014 12:26 pm; edited 1 time in total

----------

## i92guboj

Of course. Check this:

http://wiki.gentoo.org/wiki/Android_USB_Tethering

EDIT: as a related note, connman (and the connman-gnome frontend) works nicely as long as your kernel is able to detect and configure the device. It will list your usb connection as a wired network. So, if you use that you don't have to mess at all with udev rules or network configuration at all. I don't know about networkmanager and other similar tools.

----------

## Roman_Gruber

Hi, I am curious if you can get it to work or if you had problems.

----------

## UberLord

 *i92guboj wrote:*   

> EDIT: as a related note, connman (and the connman-gnome frontend) works nicely as long as your kernel is able to detect and configure the device. It will list your usb connection as a wired network. So, if you use that you don't have to mess at all with udev rules or network configuration at all. I don't know about networkmanager and other similar tools.

 

dhcpcd, and the dhcpcd-gtk and dhcpcd-qt front ends also work fine.

----------

## pgu

I can't seem to get any usb networking devices:

```
# egrep RNDIS\|CDC .config

CONFIG_USB_NET_CDCETHER=y

CONFIG_USB_NET_CDC_EEM=y

CONFIG_USB_NET_CDC_NCM=y

CONFIG_USB_NET_CDC_MBIM=y

CONFIG_USB_NET_RNDIS_HOST=y

CONFIG_USB_NET_CDC_SUBSET=y

# CONFIG_USB_NET_RNDIS_WLAN is not set

```

```
# lsusb -s 3:4

Bus 003 Device 004: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II], GT-I9300 Phone [Galaxy S III], GT-P7500 [Galaxy Tab 10.1]

```

dmesg will show

```
[    3.138807] usb 3-3.2: Product: SAMSUNG_Android

...

[    3.138869] usb 3-3.2: usb_probe_device

[    3.138871] usb 3-3.2: configuration #1 chosen from 1 choice

[    3.138953] usb 3-3.2: Successful Endpoint Configure command

[    3.139468] usb 3-3.2: adding 3-3.2:1.0 (config #1, interface 0)

[    3.139789] usb 3-3.2: adding 3-3.2:1.1 (config #1, interface 1)

[    3.140000] usb 3-3.2: adding 3-3.2:1.2 (config #1, interface 2)

[    3.140191] usb 3-3.2: adding 3-3.2:1.3 (config #1, interface 3)

```

But no usb networking devices:

```
# ifconfig -a | grep -i usb

```

Kernel is 3.10.17-gentoo

----------

## pgu

Adding a -v to lsusb will show some more details even though I don't know what the actual problem is:

```
  Configuration Descriptor:

    bLength                 9

    bDescriptorType         2

    wTotalLength           98

    bNumInterfaces          3

    bConfigurationValue     1

    iConfiguration          0 

    bmAttributes         0xc0

      Self Powered

    MaxPower               96mA

    Interface Association:

      bLength                 8

      bDescriptorType        11

      bFirstInterface         0

      bInterfaceCount         2

      bFunctionClass        224 Wireless

      bFunctionSubClass       1 Radio Frequency

      bFunctionProtocol       3 RNDIS

      iFunction               7 RNDIS

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        0

      bAlternateSetting       0

      bNumEndpoints           1

      bInterfaceClass       224 Wireless

      bInterfaceSubClass      1 Radio Frequency

      bInterfaceProtocol      3 RNDIS

      iInterface              5 RNDIS Communications Control

      ** UNRECOGNIZED:  05 24 00 10 01

      ** UNRECOGNIZED:  05 24 01 00 01

      ** UNRECOGNIZED:  04 24 02 00

      ** UNRECOGNIZED:  05 24 06 00 01

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x82  EP 2 IN

        bmAttributes            3

          Transfer Type            Interrupt

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0008  1x 8 bytes

        bInterval               9

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        1

      bAlternateSetting       0

      bNumEndpoints           2

      bInterfaceClass        10 CDC Data

      bInterfaceSubClass      0 Unused

      bInterfaceProtocol      0 

      iInterface              6 RNDIS Ethernet Data

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x81  EP 1 IN

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x01  EP 1 OUT

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

```

I don't know if the UNRECOGNIZED entries will show up on a working interface...

----------

## Roman_Gruber

The problem maybe lies in (Samsung Galaxy S4) software version or the settings.

The reason why I use a google nexus 4 is in custom firmware and all available software options.

Your carrier or your smartphone itself blocked this service or made it unavailable. As I do not have such a device it is just a guess.

Maybe you can connect with the android debug bridge and dig around in your phone but I would have to look up myself what you can do with adb. Therefore it is just a hint and I have never done it before. As said it depends on your software of the phone and what is locked or made unavailable.

as the gentoo wiki notes some devices which works and I assume you did all what the gentoo wiki says it has to be your phone than itself.

----------

## i92guboj

I haven't an s4 to test (my phones are much cheaper  :Laughing: ) but I think that phone should just work.

So, are you enabling usb tethering in the phone? You have to do that, otherwise all your computer will see is a storage device (if anything). It's usually in the same place where you enable the wifi access point.

Also, try enabling this:

```
# CONFIG_USB_NET_RNDIS_WLAN is not set 
```

I don't know about the s4, but my dg350 certainly needs it.

----------

## pgu

 *tw04l124 wrote:*   

> The problem maybe lies in (Samsung Galaxy S4) software version or the settings.
> 
> The reason why I use a google nexus 4 is in custom firmware and all available software options.
> 
> Your carrier or your smartphone itself blocked this service or made it unavailable. As I do not have such a device it is just a guess.
> ...

 

As I mentioned I've done it in the past using the WiFi interface rather than USB so the phone and provider should allow this to some extent.

I've been using adb for Android development, but I can't see how it can help me here as many of the typical command are generally disabled/different. The proc filesystem is there, but I don't know what I should check...

```
$ cat /proc/version                                     

Linux version 3.4.0-1429916 (dpi@SWDD5015) (gcc version 4.7 (GCC) ) #1 SMP PREEMPT Wed May 21 12:59:27 KST 2014

```

----------

## pgu

 *i92guboj wrote:*   

> I haven't an s4 to test (my phones are much cheaper ) but I think that phone should just work.
> 
> So, are you enabling usb tethering in the phone? You have to do that, otherwise all your computer will see is a storage device (if anything). It's usually in the same place where you enable the wifi access point.
> 
> Also, try enabling this:
> ...

 

Yes I have enabled the USB Internet sharing. If I don't  lsusb will only show information about camera and serial communication:

```
      bInterfaceClass         6 Imaging

      bInterfaceSubClass      1 Still Image Capture

      bInterfaceProtocol      1 Picture Transfer Protocol (PIMA 15470)

      iInterface              5 MTP

...

      bInterfaceClass         2 Communications

      bInterfaceSubClass      2 Abstract (modem)

      bInterfaceProtocol      1 AT-commands (v.25ter)

      iInterface              6 CDC Abstract Control Model (ACM)

```

Nothing about "RNDIS Communications Control" and such as I listed above.

I don't know how to enable CONFIG_USB_NET_RNDIS_WLAN. The option listed in the Wiki results in CONFIG_USB_NET_RNDIS_HOST getting set.

----------

## pgu

I'll try to upgrade my kernel and see if that helps or if things will behave differently...

----------

## pgu

Seems like a kernel update (3.14.14-gentoo) did it. At least now I see a enp0s20u3u2 when running ifconfig, and it has been assigned an IP address

----------

## i92guboj

Oh, forget about that, I mixed up the two RNDIS options, your config should be fine in that regard.

At least for me, the modules are autoloaded when I have the phone connected and I enable the usb tethering option. If that doesn't happen in your case, then it could be because there's no right module for your phone. I would try enabling everything under device drivers->network dev support->usb adapters as module 'M'.

If that doesn't work, double check that you haven't blacklisted anything related under /etc/modprobe.d/*. 

Also, I use "eudev" with USE="gudev hwdb keymap kmod modutils openrc rule-generator", if you use this or udev make sure you have USE=kmod enabled, it probably needs that to autoload modules though I really try to know as little as possible about udev and co.

EDIT: Ups, just saw your update above. I am glad that you made it work. See you around  :Smile: 

----------

