I tested the usbnet DHCPD stuff recently on Fedora. Basically, it didn't work for several reasons. The patch below resolves the issues. I've tested it on both Fedora and Ubuntu, so hopefully this will put it in better shape.
Bug link: https://sourceforge.net/tracker/?func=detail&aid=3511154&group_id=201579&atid=978127 Fixes several problems relating to the udev rules and dhcpd script for usbnet remotes. Changes include: * The udev rule for usbnet remotes depends on the 75-net-description.rules. Moved the usbnet rule to a separate file so that it can occur later in rules processing and the other udev rules can stay where they are. * The start_concordance* files needed to be installed as executable. * On Fedora, there wasn't a path set when the start_concordance_dhcpd.sh script was run, so it couldn't find any of the programs. Added a path. * Added an iptables rule to allow the DHCPD to receive requests (it was blocked by default on Fedora). * Added debug statements to start_concordance_dhcpd.sh script. * The start_concordance_dhcpd.sh script could write to stderr, which caused it to hang up udev. Redirected output to /dev/null by default. Signed-off-by: Scott Talbert <s...@techie.net> Index: libconcord/Makefile.am =================================================================== RCS file: /cvsroot/concordance/concordance/libconcord/Makefile.am,v retrieving revision 1.11.2.5 diff -u -p -r1.11.2.5 Makefile.am --- libconcord/Makefile.am 22 Mar 2012 08:52:43 -0000 1.11.2.5 +++ libconcord/Makefile.am 26 Mar 2012 01:19:09 -0000 @@ -16,9 +16,11 @@ install_udev_generic: $(MKDIR_P) $(DESTDIR)$(libdir)/udev/rules.d $(install_sh_DATA) libconcord.rules \ $(DESTDIR)$(libdir)/udev/rules.d/60-libconcord.rules - $(install_sh_DATA) start_concordance_dhcpd.sh \ + $(install_sh_DATA) libconcord-usbnet.rules \ + $(DESTDIR)$(libdir)/udev/rules.d/80-libconcord-usbnet.rules + $(install_sh_SCRIPT) start_concordance_dhcpd.sh \ $(DESTDIR)$(libdir)/udev/ - $(install_sh_DATA) start_concordance_dhcpd_wrapper.sh \ + $(install_sh_SCRIPT) start_concordance_dhcpd_wrapper.sh \ $(DESTDIR)$(libdir)/udev/ install_udev: udev install_udev_generic Index: libconcord/gen_udev_support =================================================================== RCS file: /cvsroot/concordance/concordance/libconcord/gen_udev_support,v retrieving revision 1.1.2.2 diff -u -p -r1.1.2.2 gen_udev_support --- libconcord/gen_udev_support 22 Mar 2012 08:52:43 -0000 1.1.2.2 +++ libconcord/gen_udev_support 26 Mar 2012 01:19:09 -0000 @@ -34,6 +34,7 @@ LOGITECH_MIN_PID=c110 LOGITECH_MAX_PID=c14f UDEV_FILE='libconcord.rules' +UDEV_USBNET_FILE='libconcord-usbnet.rules' HAL_POLICY_FILE='libconcord.fdi' POLICYKIT_FILE='org.freedesktop.hal.device-access.libconcord.policy' CONSOLEKIT_FILE='libconcord.perms' @@ -84,7 +85,7 @@ END # Rule for the usbnet family of remotes to start a DHCP daemon upon detection. emit_udev_usbnet_rules() { file="$1" - cat >>$file <<END + cat >$file <<END SUBSYSTEM=="net", ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c11f", \ RUN+="start_concordance_dhcpd_wrapper.sh" END @@ -104,14 +105,17 @@ emit_udev_rules() { emit_for_all $file "$template" 'yes' } -create_udev_file() { +create_udev_files() { mode=$1 echo -n "Creating udev file: $UDEV_FILE ... " emit_udev_header $UDEV_FILE emit_udev_rules $UDEV_FILE $mode emit_udev_footer $UDEV_FILE - # USBNET rule needs to be outside the other rules since it is a net rule. - emit_udev_usbnet_rules $UDEV_FILE + echo 'done' + # USBNET rule needs to be in a separate file because it depends on + # 75-net-description.rules. + echo -n "Creating udev file: $UDEV_USBNET_FILE ... " + emit_udev_usbnet_rules $UDEV_USBNET_FILE echo 'done' } @@ -238,7 +242,7 @@ if [ "$MODE" == '' ]; then exit 1 fi -create_udev_file $MODE +create_udev_files $MODE if [ "$MODE" == 'policykit' ]; then create_hal_policy_file create_policykit_file Index: libconcord/start_concordance_dhcpd.sh =================================================================== RCS file: /cvsroot/concordance/concordance/libconcord/Attic/start_concordance_dhcpd.sh,v retrieving revision 1.1.2.1 diff -u -p -r1.1.2.1 start_concordance_dhcpd.sh --- libconcord/start_concordance_dhcpd.sh 22 Mar 2012 08:52:43 -0000 1.1.2.1 +++ libconcord/start_concordance_dhcpd.sh 26 Mar 2012 01:19:09 -0000 @@ -6,6 +6,8 @@ NM_WAIT_COUNT=3 LOCAL_IP="169.254.1.1" REMOTE_IP="169.254.1.2" NETMASK="255.255.0.0" +export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +IPTABLES_RULE="INPUT -p udp -i $INTERFACE --dport 67 -j ACCEPT" NMCLI=$(which nmcli) check_nm() { @@ -22,11 +24,14 @@ check_nm() { if [ "$ACTION" = "add" ]; then check_nm if [ "$?" -eq 1 ]; then + echo "NetworkManager found running." >>$LOG COUNT=0 while [ "$COUNT" -lt "$NM_WAIT_COUNT" ]; do + echo "Waiting for NetworkManager." >>$LOG $NMCLI -t -f DEVICE,STATE dev \ | grep "^${INTERFACE}\:connecting" >>$LOG 2>&1 if [ "$?" = "0" ]; then + echo "Disconnecting $INTERFACE via NetworkManager." >>$LOG $NMCLI dev disconnect iface $INTERFACE >>$LOG 2>&1 break fi @@ -34,9 +39,14 @@ if [ "$ACTION" = "add" ]; then sleep 1 done fi + echo "Configuring $INTERFACE interface." >>$LOG ifconfig $INTERFACE $LOCAL_IP netmask $NETMASK >>$LOG 2>&1 + echo "Adding iptables rule." >>$LOG + iptables -I $IPTABLES_RULE >>$LOG 2>&1 dnsmasq --port=0 --interface=$INTERFACE --bind-interfaces --leasefile-ro \ --dhcp-range=$REMOTE_IP,$REMOTE_IP --pid-file=$PID_FILE else + echo "Stopping dnsmasq and removing iptables rule." >>$LOG kill $(cat $PID_FILE) + iptables -D $IPTABLES_RULE >>$LOG 2>&1 fi Index: libconcord/start_concordance_dhcpd_wrapper.sh =================================================================== RCS file: /cvsroot/concordance/concordance/libconcord/Attic/start_concordance_dhcpd_wrapper.sh,v retrieving revision 1.1.2.1 diff -u -p -r1.1.2.1 start_concordance_dhcpd_wrapper.sh --- libconcord/start_concordance_dhcpd_wrapper.sh 22 Mar 2012 08:52:43 -0000 1.1.2.1 +++ libconcord/start_concordance_dhcpd_wrapper.sh 26 Mar 2012 01:19:09 -0000 @@ -1,4 +1,4 @@ #!/bin/bash # Kicks off dhcpd startup in the background so udev can go about its work. -$(dirname $0)/start_concordance_dhcpd.sh & +$(dirname $0)/start_concordance_dhcpd.sh >/dev/null 2>&1 & ------------------------------------------------------------------------------ This SF email is sponsosred by: Try Windows Azure free for 90 days Click Here http://p.sf.net/sfu/sfd2d-msazure _______________________________________________ concordance-devel mailing list concordance-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/concordance-devel