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

Reply via email to