* All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ ##|+PRIV ##|*IDENT=page-services-dhcprelay ##|*NAME=Services: DHCP Relay ##|*DESCR=Allow access to the 'Services: DHCP Relay' page. ##|*MATCH=services_dhcp_relay.php* ##|-PRIV require_once("guiconfig.inc"); require_once("filter.inc"); $pconfig['enable'] = isset($config['dhcrelay']['enable']); if (empty($config['dhcrelay']['interface'])) { $pconfig['interface'] = array(); } else { $pconfig['interface'] = explode(",", $config['dhcrelay']['interface']); } $pconfig['agentoption'] = isset($config['dhcrelay']['agentoption']); $pconfig['server'] = $config['dhcrelay']['server']; $iflist = array_intersect_key( get_configured_interface_with_descr(), array_flip( array_filter( array_keys(get_configured_interface_with_descr()), function($if) { return is_ipaddr(get_interface_ip($if)); } ) ) ); /* set the enabled flag which will tell us if DHCP server is enabled * on any interface. We will use this to disable dhcp-relay since * the two are not compatible with each other. */ $dhcpd_enabled = false; if (is_array($config['dhcpd'])) { foreach ($config['dhcpd'] as $dhcpif => $dhcp) { if (isset($dhcp['enable']) && isset($config['interfaces'][$dhcpif]['enable'])) { $dhcpd_enabled = true; break; } } } if ($_POST) { unset($input_errors); $pconfig = $_POST; /* input validation */ if ($_POST['enable']) { $reqdfields = explode(" ", "interface"); $reqdfieldsn = array(gettext("Interface")); do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); $svrlist = ''; for ($idx=0; $idxaddInput(new Form_Checkbox( 'enable', 'Enable', 'Enable DHCP relay on interface', $pconfig['enable'] )); $section->addInput(new Form_Select( 'interface', '*Interface(s)', $pconfig['interface'], $iflist, true ))->setHelp('Interfaces without an IP address will not be shown.'); $section->addInput(new Form_Checkbox( 'agentoption', '', 'Append circuit ID and agent ID to requests', $pconfig['agentoption'] ))->setHelp( 'If this is checked, the DHCP relay will append the circuit ID (%s interface number) and the agent ID to the DHCP request.', $g['product_name'] ); $counter = 0; foreach (explode(',', $pconfig['server']) as $server) { $group = new Form_Group($counter == 0 ? gettext("*Destination server"):''); $group->addClass('repeatable'); $group->add(new Form_IpAddress( 'server' . $counter, 'Destination server', $server, 'V4' ))->setWidth(4) ->setHelp('This is the IPv4 address of the server to which DHCP requests are relayed.'); $group->add(new Form_Button( 'deleterow' . $counter, 'Delete', null, 'fa-trash' ))->addClass('btn-warning'); $section->add($group); $counter++; } $form->add($section); $form->addGlobal(new Form_Button( 'addrow', "Add server", null, 'fa-plus' ))->addClass('btn-success addbtn'); print $form; ?>