Skip to content

Commit 999e94b

Browse files
authored
[snmp] make use of openHAB network configuration (openhab#17699)
* Network Signed-off-by: Leo Siepel <[email protected]>
1 parent b7380b5 commit 999e94b

File tree

1 file changed

+26
-6
lines changed
  • bundles/org.openhab.binding.snmp/src/main/java/org/openhab/binding/snmp/internal

1 file changed

+26
-6
lines changed

bundles/org.openhab.binding.snmp/src/main/java/org/openhab/binding/snmp/internal/SnmpServiceImpl.java

+26-6
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,27 @@
1313
package org.openhab.binding.snmp.internal;
1414

1515
import java.io.IOException;
16+
import java.net.InetAddress;
1617
import java.util.ArrayList;
18+
import java.util.HashMap;
1719
import java.util.HashSet;
1820
import java.util.List;
1921
import java.util.Map;
22+
import java.util.Objects;
2023
import java.util.Set;
2124

2225
import org.eclipse.jdt.annotation.NonNullByDefault;
2326
import org.eclipse.jdt.annotation.Nullable;
2427
import org.openhab.binding.snmp.internal.config.SnmpServiceConfiguration;
2528
import org.openhab.core.config.core.Configuration;
29+
import org.openhab.core.net.CidrAddress;
30+
import org.openhab.core.net.NetworkAddressChangeListener;
31+
import org.openhab.core.net.NetworkAddressService;
2632
import org.osgi.service.component.annotations.Activate;
2733
import org.osgi.service.component.annotations.Component;
2834
import org.osgi.service.component.annotations.Deactivate;
2935
import org.osgi.service.component.annotations.Modified;
36+
import org.osgi.service.component.annotations.Reference;
3037
import org.slf4j.Logger;
3138
import org.slf4j.LoggerFactory;
3239
import org.snmp4j.CommandResponder;
@@ -64,35 +71,42 @@
6471

6572
@NonNullByDefault
6673
@Component(configurationPid = "binding.snmp", service = SnmpService.class)
67-
public class SnmpServiceImpl implements SnmpService {
74+
public class SnmpServiceImpl implements SnmpService, NetworkAddressChangeListener {
6875
private final Logger logger = LoggerFactory.getLogger(SnmpServiceImpl.class);
6976

7077
private @Nullable Snmp snmp;
7178
private @Nullable DefaultUdpTransportMapping transport;
79+
private final NetworkAddressService networkAddressService;
7280

7381
private final List<CommandResponder> listeners = new ArrayList<>();
7482
private final Set<UserEntry> userEntries = new HashSet<>();
83+
private Map<String, Object> config = new HashMap<>();
7584

7685
@Activate
77-
public SnmpServiceImpl(Map<String, Object> config) {
86+
public SnmpServiceImpl(Map<String, Object> config, @Reference NetworkAddressService networkAddressService) {
7887
addProtocols();
7988
OctetString localEngineId = new OctetString(MPv3.createLocalEngineID());
8089
USM usm = new USM(SecurityProtocols.getInstance(), localEngineId, 0);
8190
SecurityModels.getInstance().addSecurityModel(usm);
82-
91+
this.networkAddressService = networkAddressService;
92+
networkAddressService.addNetworkAddressChangeListener(this);
8393
modified(config);
8494
}
8595

8696
@Modified
8797
protected void modified(Map<String, Object> config) {
98+
this.config = config;
8899
SnmpServiceConfiguration snmpCfg = new Configuration(config).as(SnmpServiceConfiguration.class);
89100
try {
90101
shutdownSnmp();
91102

92103
final DefaultUdpTransportMapping transport;
93104

94105
if (snmpCfg.port > 0) {
95-
transport = new DefaultUdpTransportMapping(new UdpAddress(snmpCfg.port), true);
106+
InetAddress inetAddress = Objects.requireNonNullElse(
107+
InetAddress.getByName(networkAddressService.getPrimaryIpv4HostAddress()),
108+
InetAddress.getLocalHost());
109+
transport = new DefaultUdpTransportMapping(new UdpAddress(inetAddress, snmpCfg.port), true);
96110
} else {
97111
transport = new DefaultUdpTransportMapping();
98112
}
@@ -109,7 +123,7 @@ protected void modified(Map<String, Object> config) {
109123
this.snmp = snmp;
110124
this.transport = transport;
111125

112-
logger.debug("initialized SNMP at {}", transport.getAddress());
126+
logger.info("Initialized SNMP service at {}", transport.getAddress());
113127
} catch (IOException e) {
114128
logger.warn("could not open SNMP instance on port {}: {}", snmpCfg.port, e.getMessage());
115129
}
@@ -121,7 +135,7 @@ public void deactivate() {
121135
try {
122136
shutdownSnmp();
123137
} catch (IOException e) {
124-
logger.info("could not end SNMP: {}", e.getMessage());
138+
logger.warn("Could not end SNMP service: {}", e.getMessage());
125139
}
126140
}
127141

@@ -222,4 +236,10 @@ public UserEntry(UsmUser user, OctetString engineId) {
222236
this.user = user;
223237
}
224238
}
239+
240+
@Override
241+
public void onChanged(List<CidrAddress> added, List<CidrAddress> removed) {
242+
logger.trace("SNMP reacting on network interface changes.");
243+
modified(this.config);
244+
}
225245
}

0 commit comments

Comments
 (0)