diff options
author | Alexander Bluhm <bluhm@cvs.openbsd.org> | 2013-11-17 20:16:28 +0000 |
---|---|---|
committer | Alexander Bluhm <bluhm@cvs.openbsd.org> | 2013-11-17 20:16:28 +0000 |
commit | 0bb25668abf5783e65149a7cbdb640b5eb657102 (patch) | |
tree | 10d55adf6d18f0433301fff4613485d92afcd8b8 /regress/sys/netinet6/rh0/rh0_frag_route.py | |
parent | 8c64897c33831bbc4813c9bafaf924867faa7408 (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.py | 43 |
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) |