Getting the USB-powerline bridge to work on Linux

Last modification on

NOTE: this guide is obsolete, a working driver is now included in the Linux kernel tree (since Linux 2.6.31)

Introduction

A USB to powerline bridge is a network device that instead of using an ordinary Ethernet cable (CAT5 for example) or wireless LAN it uses the powerlines as a network to communicate with similar devices. A more comprehensive explanation of what it is and how it works you can find here: https://en.wikipedia.org/wiki/IEEE_1901.

Known products that use the Intellon 51x1 chipset:

  • MicroLink dLAN USB
  • "Digitus network"
  • Intellon USB Ethernet powerline adapter
  • Lots of other USB-powerline adapters...

To check if your device is supported:

$ lsusb | grep -i 09e1
Bus 001 Device 003: ID 09e1:5121 Intellon Corp.

If the vendor (09e1) and product (5121) ID match then it's probably supported.

Installation

Get drivers from the official site: http://www.devolo.co.uk/consumer/downloads-44-microlink-dlan-usb.html?l=en or mirrored here. The drivers from the official site were/are more up-to-date.

Extract them:

$ tar -xzvf dLAN-linux-package-v4.tar.gz

Go to the extracted directory and compile them:

$ ./configure
$ make

Depending on the errors you got you might need to download and apply my patch:

$ cd dLAN-linux-package-v4/     (or other path to the source code)
$ patch < int51x1.patch

Try again:

$ ./configure
$ make

If that failed try:

$ ./configure
$ KBUILD_NOPEDANTIC=1 make

If that went OK install the drivers (as root):

# make install

Check if the "devolo_usb" module is loaded:

$ lsmod | grep -i devolo_usb

If it shows up then it's loaded. Now check if the interface is added:

$ ifconfig -a | grep -i dlanusb
dlanusb0 Link encap:Ethernet HWaddr 00:12:34:56:78:9A

Configuration

It is assumed you use a static IP, otherwise you can just use your DHCP client to get an unused IP address from your DHCP server. Setting up the interface is done like this (change the IP address and netmask accordingly if it's different):

# ifconfig dlanusb0 192.168.2.12 netmask 255.255.255.0

Checking if the network works

Try to ping an IP address on your network to test for a working connection:

$ ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=30 time=2.49 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=30 time=3.37 ms
64 bytes from 192.168.2.1: icmp_seq=3 ttl=30 time=2.80 ms
--- 192.168.2.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 2.497/2.891/3.374/0.368 ms

You can now set up a network connection like you normally do with any Ethernet device. The route can be added like this for example:

# route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.2.1 dlanusb0

Change the IP address of your local gateway accordingly. Also make sure your nameserver is set in /etc/resolv.conf, something like:

nameserver 192.168.2.1

Test your internet connection by doing for example:

$ ping codemadness.org
PING codemadness.org (64.13.232.151) 56(84) bytes of data.
64 bytes from acmkoieeei.gs02.gridserver.com (64.13.232.151): icmp_seq=1 ttl=52 time=156 ms
64 bytes from acmkoieeei.gs02.gridserver.com (64.13.232.151): icmp_seq=2 ttl=52 time=156 ms
64 bytes from acmkoieeei.gs02.gridserver.com (64.13.232.151): icmp_seq=3 ttl=52 time=155 ms
--- codemadness.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 155.986/156.312/156.731/0.552 ms

If this command failed you probably have not setup your DNS/gateway properly. If it worked then good for you :)

References