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/etc/inc/services.inc | 24 +++++++++++++------ src/usr/local/www/services_snmp.php | 46 ++++++++++++++++++++++++++----------- 2 files changed, 50 insertions(+), 20 deletions(-) diff --git a/src/etc/inc/services.inc b/src/etc/inc/services.inc index 66f1062..4592de8 100644 --- a/src/etc/inc/services.inc +++ b/src/etc/inc/services.inc @@ -2379,24 +2379,34 @@ begemotSnmpdCommunityDisable = 1 EOD; - $bind_to_ip = "0.0.0.0"; + $bind_to_ips = array(); if (isset($config['snmpd']['bindip'])) { - if (is_ipaddr($config['snmpd']['bindip'])) { - $bind_to_ip = $config['snmpd']['bindip']; - } else { - $if = get_real_interface($config['snmpd']['bindip']); - if (does_interface_exist($if)) { - $bind_to_ip = get_interface_ip($config['snmpd']['bindip']); + foreach (explode(",", $config['snmpd']['bindip']) as $bind_to_ip) { + if (is_ipaddr($bind_to_ip)) { + $bind_to_ips[] = $bind_to_ip; + } else { + $if = get_real_interface($bind_to_ip); + if (does_interface_exist($if)) { + $bindip = get_interface_ip($bind_to_ip); + if (is_ipaddr($bindip)) { + $bind_to_ips[] = $bindip; + } + } } } } + if (!count($bind_to_ips)) { + $bind_to_ips = array("0.0.0.0"); + } if (is_port($config['snmpd']['pollport'])) { + foreach ($bind_to_ips as $bind_to_ip) { $snmpdconf .= << 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