diff options
author | Filip Tehlar <ftehlar@cisco.com> | 2017-05-15 14:05:24 +0200 |
---|---|---|
committer | Filip Tehlar <ftehlar@cisco.com> | 2017-05-16 09:41:13 +0200 |
commit | 0b237f3cd02f6c59252e8270c97c015c7a148cd2 (patch) | |
tree | 49fe72c361d0fd208e1ef4386eb76895fb7ae90e /tests/data_plane/vpp_lite_topo/scripts | |
parent | 9047c7fbf1c811f07c69f778914d25d2652651f3 (diff) |
Add DHCP test
Change-Id: I22d7ca6cd58b377f1c0a166022411d21f6c966e8
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Diffstat (limited to 'tests/data_plane/vpp_lite_topo/scripts')
-rw-r--r-- | tests/data_plane/vpp_lite_topo/scripts/dhcp_client.py | 31 | ||||
-rw-r--r-- | tests/data_plane/vpp_lite_topo/scripts/dhcp_server.py | 32 |
2 files changed, 63 insertions, 0 deletions
diff --git a/tests/data_plane/vpp_lite_topo/scripts/dhcp_client.py b/tests/data_plane/vpp_lite_topo/scripts/dhcp_client.py new file mode 100644 index 0000000..8e49426 --- /dev/null +++ b/tests/data_plane/vpp_lite_topo/scripts/dhcp_client.py @@ -0,0 +1,31 @@ +import sys +from scapy.all import * + +def p(s): + print 'DHCP client: {}'.format(s) + +def main(argv): + src_mac = argv[1] + dhcp_src = argv[2] + + # needed for scapy not to match replies since DHCP uses broadcast addresses + # which wouldn't work + conf.checkIPaddr = False + + while True: + discover = Ether(dst='ff:ff:ff:ff:ff:ff', src=src_mac)/ \ + IP(src='0.0.0.0', dst='255.255.255.255')/ \ + UDP(dport=67,sport=68)/ \ + BOOTP(op=1, chaddr=src_mac)/ \ + DHCP(options=[('message-type', 'discover'), ('end')]) + + ans,unans = srp(discover, timeout=3) + for snd,rcv in ans: + if rcv[IP].src == dhcp_src: + exit(0) + else: + p('Unexpected DHCP packet source address! ({})'.format(rcv[IP].src)) + exit(1) + +if __name__ == "__main__": + main(sys.argv) diff --git a/tests/data_plane/vpp_lite_topo/scripts/dhcp_server.py b/tests/data_plane/vpp_lite_topo/scripts/dhcp_server.py new file mode 100644 index 0000000..cd6f43e --- /dev/null +++ b/tests/data_plane/vpp_lite_topo/scripts/dhcp_server.py @@ -0,0 +1,32 @@ +from scapy.all import * +from scapy.layers import * + +server_ip="6.0.2.2" +client_ip="6.0.1.2" +server_mac="00:0B:CD:AE:9F:C6" +client_mac="aa:a2:a5:ea:54:20" +subnet_mask="255.255.255.0" +gateway="6.0.1.1" + +# suboption 1 Agent circuit ID; len:4; val:0x00000001 +# suboption 5 Link selection; len:4; val:6.0.1.1 +option82 = '\x01\x04\x00\x00\x00\x01\x05\x04\x06\00\x01\x01' + +def detect_dhcp(pkt): + # check if we get DHCP discover and send offer message + if pkt[DHCP] and pkt[DHCP].options[0][1] == 1: + sendp(Ether(src=server_mac,dst="ff:ff:ff:ff:ff:ff")/ + IP(src=server_ip,dst="6.0.1.1")/ + UDP(sport=67,dport=68)/ + BOOTP(op=2, yiaddr=client_ip, siaddr=server_ip, giaddr=gateway, + chaddr=client_mac, xid=pkt[BOOTP].xid)/ + DHCP(options=[('message_type', 'offer')])/ + DHCP(options=[('subnet_mask',subnet_mask)])/ + DHCP(options=[('server_id',server_ip)])/ + DHCP(options=[('relay_agent_Information', option82), ('end')])) + +#sniff DHCP requests +def start(): + sniff(filter="udp and (port 67 or 68)", prn=detect_dhcp, store=0) + +start() |