summaryrefslogtreecommitdiffstats
path: root/tests/data_plane/vpp_lite_topo/scripts
diff options
context:
space:
mode:
authorFilip Tehlar <ftehlar@cisco.com>2017-05-15 14:05:24 +0200
committerFilip Tehlar <ftehlar@cisco.com>2017-05-16 09:41:13 +0200
commit0b237f3cd02f6c59252e8270c97c015c7a148cd2 (patch)
tree49fe72c361d0fd208e1ef4386eb76895fb7ae90e /tests/data_plane/vpp_lite_topo/scripts
parent9047c7fbf1c811f07c69f778914d25d2652651f3 (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.py31
-rw-r--r--tests/data_plane/vpp_lite_topo/scripts/dhcp_server.py32
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()