From e4af9acca22b6c66505e34ef332ba0fd1fe96c97 Mon Sep 17 00:00:00 2001 From: Lorand Jakab Date: Tue, 8 Mar 2016 15:10:58 -0800 Subject: [PATCH] Add Map-Register LISP SB performance test Change-Id: I1c0a4a599733d3e3b5c24756fcfcf116e8db5dcd Signed-off-by: Lorand Jakab --- .../010_Southbound_MapRequest.robot | 65 +++++++++++++------ ...p.py => create_lisp_control_plane_pcap.py} | 62 ++++++++++++++---- 2 files changed, 97 insertions(+), 30 deletions(-) rename tools/odl-lispflowmapping-performance-tests/{create_map_request_pcap.py => create_lisp_control_plane_pcap.py} (66%) diff --git a/csit/suites/lispflowmapping/performance/010_Southbound_MapRequest.robot b/csit/suites/lispflowmapping/performance/010_Southbound_MapRequest.robot index e6864f372a..0dbff1d42c 100644 --- a/csit/suites/lispflowmapping/performance/010_Southbound_MapRequest.robot +++ b/csit/suites/lispflowmapping/performance/010_Southbound_MapRequest.robot @@ -1,5 +1,5 @@ *** 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 @@ -14,11 +14,12 @@ Variables ../../../variables/Variables.py ${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 @@ -31,27 +32,40 @@ Add Simple IPv4 Mappings 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 @@ -66,10 +80,22 @@ Get Transmitted Map-Requests 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} @@ -79,4 +105,5 @@ Prepare Environment 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} diff --git a/tools/odl-lispflowmapping-performance-tests/create_map_request_pcap.py b/tools/odl-lispflowmapping-performance-tests/create_lisp_control_plane_pcap.py similarity index 66% rename from tools/odl-lispflowmapping-performance-tests/create_map_request_pcap.py rename to tools/odl-lispflowmapping-performance-tests/create_lisp_control_plane_pcap.py index 76d459092c..5dd1118155 100755 --- a/tools/odl-lispflowmapping-performance-tests/create_map_request_pcap.py +++ b/tools/odl-lispflowmapping-performance-tests/create_lisp_control_plane_pcap.py @@ -1,10 +1,10 @@ #!/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 @@ -16,7 +16,7 @@ __author__ = "Lori Jakab" __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): @@ -76,6 +76,40 @@ def generate_map_request(eid): 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', @@ -112,18 +146,24 @@ src_eid = in_args.src_eid 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) -- 2.36.6