]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
dhcpcd: rework mtu handling on buggy nic's
authorArne Fitzenreiter <arne_f@ipfire.org>
Mon, 1 Feb 2016 06:28:03 +0000 (07:28 +0100)
committerArne Fitzenreiter <arne_f@ipfire.org>
Mon, 1 Feb 2016 06:31:46 +0000 (07:31 +0100)
some nic's loose the carrier after setting new mtu.

Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
config/dhcpc/dhcpcd-hooks/10-mtu [new file with mode: 0644]
config/rootfiles/core/98/filelists/files
lfs/dhcpcd
src/initscripts/init.d/networking/dhcpcd.exe

diff --git a/config/dhcpc/dhcpcd-hooks/10-mtu b/config/dhcpc/dhcpcd-hooks/10-mtu
new file mode 100644 (file)
index 0000000..49e0519
--- /dev/null
@@ -0,0 +1,31 @@
+# Configure the MTU for the interface
+
+eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
+
+set_mtu()
+{
+       local mtu=$1
+       ip link set "$interface" mtu "$mtu"
+
+       # test for buggy nic that lose link at mtu set...
+       carrier=`cat /sys/class/net/$interface/carrier`
+       if [ "$carrier" == "0" ]; then
+               syslog info "Warning! Carrier loss after MTU set. Reinit ..."
+               ip link set "$interface" down
+               ip link set "$interface" up
+       fi
+}
+if [ -n "$new_interface_mtu" ] && $if_up; then
+       if [ $RED_DHCP_FORCE_MTU -ge 576 ]; then
+               new_interface_mtu=$RED_DHCP_FORCE_MTU
+       fi
+       if [ ! "$new_interface_mtu" == "$ifmtu" ]; then
+               # The smalled MTU dhcpcd can work with is 576
+               if [ "$new_interface_mtu" -gt 576 ]; then
+                       if set_mtu "$new_interface_mtu"; then
+                               syslog info "MTU set to $new_interface_mtu"
+                       fi
+               fi
+       fi
+fi
+
index 8586e6aab36e92b09170ea9f941fd6d2044421ff..ad5d9a7e4719d135e3dd794afea4f33f1b4edf1b 100644 (file)
@@ -1,6 +1,7 @@
 etc/system-release
 etc/issue
 etc/rc.d/init.d/firewall
+etc/rc.d/init.d/networking/dhcpcd.exe
 etc/modprobe.d/nf_conntrack.conf
 srv/web/ipfire/cgi-bin/logs.cgi/firewalllog.dat
 srv/web/ipfire/cgi-bin/logs.cgi/firewalllogcountry.dat
@@ -16,3 +17,4 @@ srv/web/ipfire/cgi-bin/webaccess.cgi
 usr/bin/pgrep
 usr/local/bin/qosctrl
 usr/local/bin/timectrl
+var/ipfire/dhcpc/dhcpcd-hooks/10-mtu
index ff31821f60af3d3b9f144b46e1016a856abcfeea..3b9a094ce17876d20449cbcf319831f682ebd4df 100644 (file)
@@ -85,9 +85,9 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        rm -f $(CONFIG_ROOT)/dhcpc/dhcpcd-hooks/50-yp.conf
        rm -f $(CONFIG_ROOT)/dhcpc/dhcpcd-hooks/50-ypbind
 
-       sed -i -e "s|-ge 576|-gt 576|g" $(CONFIG_ROOT)/dhcpc/dhcpcd-hooks/10-mtu
-
        install -m 644 $(DIR_SRC)/config/dhcpc/dhcpcd.conf $(CONFIG_ROOT)/dhcpc/
+       install -m 444 $(DIR_SRC)/config/dhcpc/dhcpcd-hooks/10-mtu $(CONFIG_ROOT)/dhcpc/dhcpcd-hooks
+
        chown root:root $(CONFIG_ROOT)/dhcpc/dhcpcd.conf
 
        @rm -rf $(DIR_APP)
index a7bad47b5037c0af2ef4af5551940ef21a51b6f0..a2cdc66d257404c57cdad5013cda247bbfcbe751 100644 (file)
@@ -31,13 +31,6 @@ dhcpcd_up()
        # Only if RED_TYPE=DHCP update /var/ipfire/red
        if [ "$RED_TYPE" == "DHCP" ]; then
 
-               #Force MTU option for KabelDeutschland because this ISP
-               #set the MTU to 576 instead of the supportet 1500
-               if [ $RED_DHCP_FORCE_MTU -ge 576 ]; then
-                       logger -p local0.info -t dhcpcd.exe[$$] "Force mtu to $RED_DHCP_FORCE_MTU"
-                       ip link set $interface mtu $RED_DHCP_FORCE_MTU
-               fi
-
                #Check if we have to restart the services at update
                [ ! -e "/var/ipfire/red/active" ] && update=1;
                if [ "$old_domain_name_service" != "$new_domain_name_service" ]; then