FIX: Add ICMPv6MLReport2 masking 58/32658/1
authorpmikus <pmikus@cisco.com>
Thu, 10 Jun 2021 08:51:19 +0000 (08:51 +0000)
committerPeter Mikus <pmikus@cisco.com>
Thu, 10 Jun 2021 10:23:18 +0000 (10:23 +0000)
Signed-off-by: pmikus <pmikus@cisco.com>
Change-Id: I1183a0ffd13c6926b3963b78630954bb6356133b
(cherry picked from commit 8b25b4e89bdba964f2a3d602b8c47f551a084724)
(cherry picked from commit aa02a041d8a6099f870d21bb5949bd741733df80)

GPL/traffic_scripts/geneve_tunnel.py
GPL/traffic_scripts/ipsec_interface.py
GPL/traffic_scripts/ipsec_policy.py
GPL/traffic_scripts/lisp/lisp_check.py
GPL/traffic_scripts/lisp/lispgpe_check.py
GPL/traffic_scripts/nat.py
GPL/traffic_scripts/policer.py
GPL/traffic_scripts/send_icmp_wait_for_reply.py
GPL/traffic_scripts/srv6_encap.py

index 3dd40b6..1270aa6 100644 (file)
@@ -30,7 +30,7 @@ import sys
 from ipaddress import ip_address
 from scapy.contrib.geneve import GENEVE
 from scapy.layers.inet import IP, UDP
 from ipaddress import ip_address
 from scapy.contrib.geneve import GENEVE
 from scapy.layers.inet import IP, UDP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
+from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
@@ -280,6 +280,10 @@ def main():
         if rx_pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
         if rx_pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
+        elif rx_pkt_recv.haslayer(ICMPv6MLReport2):
+            # read another packet in the queue if the current one is
+            # ICMPv6MLReport2
+            continue
         else:
             # otherwise process the current packet
             break
         else:
             # otherwise process the current packet
             break
@@ -333,6 +337,10 @@ def main():
         if tx_pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
         if tx_pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
+        elif tx_pkt_recv.haslayer(ICMPv6MLReport2):
+            # read another packet in the queue if the current one is
+            # ICMPv6MLReport2
+            continue
         else:
             # otherwise process the current packet
             break
         else:
             # otherwise process the current packet
             break
index 9c28f4c..ee15726 100644 (file)
@@ -29,7 +29,7 @@ import sys
 
 from ipaddress import ip_address
 from scapy.layers.inet import IP
 
 from ipaddress import ip_address
 from scapy.layers.inet import IP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
+from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2
 from scapy.layers.ipsec import SecurityAssociation, ESP
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 from scapy.layers.ipsec import SecurityAssociation, ESP
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
@@ -271,6 +271,10 @@ def main():
         if tx_pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
         if tx_pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
+        elif tx_pkt_recv.haslayer(ICMPv6MLReport2):
+            # read another packet in the queue if the current one is
+            # ICMPv6MLReport2
+            continue
         else:
             # otherwise process the current packet
             break
         else:
             # otherwise process the current packet
             break
index 0d5dcf5..4acf0a1 100644 (file)
@@ -29,7 +29,7 @@ import sys
 
 from ipaddress import ip_address
 from scapy.layers.inet import IP
 
 from ipaddress import ip_address
 from scapy.layers.inet import IP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
+from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2
 from scapy.layers.ipsec import SecurityAssociation, ESP
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 from scapy.layers.ipsec import SecurityAssociation, ESP
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
@@ -205,6 +205,10 @@ def main():
         if rx_pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
         if rx_pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
+        elif rx_pkt_recv.haslayer(ICMPv6MLReport2):
+            # read another packet in the queue if the current one is
+            # ICMPv6MLReport2
+            continue
         else:
             # otherwise process the current packet
             break
         else:
             # otherwise process the current packet
             break
index 6612485..88d4ad5 100644 (file)
@@ -34,7 +34,7 @@ from scapy.all import bind_layers, Packet
 from scapy.fields import FlagsField, BitField, IntField
 from scapy.layers.inet import ICMP, IP, UDP
 from scapy.layers.inet6 import ICMPv6EchoRequest
 from scapy.fields import FlagsField, BitField, IntField
 from scapy.layers.inet import ICMP, IP, UDP
 from scapy.layers.inet6 import ICMPv6EchoRequest
-from scapy.layers.inet6 import IPv6
+from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
@@ -133,13 +133,25 @@ def main():
     sent_packets.append(pkt_raw)
     txq.send(pkt_raw)
 
     sent_packets.append(pkt_raw)
     txq.send(pkt_raw)
 
-    if tx_if == rx_if:
-        ether = rxq.recv(2, ignore=sent_packets)
-    else:
-        ether = rxq.recv(2)
-
-    if ether is None:
-        raise RuntimeError(u"ICMP echo Rx timeout")
+    while True:
+        if tx_if == rx_if:
+            ether = rxq.recv(2, ignore=sent_packets)
+        else:
+            ether = rxq.recv(2)
+
+        if ether is None:
+            raise RuntimeError(u"ICMP echo Rx timeout")
+
+        if ether.haslayer(ICMPv6ND_NS):
+            # read another packet in the queue if the current one is ICMPv6ND_NS
+            continue
+        elif ether.haslayer(ICMPv6MLReport2):
+            # read another packet in the queue if the current one is
+            # ICMPv6MLReport2
+            continue
+
+        # otherwise process the current packet
+        break
 
     if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src:
         print(u"MAC addresses match.")
 
     if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src:
         print(u"MAC addresses match.")
index 41bc096..79d2ccf 100644 (file)
@@ -35,7 +35,7 @@ from scapy.all import bind_layers, Packet
 from scapy.fields import FlagsField, BitField, XBitField, IntField
 from scapy.layers.inet import ICMP, IP, UDP
 from scapy.layers.inet6 import ICMPv6EchoRequest
 from scapy.fields import FlagsField, BitField, XBitField, IntField
 from scapy.layers.inet import ICMP, IP, UDP
 from scapy.layers.inet6 import ICMPv6EchoRequest
-from scapy.layers.inet6 import IPv6
+from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2, ICMPv6ND_RA
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
@@ -156,13 +156,28 @@ def main():
     sent_packets.append(pkt_raw)
     txq.send(pkt_raw)
 
     sent_packets.append(pkt_raw)
     txq.send(pkt_raw)
 
-    if tx_if == rx_if:
-        ether = rxq.recv(2, ignore=sent_packets)
-    else:
-        ether = rxq.recv(2)
-
-    if ether is None:
-        raise RuntimeError(u"ICMP echo Rx timeout")
+    while True:
+        if tx_if == rx_if:
+            ether = rxq.recv(2, ignore=sent_packets)
+        else:
+            ether = rxq.recv(2)
+
+        if ether is None:
+            raise RuntimeError(u"ICMP echo Rx timeout")
+
+        if ether.haslayer(ICMPv6ND_NS):
+            # read another packet in the queue if the current one is ICMPv6ND_NS
+            continue
+        if ether.haslayer(ICMPv6ND_RA):
+            # read another packet in the queue if the current one is ICMPv6ND_RA
+            continue
+        elif ether.haslayer(ICMPv6MLReport2):
+            # read another packet in the queue if the current one is
+            # ICMPv6MLReport2
+            continue
+
+        # otherwise process the current packet
+        break
 
     if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src:
         print(u"MAC addresses match.")
 
     if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src:
         print(u"MAC addresses match.")
index d9f0330..319d617 100644 (file)
@@ -30,7 +30,7 @@ import sys
 import ipaddress
 
 from scapy.layers.inet import IP, TCP, UDP
 import ipaddress
 
 from scapy.layers.inet import IP, TCP, UDP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
+from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
@@ -182,6 +182,10 @@ def main():
         if ether.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
         if ether.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
+        elif ether.haslayer(ICMPv6MLReport2):
+            # read another packet in the queue if the current one is
+            # ICMPv6MLReport2
+            continue
         else:
             # otherwise process the current packet
             break
         else:
             # otherwise process the current packet
             break
index 262d787..ef78f27 100644 (file)
@@ -31,7 +31,7 @@ import logging
 from ipaddress import ip_address
 from scapy.layers.l2 import Ether
 from scapy.layers.inet import IP, TCP
 from ipaddress import ip_address
 from scapy.layers.l2 import Ether
 from scapy.layers.inet import IP, TCP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
+from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6MLReport2
 from scapy.packet import Raw
 
 from .TrafficScriptArg import TrafficScriptArg
 from scapy.packet import Raw
 
 from .TrafficScriptArg import TrafficScriptArg
@@ -113,6 +113,10 @@ def main():
         if pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
         if pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
+        elif pkt_recv.haslayer(ICMPv6MLReport2):
+            # read another packet in the queue if the current one is
+            # ICMPv6MLReport2
+            continue
         else:
             # otherwise process the current packet
             break
         else:
             # otherwise process the current packet
             break
index 70d9a99..966fa60 100644 (file)
@@ -29,8 +29,8 @@ import sys
 import ipaddress
 
 from scapy.layers.inet import ICMP, IP
 import ipaddress
 
 from scapy.layers.inet import ICMP, IP
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6EchoReply,\
-    ICMPv6ND_NS
+from scapy.layers.inet6 import ICMPv6EchoRequest, ICMPv6EchoReply,\
+    ICMPv6ND_NS, ICMPv6MLReport2
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
@@ -126,6 +126,10 @@ def main():
             elif icmp_reply.haslayer(ICMPv6ND_NS):
                 # read another packet in the queue in case of ICMPv6ND_NS packet
                 continue
             elif icmp_reply.haslayer(ICMPv6ND_NS):
                 # read another packet in the queue in case of ICMPv6ND_NS packet
                 continue
+            elif icmp_reply.haslayer(ICMPv6MLReport2):
+                # read another packet in the queue if the current one is
+                # ICMPv6MLReport2
+                continue
             else:
                 # otherwise process the current packet
                 break
             else:
                 # otherwise process the current packet
                 break
index 725db9f..9cdfccf 100644 (file)
@@ -28,7 +28,7 @@
 import sys
 
 from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, IPv6ExtHdrSegmentRouting,\
 import sys
 
 from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, IPv6ExtHdrSegmentRouting,\
-    ipv6nh
+    ipv6nh, ICMPv6MLReport2
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
@@ -296,6 +296,10 @@ def main():
         if tx_pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
         if tx_pkt_recv.haslayer(ICMPv6ND_NS):
             # read another packet in the queue if the current one is ICMPv6ND_NS
             continue
+        elif tx_pkt_recv.haslayer(ICMPv6MLReport2):
+            # read another packet in the queue if the current one is
+            # ICMPv6MLReport2
+            continue
         else:
             # otherwise process the current packet
             break
         else:
             # otherwise process the current packet
             break