]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - config/dhcpc/dhcpcd-hooks/10-mtu
dhcpcd: rework mtu handling on buggy nic's
[ipfire-2.x.git] / config / dhcpc / dhcpcd-hooks / 10-mtu
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
+