From 8620d5f60113438cdece64566e34e105486b2688 Mon Sep 17 00:00:00 2001 From: Max Krummenacher Date: Fri, 7 Dec 2012 16:41:13 +0100 Subject: usb-rndis: make sure the interface is up when a host connects --- recipes-core/usb-rndis/files/busybox-dhcpd.service | 12 --- recipes-core/usb-rndis/files/start-rndis.sh | 19 ++-- recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf | 115 +++++++++++++++++++++ recipes-core/usb-rndis/files/udhcpd.conf | 115 --------------------- recipes-core/usb-rndis/files/usb-rndis.rules | 2 + recipes-core/usb-rndis/files/usb-rndis.service | 7 +- recipes-core/usb-rndis/usb-rndis-systemd.bb | 15 +-- 7 files changed, 141 insertions(+), 144 deletions(-) delete mode 100644 recipes-core/usb-rndis/files/busybox-dhcpd.service create mode 100644 recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf delete mode 100644 recipes-core/usb-rndis/files/udhcpd.conf create mode 100644 recipes-core/usb-rndis/files/usb-rndis.rules (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 deleted file mode 100644 index 5bcaecb..0000000 --- a/recipes-core/usb-rndis/files/busybox-dhcpd.service +++ /dev/null @@ -1,12 +0,0 @@ -[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 index 3548722..a3b4e00 100644 --- a/recipes-core/usb-rndis/files/start-rndis.sh +++ b/recipes-core/usb-rndis/files/start-rndis.sh @@ -1,8 +1,15 @@ #!/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 +case "$1" in + start) + echo 0 > /sys/class/android_usb/android0/enable + echo rndis > /sys/class/android_usb/android0/functions + echo 1 > /sys/class/android_usb/android0/enable + ;; + + stop) + echo 0 > /sys/class/android_usb/android0/enable + ;; +esac + +exit 0 diff --git a/recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf b/recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf new file mode 100644 index 0000000..62a016a --- /dev/null +++ b/recipes-core/usb-rndis/files/udhcpd-usb-rndis.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/udhcpd.conf b/recipes-core/usb-rndis/files/udhcpd.conf deleted file mode 100644 index 62a016a..0000000 --- a/recipes-core/usb-rndis/files/udhcpd.conf +++ /dev/null @@ -1,115 +0,0 @@ -# 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.rules b/recipes-core/usb-rndis/files/usb-rndis.rules new file mode 100644 index 0000000..938e46d --- /dev/null +++ b/recipes-core/usb-rndis/files/usb-rndis.rules @@ -0,0 +1,2 @@ +#when a host connects over rndis, give the rnids0 NIC a IP address and up it +SUBSYSTEM=="android_usb", ATTR{state}=="CONFIGURED", RUN+="/bin/sh -c '/sbin/ifconfig rndis0 192.168.11.2/24 ; /usr/sbin/udhcpd -S /etc/udhcpd-usb-rndis.conf' " diff --git a/recipes-core/usb-rndis/files/usb-rndis.service b/recipes-core/usb-rndis/files/usb-rndis.service index 5166082..6592ad7 100644 --- a/recipes-core/usb-rndis/files/usb-rndis.service +++ b/recipes-core/usb-rndis/files/usb-rndis.service @@ -1,15 +1,14 @@ +#also consult /etc/udev/ruldes.d/usb-rndis.rules [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 +ExecStart=/usr/bin/start-rndis.sh start +ExecStop=/usr/bin/start-rndis.sh stop [Install] WantedBy=basic.target diff --git a/recipes-core/usb-rndis/usb-rndis-systemd.bb b/recipes-core/usb-rndis/usb-rndis-systemd.bb index 47bf921..b2cc2ce 100644 --- a/recipes-core/usb-rndis/usb-rndis-systemd.bb +++ b/recipes-core/usb-rndis/usb-rndis-systemd.bb @@ -1,7 +1,7 @@ SECTION = "network" DESCRIPTION = "RNDIS usb client configuration and startup" RDEPENDS_${PN} = "" -# The license is meant for this recipe and the files it installes. +# The license is meant for this recipe and the files it installs. # RNDIS is part of the kernel, udhcpd is part of busybox LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58" @@ -15,16 +15,17 @@ inherit allarch systemd SRC_URI = " \ file://start-rndis.sh \ file://usb-rndis.service \ - file://busybox-dhcpd.service \ - file://udhcpd.conf " + file://usb-rndis.rules \ + file://udhcpd-usb-rndis.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}/ + install -d ${D}/${sysconfdir}/udev/rules.d ${D}/${bindir} + install -m 0755 ${WORKDIR}/start-rndis.sh ${D}/${bindir}/ + install -m 0644 ${WORKDIR}/usb-rndis.rules ${D}/${sysconfdir}/udev/rules.d/ + install -m 0644 ${WORKDIR}/udhcpd-usb-rndis.conf ${D}/${sysconfdir}/ } NATIVE_SYSTEMD_SUPPORT = "1" SYSTEMD_PACKAGES = "${PN}" -SYSTEMD_SERVICE_${PN} = "usb-rndis.service busybox-dhcpd.service " +SYSTEMD_SERVICE_${PN} = "usb-rndis.service" -- cgit v1.2.3