summaryrefslogtreecommitdiff
path: root/recipes-core/usb-rndis
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2012-11-26 13:17:50 +0100
committerMax Krummenacher <max.krummenacher@toradex.com>2012-11-26 13:17:50 +0100
commitbba3ade18292cec012a006a332ab7a2c1918f404 (patch)
tree2a6d05f849e39540bea0e003a8536473206af92f /recipes-core/usb-rndis
parent1ba41eb2d7ae9bf114130d0e6bec8ee9e10d363d (diff)
usb-rndis:
- add recipe which configures RNDIS and dhcp on the new NIC requires kernel commit b7e977a36ee2b1ab1a55238761fe8d63df9bc638 see also http://permalink.gmane.org/gmane.linux.usb.general/56244
Diffstat (limited to 'recipes-core/usb-rndis')
-rw-r--r--recipes-core/usb-rndis/files/busybox-dhcpd.service12
-rw-r--r--recipes-core/usb-rndis/files/start-rndis.sh8
-rw-r--r--recipes-core/usb-rndis/files/udhcpd.conf115
-rw-r--r--recipes-core/usb-rndis/files/usb-rndis.service15
-rw-r--r--recipes-core/usb-rndis/usb-rndis-systemd.bb30
5 files changed, 180 insertions, 0 deletions
diff --git a/recipes-core/usb-rndis/files/busybox-dhcpd.service b/recipes-core/usb-rndis/files/busybox-dhcpd.service
new file mode 100644
index 0000000..5bcaecb
--- /dev/null
+++ b/recipes-core/usb-rndis/files/busybox-dhcpd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Dynamic Host Configuration Protocol (DHCP), busybox provided
+After=syslog.target
+After=network.target
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/udhcpd
+
+[Install]
+WantedBy=basic.target
+Alias=dhcpd.service
diff --git a/recipes-core/usb-rndis/files/start-rndis.sh b/recipes-core/usb-rndis/files/start-rndis.sh
new file mode 100644
index 0000000..3548722
--- /dev/null
+++ b/recipes-core/usb-rndis/files/start-rndis.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# configures the usb gadget to provide rnidis,
+# sets the IP addr of the newly created interface
+echo 0 > /sys/class/android_usb/android0/enable
+echo rndis > /sys/class/android_usb/android0/functions
+echo 1 > /sys/class/android_usb/android0/enable
+ifconfig rndis0 192.168.11.2
diff --git a/recipes-core/usb-rndis/files/udhcpd.conf b/recipes-core/usb-rndis/files/udhcpd.conf
new file mode 100644
index 0000000..62a016a
--- /dev/null
+++ b/recipes-core/usb-rndis/files/udhcpd.conf
@@ -0,0 +1,115 @@
+# Sample udhcpd configuration file (/etc/udhcpd.conf)
+# Values shown are defaults
+
+# The start and end of the IP lease block
+start 192.168.11.1
+end 192.168.11.1
+
+# The interface that udhcpd will use
+interface rndis0
+
+# The maximum number of leases (includes addresses reserved
+# by OFFER's, DECLINE's, and ARP conflicts). Will be corrected
+# if it's bigger than IP lease block, but it ok to make it
+# smaller than lease block.
+#max_leases 254
+
+# The amount of time that an IP will be reserved (leased to nobody)
+# if a DHCP decline message is received (seconds)
+#decline_time 3600
+
+# The amount of time that an IP will be reserved
+# if an ARP conflict occurs (seconds)
+#conflict_time 3600
+
+# How long an offered address is reserved (seconds)
+#offer_time 60
+
+# If client asks for lease below this value, it will be rounded up
+# to this value (seconds)
+#min_lease 60
+
+# The location of the pid file
+#pidfile /var/run/udhcpd.pid
+
+# The location of the leases file
+#lease_file /var/lib/misc/udhcpd.leases
+
+# The time period at which udhcpd will write out leases file.
+# If this is 0, udhcpd will never automatically write leases file.
+# Specified in seconds.
+#auto_time 7200
+
+# Every time udhcpd writes a leases file, the below script will be called
+#notify_file # default: no script
+#notify_file dumpleases # useful for debugging
+
+# The following are bootp specific options
+# next server to use in bootstrap
+#siaddr 192.168.0.22 # default: 0.0.0.0 (none)
+# tftp server name
+#sname zorak # default: none
+# tftp file to download (e.g. kernel image)
+#boot_file /var/nfs_root # default: none
+
+# Static leases map
+#static_lease 00:60:08:11:CE:4E 192.168.0.54
+#static_lease 00:60:08:11:CE:3E 192.168.0.44
+
+# The remainder of options are DHCP options and can be specified with the
+# keyword 'opt' or 'option'. If an option can take multiple items, such
+# as the dns option, they can be listed on the same line, or multiple
+# lines.
+# Examples:
+#opt dns 192.168.10.2 192.168.10.10
+option subnet 255.255.255.0
+#opt router 192.168.10.2
+#opt wins 192.168.10.10
+#option dns 129.219.13.81 # appended to above DNS servers for a total of 3
+option domain usb_local
+option lease 864000 # default: 10 days
+#option msstaticroutes 10.0.0.0/8 10.127.0.1 # single static route
+#option staticroutes 10.0.0.0/8 10.127.0.1, 10.11.12.0/24 10.11.12.1
+# Arbitrary option in hex form:
+#option 0x08 01020304 # option 8: "cookie server IP addr: 1.2.3.4"
+
+# Currently supported options (for more info, see options.c):
+#opt lease NUM
+#opt subnet IP
+#opt broadcast IP
+#opt router IP_LIST
+#opt ipttl NUM
+#opt mtu NUM
+#opt hostname STRING # client's hostname
+#opt domain STRING # client's domain suffix
+#opt search STRING_LIST # search domains
+#opt nisdomain STRING
+#opt timezone NUM # (localtime - UTC_time) in seconds. signed
+#opt tftp STRING # tftp server name
+#opt bootfile STRING # tftp file to download (e.g. kernel image)
+#opt bootsize NUM # size of that file
+#opt rootpath STRING # (NFS) path to mount as root fs
+#opt wpad STRING
+#opt serverid IP # default: server's IP
+#opt message STRING # error message (udhcpd sends it on success too)
+#opt vlanid NUM # 802.1P VLAN ID
+#opt vlanpriority NUM # 802.1Q VLAN priority
+# Options specifying server(s)
+#opt dns IP_LIST
+#opt wins IP_LIST
+#opt nissrv IP_LIST
+#opt ntpsrv IP_LIST
+#opt lprsrv IP_LIST
+#opt swapsrv IP
+# Options specifying routes
+#opt routes IP_PAIR_LIST
+#opt staticroutes STATIC_ROUTES # RFC 3442 classless static route option
+#opt msstaticroutes STATIC_ROUTES # same, using MS option number
+# Obsolete options, no longer supported
+#opt logsrv IP_LIST # 704/UDP log server (not syslog!)
+#opt namesrv IP_LIST # IEN 116 name server, obsolete (August 1979!!!)
+#opt cookiesrv IP_LIST # RFC 865 "quote of the day" server, rarely (never?) used
+#opt timesrv IP_LIST # RFC 868 time server, rarely (never?) used
+# TODO: in development
+#opt userclass STRING # RFC 3004. set of LASCII strings. "I am a printer" etc
+#opt sipserv STRING LIST # RFC 3361. flag byte, then: 0: domain names, 1: IP addrs \ No newline at end of file
diff --git a/recipes-core/usb-rndis/files/usb-rndis.service b/recipes-core/usb-rndis/files/usb-rndis.service
new file mode 100644
index 0000000..5166082
--- /dev/null
+++ b/recipes-core/usb-rndis/files/usb-rndis.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Set the USB gadget to RNDIS
+Documentation=http://permalink.gmane.org/gmane.linux.usb.general/56244
+DefaultDependencies=no
+After=dhcpd.service
+Wants=dhcpd.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/bin/start-rndis.sh
+ExecStop=echo 0 > /sys/class/android_usb/android0/enable
+
+[Install]
+WantedBy=basic.target
diff --git a/recipes-core/usb-rndis/usb-rndis-systemd.bb b/recipes-core/usb-rndis/usb-rndis-systemd.bb
new file mode 100644
index 0000000..47bf921
--- /dev/null
+++ b/recipes-core/usb-rndis/usb-rndis-systemd.bb
@@ -0,0 +1,30 @@
+SECTION = "network"
+DESCRIPTION = "RNDIS usb client configuration and startup"
+RDEPENDS_${PN} = ""
+# The license is meant for this recipe and the files it installes.
+# RNDIS is part of the kernel, udhcpd is part of busybox
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
+
+# The kernel provides with CONFIG_USB_G_ANDROID a composite gadget driver among other with RNDIS functionality.
+# This package contains systemd files to configure RNDIS at startup, configures a fix IP localy and provides a dhcp server on the new interface.
+# Local IP is 192.168.11.2, remote IP is 192.168.11.1
+
+inherit allarch systemd
+
+SRC_URI = " \
+ file://start-rndis.sh \
+ file://usb-rndis.service \
+ file://busybox-dhcpd.service \
+ file://udhcpd.conf "
+
+do_install() {
+ install -d ${D}/${sysconfdir} ${D}/${bindir}
+ install -m 0755 ${WORKDIR}/start-rndis.sh ${D}/${bindir}
+ install -m 0644 ${WORKDIR}/udhcpd.conf ${D}/${sysconfdir}/
+}
+
+NATIVE_SYSTEMD_SUPPORT = "1"
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "usb-rndis.service busybox-dhcpd.service "
+