From 5ee8851ace245058551885dddb23a3820f6c2bea Mon Sep 17 00:00:00 2001 From: Max Krummenacher Date: Tue, 10 Mar 2015 16:21:19 +0100 Subject: usb-rndis: fix various issues with dhcpd service for RNDIS - Make sure leases file is not persistent (in /var/run now) This allows to serve the same IP to the generated (and hence different IP addresses) - Start RNDIS service after the network.target - Tegra: Add extra service for udhcpd. When running dhcpd directly from udev, the daemon will be killed after a while --- recipes-core/usb-rndis/files/tegra/udhcpd-usb-rndis.conf | 4 +++- recipes-core/usb-rndis/files/tegra/usb-rndis-udhcpd.service | 9 +++++++++ recipes-core/usb-rndis/files/tegra/usb-rndis.rules | 2 +- recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf | 4 +++- recipes-core/usb-rndis/files/usb-rndis.service | 2 +- recipes-core/usb-rndis/usb-rndis-systemd.bb | 8 ++++++-- recipes/images/trdx-extra.inc | 1 + 7 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 recipes-core/usb-rndis/files/tegra/usb-rndis-udhcpd.service diff --git a/recipes-core/usb-rndis/files/tegra/udhcpd-usb-rndis.conf b/recipes-core/usb-rndis/files/tegra/udhcpd-usb-rndis.conf index 117b940..bf69097 100644 --- a/recipes-core/usb-rndis/files/tegra/udhcpd-usb-rndis.conf +++ b/recipes-core/usb-rndis/files/tegra/udhcpd-usb-rndis.conf @@ -33,7 +33,9 @@ max_leases 1 #pidfile /var/run/udhcpd.pid # The location of the leases file -#lease_file /var/lib/misc/udhcpd.leases +# As we want to service a point to point connection over USB: +# do not use a persistent file +lease_file /var/run/udhcpd-rndis.leases # The time period at which udhcpd will write out leases file. # If this is 0, udhcpd will never automatically write leases file. diff --git a/recipes-core/usb-rndis/files/tegra/usb-rndis-udhcpd.service b/recipes-core/usb-rndis/files/tegra/usb-rndis-udhcpd.service new file mode 100644 index 0000000..3762198 --- /dev/null +++ b/recipes-core/usb-rndis/files/tegra/usb-rndis-udhcpd.service @@ -0,0 +1,9 @@ +[Unit] +Description=dhcp deamon for rndis NIC, meant to be started from udev rule + +[Service] +ExecStart=/usr/sbin/udhcpd -fS /etc/udhcpd-usb-rndis.conf + +[Install] +WantedBy=multi-user.target + diff --git a/recipes-core/usb-rndis/files/tegra/usb-rndis.rules b/recipes-core/usb-rndis/files/tegra/usb-rndis.rules index 9cfc918..1f3475e 100644 --- a/recipes-core/usb-rndis/files/tegra/usb-rndis.rules +++ b/recipes-core/usb-rndis/files/tegra/usb-rndis.rules @@ -1,2 +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/ip address add 192.168.11.2/24 dev rndis0; /sbin/ip link set rndis0 up ; /usr/sbin/udhcpd -S /etc/udhcpd-usb-rndis.conf' " +SUBSYSTEM=="android_usb", ATTR{state}=="CONFIGURED", RUN+="/bin/sh -c '/sbin/ip address add 192.168.11.2/24 dev rndis0; /sbin/ip link set rndis0 up' ",TAG+="systemd",ENV{SYSTEMD_WANTS}="usb-rndis-udhcpd.service" diff --git a/recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf b/recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf index acb14b2..ea0c0ea 100644 --- a/recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf +++ b/recipes-core/usb-rndis/files/udhcpd-usb-rndis.conf @@ -33,7 +33,9 @@ max_leases 1 #pidfile /var/run/udhcpd.pid # The location of the leases file -#lease_file /var/lib/misc/udhcpd.leases +# As we want to service a point to point connection over USB: +# do not use a persistent file +lease_file /var/run/udhcpd-rndis.leases # The time period at which udhcpd will write out leases file. # If this is 0, udhcpd will never automatically write leases file. diff --git a/recipes-core/usb-rndis/files/usb-rndis.service b/recipes-core/usb-rndis/files/usb-rndis.service index d586abc..c302d70 100644 --- a/recipes-core/usb-rndis/files/usb-rndis.service +++ b/recipes-core/usb-rndis/files/usb-rndis.service @@ -3,7 +3,7 @@ Description=Load/Configure the kernel driver providing the RNDIS gadget Documentation=http://www.linux-usb.org/gadget/ http://permalink.gmane.org/gmane.linux.usb.general/56244 DefaultDependencies=no -After=basic.target +After=network.target [Service] Type=oneshot diff --git a/recipes-core/usb-rndis/usb-rndis-systemd.bb b/recipes-core/usb-rndis/usb-rndis-systemd.bb index 5e6a728..d229123 100644 --- a/recipes-core/usb-rndis/usb-rndis-systemd.bb +++ b/recipes-core/usb-rndis/usb-rndis-systemd.bb @@ -1,5 +1,5 @@ SECTION = "network" -DESCRIPTION = "RNDIS usb client configuration and startup" +SUMMARY = "RNDIS usb client configuration and startup" RDEPENDS_${PN} = "" # The license is meant for this recipe and the files it installs. # RNDIS is part of the kernel, udhcpd is part of busybox @@ -31,6 +31,7 @@ SRC_URI = " \ SRC_URI_tegra = " \ ${SRC_URI_COMMON} \ file://usb-rndis.rules \ + file://usb-rndis-udhcpd.service \ " do_install() { @@ -45,10 +46,13 @@ do_install() { do_install_append_tegra() { install -d ${D}/${sysconfdir}/udev/rules.d install -m 0644 ${WORKDIR}/usb-rndis.rules ${D}/${sysconfdir}/udev/rules.d + install -m 0644 ${WORKDIR}/usb-rndis-udhcpd.service ${D}${systemd_unitdir}/system } +FILES_${PN} += "${systemd_unitdir}/system" + NATIVE_SYSTEMD_SUPPORT = "1" SYSTEMD_PACKAGES = "${PN}" SYSTEMD_SERVICE_${PN} = "usb-rndis.service" -SYSTEMD_AUTO_ENABLE = "disable" +SYSTEMD_AUTO_ENABLE_mx6 = "disable" diff --git a/recipes/images/trdx-extra.inc b/recipes/images/trdx-extra.inc index 1165f5a..df060e6 100644 --- a/recipes/images/trdx-extra.inc +++ b/recipes/images/trdx-extra.inc @@ -110,6 +110,7 @@ IMAGE_INSTALL_MACHINE_colibri-imx6 = " \ IMAGE_INSTALL_MACHINE_colibri-vf = " \ u-boot-toradex-fsl-fw-utils \ + usb-rndis-systemd \ gpioconfig \ ptpd \ iproute2 \ -- cgit v1.2.3