diff --git a/etc/inc/pfsense-utils.inc b/etc/inc/pfsense-utils.inc index e3eef07354..8d2e894666 100644 --- a/etc/inc/pfsense-utils.inc +++ b/etc/inc/pfsense-utils.inc @@ -215,6 +215,27 @@ function enable_hardware_offloading($interface) { pfSense_interface_capabilities($interface, IFCAP_RXCSUM); } + if($config['system']['disablesegmentationoffloading']) { + if (isset($options['encaps']['tso4'])) + pfSense_interface_capabilities($interface, -IFCAP_TSO); + if (isset($options['encaps']['tso6'])) + pfSense_interface_capabilities($interface, -IFCAP_TSO); + } else { + if (isset($options['caps']['tso4'])) + pfSense_interface_capabilities($interface, IFCAP_TSO); + if (isset($options['caps']['tso6'])) + pfSense_interface_capabilities($interface, IFCAP_TSO); + } + + if($config['system']['disablelargereceiveoffloading']) { + if (isset($options['encaps']['lro'])) + pfSense_interface_capabilities($interface, -IFCAP_LRO); + } else { + if (isset($options['caps']['lro'])) + pfSense_interface_capabilities($interface, IFCAP_LRO); + } + + /* if the NIC supports polling *AND* it is enabled in the GUI */ $polling = isset($config['system']['polling']); if($polling && isset($options['caps']['polling'])) diff --git a/usr/local/www/system_advanced_network.php b/usr/local/www/system_advanced_network.php index d744a47dff..6c67e304d6 100644 --- a/usr/local/www/system_advanced_network.php +++ b/usr/local/www/system_advanced_network.php @@ -54,6 +54,8 @@ $pconfig['ipv6allow'] = isset($config['system']['ipv6allow']); $pconfig['polling_enable'] = isset($config['system']['polling']); $pconfig['sharednet'] = $config['system']['sharednet']; $pconfig['disablechecksumoffloading'] = isset($config['system']['disablechecksumoffloading']); +$pconfig['disablesegmentationoffloading'] = isset($config['system']['disablesegmentationoffloading']); +$pconfig['disablelargereceiveoffloading'] = isset($config['system']['disablelargereceiveoffloading']); $pconfig['flowtable'] = false; $pconfig['flowtable'] = isset($config['system']['flowtable']); @@ -111,12 +113,24 @@ if ($_POST) { if($_POST['disablechecksumoffloading'] == "yes") { $config['system']['disablechecksumoffloading'] = $_POST['disablechecksumoffloading']; - setup_microcode(); } else { unset($config['system']['disablechecksumoffloading']); - setup_microcode(); } + if($_POST['disablesegmentationoffloading'] == "yes") { + $config['system']['disablesegmentationoffloading'] = $_POST['disablesegmentationoffloading']; + } else { + unset($config['system']['disablesegmentationoffloading']); + } + + if($_POST['disablelargereceiveoffloading'] == "yes") { + $config['system']['disablelargereceiveoffloading'] = $_POST['disablelargereceiveoffloading']; + } else { + unset($config['system']['disablelargereceiveoffloading']); + } + + setup_microcode(); + // Write out configuration (config.xml) write_config(); @@ -234,7 +248,23 @@ function enable_change(enable_over) {
- + + + + + /> +
+ + + + + + + /> +
+ + +