From 0bb25668abf5783e65149a7cbdb640b5eb657102 Mon Sep 17 00:00:00 2001 From: Alexander Bluhm Date: Sun, 17 Nov 2013 20:16:28 +0000 Subject: 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. --- regress/sys/netinet6/rh0/rh0_frag_route.py | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 regress/sys/netinet6/rh0/rh0_frag_route.py (limited to 'regress/sys/netinet6/rh0/rh0_frag_route.py') 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) -- cgit v1.2.3