3 Script to generate files with n Map-Request packets and n Map-Register packets
4 with EID records increasing sequentially and (optionally) files with n
5 Map-Request packets and n Map-Register packets that have random EIDs
7 Use `./create_lisp_control_plane_pcap.py --help` to see options
15 __author__ = "Lori Jakab"
16 __copyright__ = "Copyright (c) 2015, Cisco Systems, Inc."
17 __license__ = "New-style BSD"
18 __email__ = "lojakab@cisco.com"
22 def generate_eids_random(base, n):
23 """Generate n number of EIDs in random order starting from base
25 :param base: A string used as the first EID
26 :param n: An integer, number of EIDs to generate
28 :return : returns list containing string EIDs
33 str(netaddr.IPAddress(base) + random.randint(0, (n - 1) * increment))
38 def generate_eids_sequential(base, n):
39 """Generate n number of EIDs in sequential order starting from base
41 :param base: A string used as the first EID
42 :param n: An integer, number of EIDs to generate
44 :return : returns list containing string EIDs
48 eids.append(str(netaddr.IPAddress(base) + i * increment))
52 def generate_map_request(eid):
53 """Create a LISP Map-Request packet as a Scapy object
55 :param eid: A string used as the EID record
57 :return : returns a Scapy Map-Request packet object
59 sport1 = random.randint(60000, 65000)
60 sport2 = random.randint(60000, 65000)
61 rnonce = random.randint(0, 2**63)
63 itr_rloc = [lisp.LISP_AFI_Address(address=src_rloc, afi=1)]
65 lisp.LISP_MapRequestRecord(request_address=eid, request_afi=1, eid_mask_len=32)
68 packet = lisp.Ether(dst=dst_mac, src=src_mac)
69 packet /= lisp.IP(dst=dst_rloc, src=src_rloc)
70 packet /= lisp.UDP(sport=sport1, dport=4342)
71 packet /= lisp.LISP_Encapsulated_Control_Message(ptype=8)
72 packet /= lisp.IP(dst=eid, src=src_eid)
73 packet /= lisp.UDP(sport=sport2, dport=4342)
74 packet /= lisp.LISP_MapRequest(
79 itr_rloc_records=itr_rloc,
80 request_records=record,
85 def generate_map_register(eid, rloc, key_id):
86 """Create a LISP Map-Register packet as a Scapy object
88 :param eid: A string used as the EID record
89 :param rloc: A string used as the RLOC
90 :param key_id: Integer value specifying the authentication type
92 :return : returns a Scapy Map-Request packet object
94 sport1 = random.randint(60000, 65000)
95 rnonce = random.randint(0, 2**63)
98 lisp.LISP_Locator_Record(
101 multicast_priority=255,
114 eid_prefix_length=32,
118 map_version_number=0,
125 packet = lisp.Ether(dst=dst_mac, src=src_mac)
126 packet /= lisp.IP(dst=dst_rloc, src=src_rloc)
127 packet /= lisp.UDP(sport=sport1, dport=4342)
128 packet /= lisp.LISP_MapRegister(
132 additional_register_flags=1,
135 register_records=record,
136 xtr_id_low=netaddr.IPAddress(eid),
141 parser = argparse.ArgumentParser(description="Create a Map-Request trace file")
145 default="00:00:00:00:00:00",
146 help="Map-Request destination MAC address \
147 (default is 00:00:00:00:00:00)",
151 default="00:00:00:00:00:00",
152 help="Map-Request source MAC address \
153 (default is 00:00:00:00:00:00)",
158 help="Send Map-Request to the Map-Server with this RLOC \
159 (default is 127.0.0.1)",
164 help="Send Map-Request with this source RLOC \
165 (default is 127.0.0.1)",
170 help="Send Map-Request with this source EID \
171 (default is 192.0.2.1)",
176 help="Start incrementing EID from this address \
177 (default is 10.0.0.0)",
180 "--requests", type=int, default=1, help="Number of requests to create (default 1)"
183 "--increment", type=int, default=1, help="Increment EID requests (default 1)"
189 help="Create random EID requests (default False)",
192 in_args = parser.parse_args()
193 dst_mac = in_args.dst_mac
194 src_mac = in_args.src_mac
195 dst_rloc = in_args.dst_rloc
196 src_rloc = in_args.src_rloc
197 src_eid = in_args.src_eid
198 increment = in_args.increment
200 seq_eids = generate_eids_sequential(in_args.base_eid, in_args.requests)
206 seq_pkts_mreq.append(generate_map_request(eid))
207 seq_pkts_mreg.append(generate_map_register(eid, eid, 0))
208 seq_pkts_mrga.append(generate_map_register(eid, eid, 1))
210 lisp.wrpcap("encapsulated-map-requests-sequential.pcap", seq_pkts_mreq)
211 lisp.wrpcap("map-registers-sequential-no-auth.pcap", seq_pkts_mreg)
212 lisp.wrpcap("map-registers-sequential-sha1-auth.pcap", seq_pkts_mrga)
214 if in_args.random is True:
215 rand_eids = generate_eids_random(in_args.base_eid, in_args.requests)
220 for eid in rand_eids:
221 rand_pkts_mreq.append(generate_map_request(eid))
222 rand_pkts_mreg.append(generate_map_register(eid, eid, 0))
223 rand_pkts_mrga.append(generate_map_register(eid, eid, 1))
225 lisp.wrpcap("encapsulated-map-requests-random.pcap", rand_pkts_mreq)
226 lisp.wrpcap("map-registers-random-no-auth.pcap", rand_pkts_mreg)
227 lisp.wrpcap("map-registers-random-sha1-auth.pcap", rand_pkts_mreg)