diff --git a/src/etc/inc/filter.lib.inc b/src/etc/inc/filter.lib.inc index 3733cba5e..0d9f2427d 100644 --- a/src/etc/inc/filter.lib.inc +++ b/src/etc/inc/filter.lib.inc @@ -393,19 +393,21 @@ function filter_core_rules_system($fw, $defaults) break; case "dhcp": $fw->registerFilterRule( - 5, - array('protocol' => 'udp', 'direction' => 'in', 'quick' => false, 'from_port' => 67, 'to_port' => 68, - '#ref' => "interfaces.php?if=" . $intf . "#type", - 'interface' => $intf, 'descr' => 'allow DHCP client on ' . $intfinfo['descr']), - $defaults['pass'] - ); - $fw->registerFilterRule( - 5, - array('protocol' => 'udp', 'direction' => 'out', 'quick' => false, 'from_port' => 68, 'to_port' => 67, + 1, + array('protocol' => 'udp', 'direction' => 'in', 'from_port' => 67, 'to_port' => 68, '#ref' => "interfaces.php?if=" . $intf . "#type", 'interface' => $intf, 'descr' => 'allow DHCP client on ' . $intfinfo['descr']), $defaults['pass'] ); + $dhcpv4_opts = [ + 'protocol' => 'udp','direction' => 'out', 'from_port' => 68, 'to_port' => 67, + '#ref' => "interfaces.php?if=" . $intf . "#type", + 'interface' => $intf, 'descr' => 'allow DHCP client on ' . $intfinfo['descr'], + ]; + if (isset($intfinfo['dhcpvlanprio'])) { + $dhcpv4_opts['set-prio'] = $intfinfo['dhcpvlanprio']; + } + $fw->registerFilterRule(1, $dhcpv4_opts, $defaults['pass']); break; default: if (isset($config['dhcpd'][$intf]['enable'])) { diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 6bd2b821c..72c0546dc 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -3149,6 +3149,10 @@ EOD; $dhclientconf .= " reject {$wancfg['dhcprejectfrom']};\n"; } + if (isset($wancfg['dhcpvlanprio'])) { + $dhclientconf .= " vlan-pcp {$wancfg['dhcpvlanprio']};\n"; + } + $dhclientconf .= "}\n"; // DHCP Config File Advanced @@ -3255,6 +3259,9 @@ function DHCP_Config_File_Advanced($interface, $wancfg, $wanif) if (is_ipaddrv4($wancfg['dhcprejectfrom'])) { $dhclientconf .= "\treject {$wancfg['dhcprejectfrom']};\n"; } + if (isset($wancfg['dhcpvlanprio'])) { + $dhclientconf .= "\tvlan-pcp {$wancfg['dhcpvlanprio']};\n"; + } $dhclientconf .= "}\n"; $dhclientconf = DHCP_Config_File_Substitutions($wancfg, $wanif, $dhclientconf); diff --git a/src/www/interfaces.php b/src/www/interfaces.php index c69b07891..a58e14133 100644 --- a/src/www/interfaces.php +++ b/src/www/interfaces.php @@ -395,6 +395,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { 'dhcp6vlanprio', 'dhcphostname', 'dhcprejectfrom', + 'dhcpvlanprio', 'disablechecksumoffloading', 'disablelargereceiveoffloading', 'disablesegmentationoffloading', @@ -1073,6 +1074,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { if (empty($pconfig['dhcpoverridemtu'])) { $new_config['dhcphonourmtu'] = true; } + if (isset($pconfig['dhcpvlanprio']) && $pconfig['dhcpvlanprio'] !== '') { + $new_config['dhcpvlanprio'] = $pconfig['dhcpvlanprio']; + } break; case "ppp": $new_config['if'] = $pconfig['type'] . $pconfig['ptpid']; @@ -2302,6 +2306,22 @@ include("head.inc"); + + + + + + +