diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index d982cd77d..d591720a7 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -727,6 +727,24 @@ function _interfaces_gif_configure($gif) } } +function interfaces_hardware($verbose = false) +{ + if ($verbose) { + echo 'Configuring hardware interfaces...'; + flush(); + } + + $intf_details = legacy_interfaces_details(); + + foreach (array_keys(get_interface_list()) as $device) { + configure_interface_hardware($device, $intf_details); + } + + if ($verbose) { + echo "done.\n"; + } +} + function interfaces_configure($verbose = false) { $interfaces = []; diff --git a/src/etc/inc/interfaces.lib.inc b/src/etc/inc/interfaces.lib.inc index 7faef58b2..7d0a9c8e3 100644 --- a/src/etc/inc/interfaces.lib.inc +++ b/src/etc/inc/interfaces.lib.inc @@ -448,7 +448,12 @@ function configure_interface_hardware($ifs, $intf_details = null) $hwsettings = $config['system']; - if (strstr($ifs, 'vlan') || strstr($ifs, 'qinq') || strpos($ifs, '/') === 0) { + /* XXX this needs fixing, lots of devices are not capable */ + if ( + strstr($ifs, 'vlan') || strpos($ifs, 'qinq') === 0 || + strpos($ifs, 'lo') === 0 || strpos($ifs, 'vxlan') === 0 || + strpos($ifs, 'ipsec') === 0 || strpos($ifs, '/') === 0 + ) { /* skip checksumming */ return; } diff --git a/src/etc/rc.bootup b/src/etc/rc.bootup index 5f3fed68a..c034c6ee0 100755 --- a/src/etc/rc.bootup +++ b/src/etc/rc.bootup @@ -87,6 +87,7 @@ system_hosts_generate(true); system_syslog_start(true); filter_configure_sync(true, false); /* apply default policy before interface setup */ +interfaces_hardware(true); interfaces_configure(true); system_resolvconf_generate(true); filter_configure_sync(true);