* Copyright (c) 2010 Seth Mos * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgment: * "This product includes software developed by the pfSense Project * for use in the pfSense software distribution. (http://www.pfsense.org/). * * 4. The names "pfSense" and "pfSense Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * coreteam@pfsense.org. * * 5. Products derived from this software may not be called "pfSense" * nor may "pfSense" appear in their names without prior written * permission of the Electric Sheep Fencing, LLC. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * * "This product includes software developed by the pfSense Project * for use in the pfSense software distribution (http://www.pfsense.org/). * * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * * ==================================================================== * */ /* pfSense_MODULE: dhcpv6relay */ ##|+PRIV ##|*IDENT=page-services-dhcpv6relay ##|*NAME=Services: DHCPv6 Relay page ##|*DESCR=Allow access to the 'Services: DHCPv6 Relay' page. ##|*MATCH=services_dhcpv6_relay.php* ##|-PRIV require("guiconfig.inc"); function filterDestinationServers(array $destinationServers) { return array_unique( array_filter($destinationServers) ); } $pconfig['enable'] = isset($config['dhcrelay6']['enable']); if (empty($config['dhcrelay6']['interface'])) { $pconfig['interface'] = array(); } else { $pconfig['interface'] = explode(",", $config['dhcrelay6']['interface']); } $pconfig['server'] = filterDestinationServers( explode(',', $config['dhcrelay6']['server']) ); $pconfig['agentoption'] = isset($config['dhcrelay6']['agentoption']); $iflist = array_intersect_key( get_configured_interface_with_descr(), array_flip( array_filter( array_keys(get_configured_interface_with_descr()), function($if) { return is_ipaddrv6(get_interface_ipv6($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['dhcpdv6'])) { foreach ($config['dhcpdv6'] as $dhcp) { if (isset($dhcp['enable']) && isset($config['interfaces'][$dhcpif]['enable'])) { $dhcpd_enabled = true; break; } } } if ($_POST) { unset($input_errors); if ($_POST['server']) $_POST['server'] = filterDestinationServers($_POST['server']); $pconfig = $_POST; /* input validation */ if ($_POST['enable']) { $reqdfields = explode(" ", "server interface"); $reqdfieldsn = array(gettext("Destination Server"), gettext("Interface")); do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); if ($_POST['server']) { foreach ($_POST['server'] as $srv) { if (!is_ipaddrv6($srv)) $input_errors[] = gettext("A valid Destination Server IPv6 address must be specified."); } } } if (!$input_errors) { $config['dhcrelay6']['enable'] = $_POST['enable'] ? true : false; $config['dhcrelay6']['interface'] = implode(",", $_POST['interface']); $config['dhcrelay6']['agentoption'] = $_POST['agentoption'] ? true : false; $config['dhcrelay6']['server'] = $_POST['server']; write_config(); $retval = 0; $retval = services_dhcrelay6_configure(); $savemsg = get_std_save_message($retval); } } $closehead = false; $pgtitle = array(gettext("Services"), gettext("DHCPv6 Relay")); $shortcut_section = "dhcp6"; include("head.inc"); if ($dhcpd_enabled) { echo '