From 09d1d993ac2d9f4a134c9f3ef2fea8409fcac20f Mon Sep 17 00:00:00 2001 From: Max Krummenacher Date: Mon, 26 Nov 2012 13:17:50 +0100 Subject: 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 --- recipes-core/usb-rndis/files/busybox-dhcpd.service | 12 +++ recipes-core/usb-rndis/files/start-rndis.sh | 8 ++ recipes-core/usb-rndis/files/udhcpd.conf | 115 +++++++++++++++++++++ recipes-core/usb-rndis/files/usb-rndis.service | 15 +++ recipes-core/usb-rndis/usb-rndis-systemd.bb | 30 ++++++ 5 files changed, 180 insertions(+) create mode 100644 recipes-core/usb-rndis/files/busybox-dhcpd.service create mode 100644 recipes-core/usb-rndis/files/start-rndis.sh create mode 100644 recipes-core/usb-rndis/files/udhcpd.conf create mode 100644 recipes-core/usb-rndis/files/usb-rndis.service create mode 100644 recipes-core/usb-rndis/usb-rndis-systemd.bb (limited to 'recipes-core/usb-rndis') 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 " + -- cgit v1.2.3