mirror of
https://github.com/pfsense/pfsense.git
synced 2025-10-26 11:38:35 +00:00
Fix "disable checksum offloading", and some other bugs with certain combinations of options while here.
This commit is contained in:
parent
233405d75a
commit
a7c6604c06
@ -866,34 +866,40 @@ function enable_hardware_offloading($interface) {
|
||||
if(stristr($interface,"lnc"))
|
||||
return;
|
||||
|
||||
if(isset($config['system']['do_not_use_nic_microcode']))
|
||||
return;
|
||||
|
||||
/* translate wan, lan, opt -> real interface if needed */
|
||||
$int = filter_translate_type_to_real_interface($interface);
|
||||
if($int <> "")
|
||||
$interface = $int;
|
||||
if($int <> "") $interface = $int;
|
||||
$int_family = preg_split("/[0-9]+/", $int);
|
||||
$options = strtolower(`/sbin/ifconfig {$interface} | grep options`);
|
||||
$options = strtolower(`/sbin/ifconfig -m {$interface} | grep capabilities`);
|
||||
$supported_ints = array('fxp');
|
||||
if (in_array($int_family, $supported_ints))
|
||||
if (in_array($int_family, $supported_ints)) {
|
||||
if(isset($config['system']['do_not_use_nic_microcode']))
|
||||
continue;
|
||||
mwexec("/sbin/ifconfig {$interface} link0");
|
||||
}
|
||||
|
||||
if($config['system']['disablechecksumoffloading'])
|
||||
/* skip vlans for checksumming and polling */
|
||||
if(stristr($interface, "vlan"))
|
||||
return;
|
||||
|
||||
if(stristr($options, "txcsum") == true)
|
||||
mwexec("/sbin/ifconfig {$interface} txcsum 2>/dev/null");
|
||||
|
||||
if(stristr($options, "rxcsum") == true)
|
||||
mwexec("/sbin/ifconfig {$interface} rxcsum 2>/dev/null");
|
||||
if($config['system']['disablechecksumoffloading']) {
|
||||
if(stristr($options, "txcsum") == true)
|
||||
mwexec("/sbin/ifconfig {$interface} -txcsum 2>/dev/null");
|
||||
if(stristr($options, "rxcsum") == true)
|
||||
mwexec("/sbin/ifconfig {$interface} -rxcsum 2>/dev/null");
|
||||
} else {
|
||||
if(stristr($options, "txcsum") == true)
|
||||
mwexec("/sbin/ifconfig {$interface} txcsum 2>/dev/null");
|
||||
if(stristr($options, "rxcsum") == true)
|
||||
mwexec("/sbin/ifconfig {$interface} rxcsum 2>/dev/null");
|
||||
}
|
||||
|
||||
/* if the NIC supports polling *AND* it is enabled in the GUI */
|
||||
if(interface_supports_polling($interface)) {
|
||||
$polling = isset($config['system']['polling']);
|
||||
if($polling) {
|
||||
mwexec("sysctl kern.polling.enable=1");
|
||||
mwexec("/sbin/ifconfig {$interface} polling 2>/dev/null");
|
||||
mwexec("/sbin/ifconfig {$interface} polling 2>/dev/null");
|
||||
} else {
|
||||
mwexec("sysctl kern.polling.enable=0");
|
||||
}
|
||||
|
||||
@ -98,8 +98,10 @@ if ($_POST) {
|
||||
|
||||
if($_POST['disablechecksumoffloading'] == "yes") {
|
||||
$config['system']['disablechecksumoffloading'] = $_POST['disablechecksumoffloading'];
|
||||
setup_microcode();
|
||||
} else {
|
||||
unset($config['system']['disablechecksumoffloading']);
|
||||
setup_microcode();
|
||||
}
|
||||
|
||||
write_config();
|
||||
@ -214,8 +216,8 @@ function enable_change(enable_over) {
|
||||
<td width="22%" valign="top" class="vncell">Hardware Checksum Offloading</td>
|
||||
<td width="78%" class="vtable">
|
||||
<input name="disablechecksumoffloading" type="checkbox" id="disablechecksumoffloading" value="yes" <?php if (isset($config['system']['disablechecksumoffloading'])) echo "checked"; ?> />
|
||||
<strong>Disable hardware checksum offload.</strong><br>
|
||||
This option will hardware assisted checksum offloading. FreeBSD sometimes has difficulties with certain drivers.
|
||||
<strong>Disable hardware checksum offload</strong><br>
|
||||
Checking this option will disable hardware checksum offloading. Checksum offloading is broken in some hardware, particularly some Realtek cards. Rarely, drivers may have problems with checksum offloading and some specific NICs.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user