summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErmal Luci <eri@pfsense.org>2009-01-28 18:13:50 +0000
committerErmal Luci <eri@pfsense.org>2009-01-28 18:13:50 +0000
commit41997fbbeb2b5c50507ad18fa4ea2bb6fbea4ee2 (patch)
tree19bbf8897e0a0c11faf7f9d5c20f912b233c750b
parentf668d1597294dd35244cd4dc0d76626b58336b2d (diff)
downloadpfsense-41997fbbeb2b5c50507ad18fa4ea2bb6fbea4ee2.zip
pfsense-41997fbbeb2b5c50507ad18fa4ea2bb6fbea4ee2.tar.gz
Add the GUI part for IGMPproxy that has been on the snapshots for a while.
-rw-r--r--etc/inc/services.inc55
-rwxr-xr-xetc/rc.bootup5
-rwxr-xr-xusr/local/www/fbegin.inc1
-rwxr-xr-xusr/local/www/status_services.php16
4 files changed, 76 insertions, 1 deletions
diff --git a/etc/inc/services.inc b/etc/inc/services.inc
index ea7e82f..bd1e75b 100644
--- a/etc/inc/services.inc
+++ b/etc/inc/services.inc
@@ -329,6 +329,61 @@ EOD;
return 0;
}
+function services_igmpproxy_configure() {
+ global $config, $g;
+
+ $iflist = get_configured_interface_list();
+
+ /* kill any running igmpproxy */
+ killbyname("igmpproxy");
+
+ if (!is_array($config['igmpproxy']['igmpentry']))
+ return 1;
+
+ $igmpconf = <<<EOD
+
+##------------------------------------------------------
+## Enable Quickleave mode (Sends Leave instantly)
+##------------------------------------------------------
+quickleave
+
+EOD;
+
+ foreach ($config['igmpproxy']['igmpentry'] as $igmpcf) {
+ unset($iflist[$igmpcf['ifname']]);
+ $realif = get_real_interface($igmpcf['ifname']);
+ if (empty($igmpcf['threshold']))
+ $threshld = 1;
+ else
+ $threshld = $igmpcf['threshold'];
+ $igmpconf .= "phyint {$realif} {$igmpcf['type']} ratelimit 0 threshold {$threshld}\n";
+
+ if ($igmpcf['address'] <> "") {
+ $item = explode(" ", $igmpcf['address']);
+ foreach($item as $iww)
+ $igmpconf .= "altnet {$iww}\n";
+ }
+ $igmpconf .= "\n";
+ }
+ foreach ($iflist as $ifn) {
+ $realif = get_real_interface($ifn);
+ $igmpconf .= "phyint {$realif} disabled\n";
+ }
+
+ $igmpfl = fopen($g['tmp_path'] . "/igmpproxy.conf", "w");
+ if (!$igmpfl) {
+ log_error("Could not write Igmpproxy configuration file!");
+ return;
+ }
+ fwrite($igmpfl, $igmpconf);
+ fclose($igmpfl);
+
+ mwexec("/usr/local/sbin/igmpproxy -c " . $g['tmp_path'] . "/igmpproxy.conf");
+ log_error("Started Igmpproxy service sucsesfully.");
+
+ return 0;
+}
+
function interfaces_staticarp_configure($if) {
global $config, $g;
if(isset($config['system']['developerspew'])) {
diff --git a/etc/rc.bootup b/etc/rc.bootup
index 6229910..53bcf1f 100755
--- a/etc/rc.bootup
+++ b/etc/rc.bootup
@@ -279,6 +279,9 @@
if($kern_hz == "1000")
mwexec("sysctl net.inet.tcp.rexmit_min=30");
+ /* start the igmpproxy daemon
+ services_igmpproxy_configure();
+
/* start the upnp daemon if it is enabled */
upnp_start();
@@ -288,4 +291,4 @@
unlink("{$g['varrun_path']}/booting");
$g['booting'] = FALSE;
-?> \ No newline at end of file
+?>
diff --git a/usr/local/www/fbegin.inc b/usr/local/www/fbegin.inc
index 68e01bb..b465ad9 100755
--- a/usr/local/www/fbegin.inc
+++ b/usr/local/www/fbegin.inc
@@ -186,6 +186,7 @@ if ($_REQUEST['noticeaction'] == 'acknowledge') {
output_menu_item("/services_dhcp.php", "DHCP Server");
?>
<?=output_menu_item("/services_dyndns.php", "Dynamic DNS");?>
+ <?=output_menu_item("/services_igmpproxy.php", "IGMP proxy");?>
<?=output_menu_item("/load_balancer_pool.php", "Load Balancer");?>
<?=output_menu_item("/pkg_edit.php?xml=olsrd.xml&id=0", "OLSR");?>
<?=output_menu_item("/vpn_pppoe.php", "PPPoE Server");?>
diff --git a/usr/local/www/status_services.php b/usr/local/www/status_services.php
index c7e9891..a7eef1c 100755
--- a/usr/local/www/status_services.php
+++ b/usr/local/www/status_services.php
@@ -64,6 +64,9 @@ if($_GET['mode'] == "restartservice" and $_GET['service']) {
case 'dhcpd':
services_dhcpd_configure();
break;
+ case 'igmpproxy':
+ services_igmpproxy_configure();
+ break;
case 'miniupnpd':
upnp_action('restart');
break;
@@ -107,6 +110,9 @@ if($_GET['mode'] == "startservice" and $_GET['service']) {
case 'dhcpd':
services_dhcpd_configure();
break;
+ case 'igmpproxy':
+ services_igmpproxy_configure();
+ break;
case 'miniupnpd':
upnp_action('start');
break;
@@ -154,6 +160,9 @@ if($_GET['mode'] == "stopservice" && $_GET['service']) {
case 'dnsmasq':
killbypid("{$g['varrun_path']}/dnsmasq.pid");
break;
+ case 'igmpproxy':
+ killbyname("igmpproxy");
+ break;
case 'miniupnpd':
upnp_action('stop');
break;
@@ -286,6 +295,13 @@ if(isset($config['proxyarp']['proxyarpnet'])) {
unset($pconfig);
}
+if (count($config['igmpproxy']['igmpentry']) > 0) {
+ $pconfig['name'] = "igmpproxy";
+ $pconfig['descritption'] = "IGMP proxy";
+ $services[] = $pconfig;
+ unset($pconfig);
+}
+
if($config['installedpackages']['miniupnpd']['config'][0]['enable']) {
$pconfig['name'] = "miniupnpd";
$pconfig['description'] = gettext("UPnP Service");
OpenPOWER on IntegriCloud