From df8ebedc4b0efd944e4be810abaf3e7e919e7904 Mon Sep 17 00:00:00 2001 From: skrude61 Date: Tue, 20 Sep 2016 10:26:26 +0200 Subject: Allow snmpd to bind to multiple interfaces. --- src/usr/local/www/services_snmp.php | 46 ++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 13 deletions(-) (limited to 'src/usr/local/www/services_snmp.php') diff --git a/src/usr/local/www/services_snmp.php b/src/usr/local/www/services_snmp.php index 6c4f0b2..66caf4f 100644 --- a/src/usr/local/www/services_snmp.php +++ b/src/usr/local/www/services_snmp.php @@ -71,7 +71,11 @@ $pconfig['hostres'] = isset($config['snmpd']['modules']['hostres']); $pconfig['bridge'] = isset($config['snmpd']['modules']['bridge']); $pconfig['ucd'] = isset($config['snmpd']['modules']['ucd']); $pconfig['regex'] = isset($config['snmpd']['modules']['regex']); -$pconfig['bindip'] = $config['snmpd']['bindip']; +if (empty($config['snmpd']['bindip'])) { + $pconfig['bindip'] = array(); +} else { + $pconfig['bindip'] = explode(",", $config['snmpd']['bindip']); +} if ($_POST) { @@ -151,7 +155,9 @@ if ($_POST) { $config['snmpd']['modules']['bridge'] = $_POST['bridge'] ? true : false; $config['snmpd']['modules']['ucd'] = $_POST['ucd'] ? true : false; $config['snmpd']['modules']['regex'] = $_POST['regex'] ? true : false; - $config['snmpd']['bindip'] = $_POST['bindip']; + if (is_array($_POST['bindip']) && !empty($_POST['bindip'])) { + $config['snmpd']['bindip'] = implode(",", $_POST['bindip']); + } write_config(); @@ -161,17 +167,28 @@ if ($_POST) { } } -function build_iplist() { - $listenips = get_possible_listen_ips(); - $iplist = array(); - $iplist[''] = 'All'; +function build_if_list($selectedifs) { + $interface_addresses = get_possible_listen_ips(true); + $iflist = array('options' => array(), 'selected' => array()); + + $iflist['options']['all'] = gettext("All"); + if (empty($selectedifs) || empty($selectedifs[0]) || in_array("all", $selectedifs)) { + array_push($iflist['selected'], "all"); + } + + foreach ($interface_addresses as $laddr => $ldescr) { + if (is_ipaddr(get_interface_ip($laddr))) { + $iflist['options'][$laddr] = htmlspecialchars($ldescr); + } - foreach ($listenips as $lip => $ldescr) { - $iplist[$lip] = $ldescr; + if ($selectedifs && in_array($laddr, $selectedifs)) { + array_push($iflist['selected'], $laddr); + } } - unset($listenips); - return($iplist); + unset($interface_addresses); + + return($iflist); } $pgtitle = array(gettext("Services"), gettext("SNMP")); @@ -325,11 +342,14 @@ $form->add($section); $section = new Form_Section('Interface Binding'); +$iflist = build_if_list($pconfig['bindip']); + $section->addInput(new Form_Select( 'bindip', - 'Bind Interface', - $pconfig['bindip'], - build_iplist() + 'Bind Interfaces', + $iflist['selected'], + $iflist['options'], + true )); $form->add($section); -- cgit v1.1