From 93b2c459855b82920decea1a2db080b0ae09b267 Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 14 Jul 2010 11:41:00 -0400 Subject: Add NAT-PMP support to UPnP. Fixes #262. Thanks to Salvatore LaMendola for the patch. --- usr/local/pkg/miniupnpd.inc | 6 ++++++ usr/local/pkg/miniupnpd.xml | 34 +++++++++++++++++++++++----------- usr/local/www/fbegin.inc | 4 ++-- usr/local/www/status_upnp.php | 2 +- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/usr/local/pkg/miniupnpd.inc b/usr/local/pkg/miniupnpd.inc index 8d45bad..2da8c93 100644 --- a/usr/local/pkg/miniupnpd.inc +++ b/usr/local/pkg/miniupnpd.inc @@ -85,6 +85,8 @@ } function validate_form_miniupnpd($post, $input_errors) { + if($post['enable'] && (!$post['enable_upnp'] && !$post['enable_natpmp'])) + $input_errors[] = 'At least one of \'UPnP\' or \'NAT-PMP\' must be allowed'; if($post['iface_array']) foreach($post['iface_array'] as $iface) if($iface == 'wan') @@ -223,6 +225,10 @@ if($upnp_config['upnpqueue']) $config_text .= "queue={$upnp_config['upnpqueue']}\n"; + /* Allow UPnP or NAT-PMP as requested */ + $config_text .= "enable_upnp=" . ( $upnp_config['enable_upnp'] ? "yes\n" : "no\n" ); + $config_text .= "enable_natpmp=" . ( $upnp_config['enable_natpmp'] ? "yes\n" : "no\n" ); + /* write out the configuration */ upnp_write_config($config_file, $config_text); diff --git a/usr/local/pkg/miniupnpd.xml b/usr/local/pkg/miniupnpd.xml index 7d38022..03bdddf 100644 --- a/usr/local/pkg/miniupnpd.xml +++ b/usr/local/pkg/miniupnpd.xml @@ -1,13 +1,13 @@ - Services: UPnP + Services: UPnP & NAT-PMP miniupnpd - 20070521 + 20100712 Change /usr/local/pkg/miniupnpd.inc - UPnP - Set UPnP settings such as interfaces to listen on. + UPnP & NAT-PMP + Set UPnP & NAT-PMP settings such as interfaces to listen on.
Services
/pkg_edit.php?xml=miniupnpd.xml&id=0
@@ -33,17 +33,29 @@ - UPnP Settings + UPnP & NAT-PMP Settings listtopic - iface_array,overridewanip,upnpqueue,logpackets,sysuptime,permdefault,permuser1,permuser2,permuser3,permuser4 + enable_upnp,enable_natpmp,iface_array,overridewanip,upnpqueue,logpackets,sysuptime,permdefault,permuser1,permuser2,permuser3,permuser4 - Enable UPnP + Enable UPnP & NAT-PMP enable checkbox - iface_array,overridewanip,upnpqueue,logpackets,sysuptime,permdefault,permuser1,permuser2,permuser3,permuser4 + enable_upnp,enable_natpmp,iface_array,overridewanip,upnpqueue,logpackets,sysuptime,permdefault,permuser1,permuser2,permuser3,permuser4 + Allow UPnP Port Mapping + enable_upnp + checkbox + This protocol is often used by Microsoft-compatible systems. + + + Allow NAT-PMP Port Mapping + enable_natpmp + checkbox + This protocol is often used by Apple-compatible systems. + + Interfaces (generally LAN) iface_array lan @@ -74,17 +86,17 @@ input - Log packets handled by UPnP rules? + Log packets handled by UPnP & NAT-PMP rules? logpackets checkbox - Use system uptime instead of UPnP service uptime? + Use system uptime instead of UPnP & NAT-PMP service uptime? sysuptime checkbox - By default deny access to UPnP? + By default deny access to UPnP & NAT-PMP? permdefault checkbox diff --git a/usr/local/www/fbegin.inc b/usr/local/www/fbegin.inc index 8552fbc..488a313 100755 --- a/usr/local/www/fbegin.inc +++ b/usr/local/www/fbegin.inc @@ -131,7 +131,7 @@ if(count($config['interfaces']) > 1) { /* no use for UPnP in single-interface deployments remove to reduce user confusion */ - $services_menu[] = array("UPnP", "/pkg_edit.php?xml=miniupnpd.xml&id=0"); + $services_menu[] = array("UPnP & NAT-PMP", "/pkg_edit.php?xml=miniupnpd.xml&id=0"); } $services_menu[] = array("OpenNTPD", "/pkg_edit.php?xml=openntpd.xml&id=0"); $services_menu[] = array("Wake on LAN", "/services_wol.php"); @@ -166,7 +166,7 @@ $status_menu[] = array("Services", "/status_services.php"); $status_menu[] = array("System Logs", "/diag_logs.php"); $status_menu[] = array("Traffic Graph", "/status_graph.php?if=wan"); if(count($config['interfaces']) > 1) - $status_menu[] = array("UPnP", "/status_upnp.php"); + $status_menu[] = array("UPnP & NAT-PMP", "/status_upnp.php"); $ifentries = get_configured_interface_with_descr(); foreach ($ifentries as $ent => $entdesc) { if (is_array($config['interfaces'][$ent]['wireless']) && diff --git a/usr/local/www/status_upnp.php b/usr/local/www/status_upnp.php index 3cc4755..024633f 100644 --- a/usr/local/www/status_upnp.php +++ b/usr/local/www/status_upnp.php @@ -55,7 +55,7 @@ exec("/sbin/pfctl -aminiupnpd -sn", $rdr_entries, $pf_ret); $now = time(); $year = date("Y"); -$pgtitle = array("Status","UPnP Status"); +$pgtitle = array("Status","UPnP & NAT-PMP Status"); include("head.inc"); ?> -- cgit v1.1