aboutsummaryrefslogtreecommitdiffstats
path: root/GPL/traffic_scripts/srv6_encap.py
diff options
context:
space:
mode:
Diffstat (limited to 'GPL/traffic_scripts/srv6_encap.py')
-rw-r--r--GPL/traffic_scripts/srv6_encap.py56
1 files changed, 36 insertions, 20 deletions
diff --git a/GPL/traffic_scripts/srv6_encap.py b/GPL/traffic_scripts/srv6_encap.py
index 725db9fc33..9c4ea257a0 100644
--- a/GPL/traffic_scripts/srv6_encap.py
+++ b/GPL/traffic_scripts/srv6_encap.py
@@ -28,7 +28,7 @@
import sys
from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, IPv6ExtHdrSegmentRouting,\
- ipv6nh
+ ipv6nh, ICMPv6MLReport2, ICMPv6ND_RA
from scapy.layers.l2 import Ether
from scapy.packet import Raw
@@ -255,9 +255,17 @@ def main():
if rx_pkt_recv.haslayer(ICMPv6ND_NS):
# read another packet in the queue if the current one is ICMPv6ND_NS
continue
- else:
- # otherwise process the current packet
- break
+ elif rx_pkt_recv.haslayer(ICMPv6MLReport2):
+ # read another packet in the queue if the current one is
+ # ICMPv6MLReport2
+ continue
+ elif rx_pkt_recv.haslayer(ICMPv6ND_RA):
+ # read another packet in the queue if the current one is
+ # ICMPv6ND_RA
+ continue
+
+ # otherwise process the current packet
+ break
check_srv6(
rx_pkt_recv, rx_src_mac, rx_dst_mac, src_ip, dst_ip, dir0_srcsid,
@@ -270,20 +278,20 @@ def main():
ip_pkt[Raw].load += (b"\0" * (size_limit - 14 - len(ip_pkt)))
rx_pkt_send = (
- Ether(src=rx_dst_mac, dst=rx_src_mac) /
- IPv6(src=dir1_srcsid, dst=dir1_dstsid1) /
- IPv6ExtHdrSegmentRouting(
- segleft=1 if dir1_dstsid3 == u"None" else 2,
- lastentry=1 if dir1_dstsid3 == u"None" else 2,
- addresses=[dir1_dstsid2, dir1_dstsid1]
- if dir1_dstsid3 == u"None"
- else [dir1_dstsid3, dir1_dstsid2, dir1_dstsid1]
- ) /
- ip_pkt
+ Ether(src=rx_dst_mac, dst=rx_src_mac) /
+ IPv6(src=dir1_srcsid, dst=dir1_dstsid1) /
+ IPv6ExtHdrSegmentRouting(
+ segleft=1 if dir1_dstsid3 == u"None" else 2,
+ lastentry=1 if dir1_dstsid3 == u"None" else 2,
+ addresses=[dir1_dstsid2, dir1_dstsid1]
+ if dir1_dstsid3 == u"None"
+ else [dir1_dstsid3, dir1_dstsid2, dir1_dstsid1]
+ ) /
+ ip_pkt
) if dir1_dstsid2 != u"None" else (
- Ether(src=rx_dst_mac, dst=rx_src_mac) /
- IPv6(src=dir1_srcsid, dst=dir1_dstsid1) /
- ip_pkt
+ Ether(src=rx_dst_mac, dst=rx_src_mac) /
+ IPv6(src=dir1_srcsid, dst=dir1_dstsid1) /
+ ip_pkt
)
rx_txq.send(rx_pkt_send)
@@ -296,9 +304,17 @@ def main():
if tx_pkt_recv.haslayer(ICMPv6ND_NS):
# read another packet in the queue if the current one is ICMPv6ND_NS
continue
- else:
- # otherwise process the current packet
- break
+ elif tx_pkt_recv.haslayer(ICMPv6MLReport2):
+ # read another packet in the queue if the current one is
+ # ICMPv6MLReport2
+ continue
+ elif tx_pkt_recv.haslayer(ICMPv6ND_RA):
+ # read another packet in the queue if the current one is
+ # ICMPv6ND_RA
+ continue
+
+ # otherwise process the current packet
+ break
if decap == u"True":
check_ip(tx_pkt_recv, tx_dst_mac, tx_src_mac, dst_ip, src_ip)