Fix logic in updater.py with respect to Counter class
[integration/test.git] / tools / odl-lispflowmapping-performance-tests / create_map_request_pcap.py
1 #!/usr/bin/env python
2 """
3 Script to generate a pcap file with n Map-Request packets with EID records
4 increasing sequentially and (optionally) another pcap file with n Map-Request
5 packets that have random EIDs
6
7 Use `./create_map_request_pcap.py --help` to see options
8 """
9
10 import argparse
11 import netaddr
12 import lisp
13 import random
14
15 __author__ = "Lori Jakab"
16 __copyright__ = "Copyright (c) 2015, Cisco Systems, Inc."
17 __license__ = "New-style BSD"
18 __email__ = "lojakab@cisco.com"
19 __version__ = "0.0.2"
20
21
22 def generate_eids_random(base, n):
23     """Generate n number of EIDs in random order starting from base
24     Args:
25         :param base: A string used as the first EID
26         :param n: An integer, number of EIDs to generate
27     Returns:
28         :return : returns list containing string EIDs
29     """
30     eids = []
31     for i in range(0, n):
32         eids.append(str(netaddr.IPAddress(base) +
33                         random.randint(0, (n - 1) * increment)))
34     return eids
35
36
37 def generate_eids_sequential(base, n):
38     """Generate n number of EIDs in sequential order starting from base
39     Args:
40         :param base: A string used as the first EID
41         :param n: An integer, number of EIDs to generate
42     Returns:
43         :return : returns list containing string EIDs
44     """
45     eids = []
46     for i in range(0, n):
47         eids.append(str(netaddr.IPAddress(base) + i * increment))
48     return eids
49
50
51 def generate_map_request(eid):
52     """Create a LISP Map-Request packet as a Scapy object
53     Args:
54         :param eid: A string used as the EID record
55     Returns:
56         :return : returns a Scapy Map-Request packet object
57     """
58     sport1 = random.randint(60000, 65000)
59     sport2 = random.randint(60000, 65000)
60     rnonce = random.randint(0, 2**63)
61
62     itr_rloc = [lisp.LISP_AFI_Address(address=src_rloc, afi=1)]
63     record = [lisp.LISP_MapRequestRecord(request_address=eid,
64                                          request_afi=1,
65                                          eid_mask_len=32)]
66
67     packet = lisp.Ether(dst=dst_mac, src=src_mac)
68     packet /= lisp.IP(dst=dst_rloc, src=src_rloc)
69     packet /= lisp.UDP(sport=sport1, dport=4342)
70     packet /= lisp.LISP_Encapsulated_Control_Message(ptype=8)
71     packet /= lisp.IP(dst=eid, src=src_eid)
72     packet /= lisp.UDP(sport=sport2, dport=4342)
73     packet /= lisp.LISP_MapRequest(nonce=rnonce, request_afi=1,
74                                    address=src_eid, ptype=1,
75                                    itr_rloc_records=itr_rloc,
76                                    request_records=record)
77     return packet
78
79 parser = argparse.ArgumentParser(description='Create a Map-Request trace file')
80
81 parser.add_argument('--dst-mac', default='00:00:00:00:00:00',
82                     help='Map-Request destination MAC address \
83                         (default is 00:00:00:00:00:00)')
84 parser.add_argument('--src-mac', default='00:00:00:00:00:00',
85                     help='Map-Request source MAC address \
86                         (default is 00:00:00:00:00:00)')
87 parser.add_argument('--dst-rloc', default='127.0.0.1',
88                     help='Send Map-Request to the Map-Server with this RLOC \
89                         (default is 127.0.0.1)')
90 parser.add_argument('--src-rloc', default='127.0.0.1',
91                     help='Send Map-Request with this source RLOC \
92                         (default is 127.0.0.1)')
93 parser.add_argument('--src-eid', default='192.0.2.1',
94                     help='Send Map-Request with this source EID \
95                         (default is 192.0.2.1)')
96 parser.add_argument('--base-eid', default='10.0.0.0',
97                     help='Start incrementing EID from this address \
98                         (default is 10.0.0.0)')
99 parser.add_argument('--requests', type=int, default=1,
100                     help='Number of requests to create (default 1)')
101 parser.add_argument('--increment', type=int, default=1,
102                     help='Increment EID requests (default 1)')
103 parser.add_argument('--random', type=bool, default=False,
104                     help='Create random EID requests (default False)')
105
106 in_args = parser.parse_args()
107 dst_mac = in_args.dst_mac
108 src_mac = in_args.src_mac
109 dst_rloc = in_args.dst_rloc
110 src_rloc = in_args.src_rloc
111 src_eid = in_args.src_eid
112 increment = in_args.increment
113
114 seq_eids = generate_eids_sequential(in_args.base_eid, in_args.requests)
115 seq_pkts = []
116
117 for eid in seq_eids:
118     seq_pkts.append(generate_map_request(eid))
119
120 lisp.wrpcap("encapsulated-map-requests-sequential.pcap", seq_pkts)
121
122 if in_args.random is True:
123     rand_eids = generate_eids_random(in_args.base_eid, in_args.requests)
124     rand_pkts = []
125
126     for eid in rand_eids:
127         rand_pkts.append(generate_map_request(eid))
128
129     lisp.wrpcap("encapsulated-map-requests-random.pcap", rand_pkts)