OVS arping script improvements
Change-Id: I5c5780bc8ef7913503f2244435bbf072c721e5aa
Related-PROD: PROD-29951
diff --git a/telegraf/files/script/check_ovs_arping.py b/telegraf/files/script/check_ovs_arping.py
index 099532f..9a650be 100644
--- a/telegraf/files/script/check_ovs_arping.py
+++ b/telegraf/files/script/check_ovs_arping.py
@@ -127,7 +127,10 @@
time_left -= time_received - time_start
if not srecv[0]:
return packets
- data = soc.recv(PACKETSIZE)
+ try:
+ data = soc.recv(PACKETSIZE)
+ except OSError:
+ return packets
if len(data) == PACKETSIZE and ord(data[21]) == ARPREPLY:
ip_to = data[38:42]
if ip_to == ip_bin:
@@ -142,10 +145,16 @@
def make_subnet_arping(namespace, interface, mac_sedr, ip_sedr, ip_recvrs):
with Namespace(nsname=namespace):
soc = socket.socket(socket.PF_PACKET, socket.SOCK_RAW)
- soc.bind((interface, TYPEFRAME))
+ try:
+ soc.bind((interface, TYPEFRAME))
+ except OSError:
+ return set(), ip_recvrs
for ip_recvr in ip_recvrs:
bc_packet = ARPSendPacket('ff:ff:ff:ff:ff:ff', mac_sedr, ip_sedr, mac_sedr, ip_recvr, '00:00:00:00:00:00')
- soc.send(bc_packet.__str__())
+ try:
+ soc.send(bc_packet.__str__())
+ except OSError:
+ return set(), ip_recvrs
packets = recv_arp_packets(soc, socket.inet_aton(ip_sedr), ip_recvrs, TIMEOUT)
res_addrs = set()
for packet in packets:
@@ -160,7 +169,10 @@
str_ips.add(ip_str)
mac_str = ':'.join(x.encode('hex') for x in addr[1])
uc_packet = ARPSendPacket(mac_str, mac_sedr, ip_sedr, mac_sedr, ip_str, mac_str)
- soc.send(uc_packet.__str__())
+ try:
+ soc.send(uc_packet.__str__())
+ except OSError:
+ return set(), ip_recvrs
packets = recv_arp_packets(soc, socket.inet_aton(ip_sedr), str_ips, TIMEOUT)
for packet in packets:
ip_from = packet[28:32]
@@ -278,6 +290,8 @@
if device_id not in active_instances:
continue
ip_address = port["metric"].get("ip_address", "")
+ if len(ip_address.split('.')) != 4:
+ continue
ns_ifs = namespaces_ifs[network_id]
if len(ns_ifs) == 0:
@@ -310,7 +324,10 @@
pool.join()
for check in checks:
id = check["id"]
- passed, failed = check["result"].get()
+ try:
+ passed, failed = check["result"].get()
+ except IOError:
+ passed, failed = set(), check_map[id]
for ip in passed:
id_long = id + " " + ip
res = mapping[id_long]