summaryrefslogtreecommitdiff
path: root/regress/sys/netinet6/rh0/rh0_frag_route.py
diff options
context:
space:
mode:
authorAlexander Bluhm <bluhm@cvs.openbsd.org>2013-11-17 20:16:28 +0000
committerAlexander Bluhm <bluhm@cvs.openbsd.org>2013-11-17 20:16:28 +0000
commit0bb25668abf5783e65149a7cbdb640b5eb657102 (patch)
tree10d55adf6d18f0433301fff4613485d92afcd8b8 /regress/sys/netinet6/rh0/rh0_frag_route.py
parent8c64897c33831bbc4813c9bafaf924867faa7408 (diff)
Adapt the IPv6 routing header type 0 tests to the current behaviour.
As header scanning is back, there is always a icmp6 parameter problem response. Add tests that hide the routing header behind an atomic fragment header to get the RFC 5095 behaviour. One test puts the routing header into the second fragment so that it cannot be detected without reassembly.
Diffstat (limited to 'regress/sys/netinet6/rh0/rh0_frag_route.py')
-rw-r--r--regress/sys/netinet6/rh0/rh0_frag_route.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/regress/sys/netinet6/rh0/rh0_frag_route.py b/regress/sys/netinet6/rh0/rh0_frag_route.py
new file mode 100644
index 00000000000..86bdc728265
--- /dev/null
+++ b/regress/sys/netinet6/rh0/rh0_frag_route.py
@@ -0,0 +1,43 @@
+#!/usr/local/bin/python2.7
+# send a ping6 packet with routing header type 0
+# try to source route
+# hide the routing header behind a fragment header to avoid header scan
+# we expect an ICMP6 error, as we do not support source routing
+
+import os
+from addr import *
+from scapy.all import *
+
+pid=os.getpid()
+payload="ABCDEFGHIJKLMNOP"
+packet=IPv6(src=SRC_OUT6, dst=DST_IN6)/\
+ IPv6ExtHdrFragment(id=pid)/\
+ IPv6ExtHdrRouting(addresses=[SRT_IN6, SRT_OUT6], segleft=2)/\
+ ICMPv6EchoRequest(id=pid, data=payload)
+eth=Ether(src=SRC_MAC, dst=DST_MAC)/packet
+
+if os.fork() == 0:
+ time.sleep(1)
+ sendp(eth, iface=SRC_IF)
+ os._exit(0)
+
+ans=sniff(iface=SRC_IF, timeout=3, filter=
+ "ip6 and dst "+SRC_OUT6+" and icmp6")
+for a in ans:
+ if a and a.type == scapy.layers.dot11.ETHER_TYPES.IPv6 and \
+ ipv6nh[a.payload.nh] == 'ICMPv6' and \
+ icmp6types[a.payload.payload.type] == 'Parameter problem':
+ pprob=a.payload.payload
+ code=pprob.code
+ print "code=%#d" % (code)
+ if code != 0:
+ print "WRONG PARAMETER PROBLEM CODE"
+ exit(2)
+ ptr=pprob.ptr
+ print "ptr=%#d" % (ptr)
+ if ptr != 50:
+ print "WRONG PARAMETER PROBLEM POINTER"
+ exit(2)
+ exit(0)
+print "NO ICMP6 PARAMETER PROBLEM"
+exit(1)