*** Settings ***
-Documentation Test suite to determine the southbound Map-Request serving rate
+Documentation LISP southbound performance tests
Suite Setup Prepare Environment
Suite Teardown Destroy Environment
Library Collections
${MAPPINGS} 10000
${LISP_SCAPY} https://raw.githubusercontent.com/intouch/py-lispnetworking/master/lisp.py
${TOOLS_DIR} ${CURDIR}/../../../../tools/odl-lispflowmapping-performance-tests/
-${PCAP_CREATOR} ${TOOLS_DIR}/create_map_request_pcap.py
+${PCAP_CREATOR} ${TOOLS_DIR}/create_lisp_control_plane_pcap.py
${MAPPING_BLASTER} ${TOOLS_DIR}/mapping_blaster.py
${REPLAY_PPS} 100000
${REPLAY_CNT} 1000
-${REPLAY_FILE} encapsulated-map-requests-sequential.pcap
+${REPLAY_FILE_MREQ} encapsulated-map-requests-sequential.pcap
+${REPLAY_FILE_MREG} map-registers-sequential.pcap
${RPCS_RESULTS_FILE} rpcs.csv
${PPS_RESULTS_FILE} pps.csv
Log ${add_seconds}
Set Suite Variable ${add_seconds}
-Generate Test Traffic
+Generate Map-Request Test Traffic
Reset Stats
${result}= Run Process With Logging And Status Check /usr/local/bin/udpreplay --pps ${REPLAY_PPS} --repeat ${REPLAY_CNT}
- ... --host ${ODL_SYSTEM_IP} --port 4342 ${REPLAY_FILE}
+ ... --host ${ODL_SYSTEM_IP} --port 4342 ${REPLAY_FILE_MREQ}
${partial}= Fetch From Left ${result.stdout} s =
Log ${partial}
- ${get_seconds}= Fetch From Right ${partial} ${SPACE}
- ${get_seconds}= Convert To Number ${get_seconds}
- Log ${get_seconds}
- Set Suite Variable ${get_seconds}
+ ${get_seconds_mreq}= Fetch From Right ${partial} ${SPACE}
+ ${get_seconds_mreq}= Convert To Number ${get_seconds_mreq}
+ Log ${get_seconds_mreq}
+ Set Suite Variable ${get_seconds_mreq}
+
+Generate Map-Register Test Traffic
+ ${result}= Run Process With Logging And Status Check /usr/local/bin/udpreplay --pps ${REPLAY_PPS} --repeat ${REPLAY_CNT}
+ ... --host ${ODL_SYSTEM_IP} --port 4342 ${REPLAY_FILE_MREG}
+ ${partial}= Fetch From Left ${result.stdout} s =
+ Log ${partial}
+ ${get_seconds_mreg}= Fetch From Right ${partial} ${SPACE}
+ ${get_seconds_mreg}= Convert To Number ${get_seconds_mreg}
+ Log ${get_seconds_mreg}
+ Set Suite Variable ${get_seconds_mreg}
Compute And Export Results
${rpcs}= Evaluate ${MAPPINGS}/${add_seconds}
Log ${rpcs}
Create File ${RPCS_RESULTS_FILE} store/s\n
Append To File ${RPCS_RESULTS_FILE} ${rpcs}\n
- ${txmrep}= Get Transmitted Map-Requests Stats
- ${pps}= Evaluate ${txmrep}/${get_seconds}
- Log ${pps}
- Create File ${PPS_RESULTS_FILE} replies/s\n
- Append To File ${PPS_RESULTS_FILE} ${pps}\n
+ ${tx_mrep}= Get Transmitted Map-Requests Stats
+ ${pps_mrep}= Evaluate ${tx_mrep}/${get_seconds_mreq}
+ Log ${pps_mrep}
+ Create File ${PPS_RESULTS_FILE} replies/s,notifies/s\n
+ ${tx_mnot}= Get Transmitted Map-Notifies Stats
+ ${pps_mnot}= Evaluate ${tx_mnot}/${get_seconds_mreg}
+ Log ${pps_mnot}
+ Append To File ${PPS_RESULTS_FILE} ${pps_mrep},${pps_mnot}\n
*** Keywords ***
Reset Stats
${stats}= Get From Dictionary ${output} control-message-stats
${ctrlmsg}= Get From Dictionary ${stats} control-message
${replies}= Get From List ${ctrlmsg} 2
- ${txmrep}= Get From Dictionary ${replies} tx-count
- ${txmrep}= Convert To Integer ${txmrep}
- Log ${txmrep}
- [Return] ${txmrep}
+ ${tx_mrep}= Get From Dictionary ${replies} tx-count
+ ${tx_mrep}= Convert To Integer ${tx_mrep}
+ Log ${tx_mrep}
+ [Return] ${tx_mrep}
+
+Get Transmitted Map-Notifies Stats
+ ${resp}= RequestsLibrary.Post Request session ${LFM_SB_RPC_API}:get-stats
+ Log ${resp.content}
+ ${output}= Get From Dictionary ${resp.json()} output
+ ${stats}= Get From Dictionary ${output} control-message-stats
+ ${ctrlmsg}= Get From Dictionary ${stats} control-message
+ ${notifies}= Get From List ${ctrlmsg} 4
+ ${tx_mnot}= Get From Dictionary ${notifies} tx-count
+ ${tx_mnot}= Convert To Integer ${tx_mnot}
+ Log ${tx_mnot}
+ [Return] ${tx_mnot}
Prepare Environment
Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
Destroy Environment
Delete All Sessions
Remove File ${TOOLS_DIR}/lisp.py*
- Remove File ${REPLAY_FILE}
+ Remove File ${REPLAY_FILE_MREQ}
+ Remove File ${REPLAY_FILE_MREG}
#!/usr/bin/env python
"""
-Script to generate a pcap file with n Map-Request packets with EID records
-increasing sequentially and (optionally) another pcap file with n Map-Request
-packets that have random EIDs
+Script to generate files with n Map-Request packets and n Map-Register packets
+with EID records increasing sequentially and (optionally) files with n
+Map-Request packets and n Map-Register packets that have random EIDs
-Use `./create_map_request_pcap.py --help` to see options
+Use `./create_lisp_control_plane_pcap.py --help` to see options
"""
import argparse
__copyright__ = "Copyright (c) 2015, Cisco Systems, Inc."
__license__ = "New-style BSD"
__email__ = "lojakab@cisco.com"
-__version__ = "0.0.2"
+__version__ = "0.0.3"
def generate_eids_random(base, n):
request_records=record)
return packet
+
+def generate_map_register(eid, rloc):
+ """Create a LISP Map-Register packet as a Scapy object
+ Args:
+ :param eid: A string used as the EID record
+ :param rloc: A string used as the RLOC
+ Returns:
+ :return : returns a Scapy Map-Request packet object
+ """
+ sport1 = random.randint(60000, 65000)
+ sport2 = random.randint(60000, 65000)
+ rnonce = random.randint(0, 2**63)
+
+ rlocs = [lisp.LISP_Locator_Record(priority=1, weight=1,
+ multicast_priority=255,
+ multicast_weight=0,
+ reserved=0, locator_flags=5,
+ locator_afi=1, address=rloc)]
+
+ record = [lisp.LISP_MapRecord(record_ttl=1440, locator_count=1,
+ eid_prefix_length=32, action=0,
+ authoritative=1, reserved=0,
+ map_version_number=0, record_afi=1,
+ record_address=eid, locators=rlocs)]
+
+ packet = lisp.Ether(dst=dst_mac, src=src_mac)
+ packet /= lisp.IP(dst=dst_rloc, src=src_rloc)
+ packet /= lisp.UDP(sport=sport1, dport=4342)
+ packet /= lisp.LISP_MapRegister(ptype=3, nonce=rnonce,
+ register_flags=1,
+ register_count=1,
+ register_records=record)
+ return packet
+
parser = argparse.ArgumentParser(description='Create a Map-Request trace file')
parser.add_argument('--dst-mac', default='00:00:00:00:00:00',
increment = in_args.increment
seq_eids = generate_eids_sequential(in_args.base_eid, in_args.requests)
-seq_pkts = []
+seq_pkts_mreq = []
+seq_pkts_mreg = []
for eid in seq_eids:
- seq_pkts.append(generate_map_request(eid))
+ seq_pkts_mreq.append(generate_map_request(eid))
+ seq_pkts_mreg.append(generate_map_register(eid, eid))
-lisp.wrpcap("encapsulated-map-requests-sequential.pcap", seq_pkts)
+lisp.wrpcap("encapsulated-map-requests-sequential.pcap", seq_pkts_mreq)
+lisp.wrpcap("map-registers-sequential.pcap", seq_pkts_mreg)
if in_args.random is True:
rand_eids = generate_eids_random(in_args.base_eid, in_args.requests)
- rand_pkts = []
+ rand_pkts_mreq = []
+ rand_pkts_mreg = []
for eid in rand_eids:
- rand_pkts.append(generate_map_request(eid))
+ rand_pkts_mreq.append(generate_map_request(eid))
+ rand_pkts_mreg.append(generate_map_register(eid, eid))
- lisp.wrpcap("encapsulated-map-requests-random.pcap", rand_pkts)
+ lisp.wrpcap("encapsulated-map-requests-random.pcap", rand_pkts_mreq)
+ lisp.wrpcap("map-registers-random.pcap", rand_pkts_mreg)