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]