Skip to content

Commit 784032c

Browse files
authored
[fix] Ignore duplicate IP addresses in network config
Some valid OpenWrt configurations may result in the agent seeing two times the same IP address and generating an invalid NetJSON NetworkMonitoring object, this patch fixes this issue.
1 parent 8856b24 commit 784032c

2 files changed

Lines changed: 44 additions & 6 deletions

File tree

openwisp-monitoring/files/lib/openwisp-monitoring/interfaces.lua

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,18 @@ function interfaces.get_addresses(name)
104104
for _, interface in pairs(interface_list) do
105105
if interface['l3_device'] == name then
106106
for _, address in pairs(interface['ipv4-address']) do
107-
table.insert(addresses_list, address['address'])
108-
local new_address = interfaces.new_address_array(address, interface, 'ipv4')
109-
table.insert(addresses, new_address)
107+
if not utils.has_value(addresses_list, address['address']) then
108+
table.insert(addresses_list, address['address'])
109+
local new_address = interfaces.new_address_array(address, interface, 'ipv4')
110+
table.insert(addresses, new_address)
111+
end
110112
end
111113
for _, address in pairs(interface['ipv6-address']) do
112-
table.insert(addresses_list, address['address'])
113-
local new_address = interfaces.new_address_array(address, interface, 'ipv6')
114-
table.insert(addresses, new_address)
114+
if not utils.has_value(addresses_list, address['address']) then
115+
table.insert(addresses_list, address['address'])
116+
local new_address = interfaces.new_address_array(address, interface, 'ipv6')
117+
table.insert(addresses, new_address)
118+
end
115119
end
116120
end
117121
end

openwisp-monitoring/tests/test_files/interface_data.lua

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,40 @@ test_data.interface_data = {
8080
up = true,
8181
updated = {"addresses"},
8282
uptime = 773875
83+
},{
84+
autostart = true,
85+
available = true,
86+
data = {leasetime = 600},
87+
delegation = true,
88+
device = "eth1",
89+
["dns-search"] = {},
90+
["dns-server"] = {"10.0.2.1"},
91+
dns_metric = 0,
92+
dynamic = false,
93+
inactive = {
94+
["dns-search"] = {},
95+
["dns-server"] = {},
96+
["ipv4-address"] = {},
97+
["ipv6-address"] = {},
98+
neighbors = {},
99+
route = {}
100+
},
101+
interface = "mgmnt",
102+
["ipv4-address"] = {{address = "10.0.2.4", mask = 24}},
103+
["ipv6-address"] = {{address = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"}},
104+
["ipv6-prefix"] = {},
105+
["ipv6-prefix-assignment"] = {},
106+
l3_device = "eth1",
107+
metric = 0,
108+
neighbors = {},
109+
pending = false,
110+
proto = "dhcp",
111+
route = {
112+
{mask = 0, nexthop = "10.0.2.1", source = "10.0.2.4/32", target = "0.0.0.0"}
113+
},
114+
up = true,
115+
updated = {"addresses", "routes", "data"},
116+
uptime = 132
83117
}, {
84118
autostart = true,
85119
available = true,

0 commit comments

Comments
 (0)