From: Peter Gubka Date: Wed, 11 May 2016 13:21:17 +0000 (+0200) Subject: Add functional suites for bgpcep using exabgp X-Git-Tag: release/boron~108 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=90e629f508fb1df1f0c0fd73667092ad18d933a6;p=integration%2Ftest.git Add functional suites for bgpcep using exabgp -tests ipv4-l3vpn -tests for path selection -tests evpn (using play.py instead of exabgp) -tests rotue-refresh There is a new testplan (bgpcep-functional.txt) which is used for debug purposes now in sandbox and will be removed. Change-Id: I597728ed28cf13baba356a0f4b9dd32ffb3eefe9 Signed-off-by: Peter Gubka --- diff --git a/csit/libraries/BgpRpcClient.py b/csit/libraries/BgpRpcClient.py new file mode 100644 index 0000000000..c744fabdfb --- /dev/null +++ b/csit/libraries/BgpRpcClient.py @@ -0,0 +1,97 @@ +""" +The purpose of this library is communicate with tools which run xmlrpc server. +At the moment it is going to be the with the exarpc.py (used with exabgp) and +with play.py for bgp functional testing. +exa_ methods apply to test/tools/exabgp_files/exarpc.py +play_ methods apply to test/tool/fastbgp/play.py (only with --evpn used) +""" + +import xmlrpclib + + +class BgpRpcClient(object): + """The client for SimpleXMLRPCServer.""" + + def __init__(self, peer_addr): + """Setup destination point of the rpc server""" + self.proxy = xmlrpclib.ServerProxy("http://{}:8000".format(peer_addr)) + + def exa_announce(self, full_exabgp_cmd): + """The full command to be passed to exabgp.""" + return self.proxy.execute(full_exabgp_cmd) + + def _exa_get_counter(self, msg_type): + """Gets counter form the server of given message type.""" + return self.proxy.get_counter(msg_type) + + def exa_get_received_open_count(self): + """Gets open messages counter.""" + return self._exa_get_counter('open') + + def exa_get_received_keepalive_count(self): + """Gets keepalive messages counter.""" + return self._exa_get_counter('keepalive') + + def exa_get_received_update_count(self): + """Gets update messges counter.""" + return self._exa_get_counter('update') + + def exa_get_received_route_refresh_count(self): + """Gets route refresh message counter.""" + return self._exa_get_counter('route_refresh') + + def _exa_clean_counter(self, msg_type): + """Cleans counter on the server of given message type.""" + return self.proxy.clean_counter(msg_type) + + def exa_clean_received_open_count(self): + """Cleans open message counter.""" + return self._exa_clean_counter('open') + + def exa_clean_received_keepalive_count(self): + """Cleans keepalive message counter.""" + return self._exa_clean_counter('keepalive') + + def exa_clean_received_update_count(self): + """Cleans update message counter.""" + return self._exa_clean_counter('update') + + def exa_clean_received_route_refresh_count(self): + """Cleans route refresh message counter.""" + return self._exa_clean_counter('route_refresh') + + def _exa_clean_message(self, msg_type): + """Cleans stored message on the server of given message type.""" + return self.proxy.clean_message(msg_type) + + def exa_clean_update_message(self): + """Cleans update message.""" + return self._exa_clean_message('update') + + def _exa_get_message(self, msg_type): + """Gets stored message on the server of given message type.""" + return self.proxy.get_message(msg_type) + + def exa_get_update_message(self, msg_only=True): + """Cleans update message. + + Exabgp provides more details than just message content (e.g. peer ip, + timestamp, ...). msg_only is a flag that we want just message content + and no details. + """ + msg = self._exa_get_message('update') + if not msg_only: + return msg + return msg if 'neighbor' not in msg else msg['neighbor']['message'] + + def play_send(self, hexstring): + """Sends given hex data, already encoded bgp update message is expected.""" + return self.proxy.send(hexstring) + + def play_get(self, what='update'): + """Gets the last received (update) mesage as hex string.""" + return self.proxy.get(what) + + def play_clean(self, what='update'): + """Cleans the message (update) on the server.""" + return self.proxy.clean(what) diff --git a/csit/libraries/SSHKeywords.robot b/csit/libraries/SSHKeywords.robot index 5b68f15edb..83e551466e 100644 --- a/csit/libraries/SSHKeywords.robot +++ b/csit/libraries/SSHKeywords.robot @@ -117,6 +117,10 @@ Virtual_Env_Create Execute_Command_At_Cwd_Should_Pass virtualenv ${SSHKeywords__current_venv_path} BuiltIn.Run_Keyword_And_Return Virtual_Env_Run_Cmd_At_Cwd pip install --upgrade pip +Virtual_Env_Delete + [Documentation] Deletes a directory with virtual env. + Execute_Command_At_Cwd_Should_Pass rm -rf ${SSHKeywords__current_venv_path} + Virtual_Env_Run_Cmd_At_Cwd [Arguments] ${cmd} ${log_on_success}=True ${log_on_failure}=True ${stderr_must_be_empty}=True [Documentation] Runs given command within activated virtual env and returns stdout. diff --git a/csit/suites/bgpcep/bgpfunct/010_bgp_functional_l3vpn.robot b/csit/suites/bgpcep/bgpfunct/010_bgp_functional_l3vpn.robot new file mode 100644 index 0000000000..7915da19c3 --- /dev/null +++ b/csit/suites/bgpcep/bgpfunct/010_bgp_functional_l3vpn.robot @@ -0,0 +1,201 @@ +*** Settings *** +Documentation Functional test suite for bgp - l3vpn-ipv4 +... +... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. +... +... This program and the accompanying materials are made available under the +... terms of the Eclipse Public License v1.0 which accompanies this distribution, +... and is available at http://www.eclipse.org/legal/epl-v10.html +... +... This suite tests advertising and receiveing routes with l3vpn content. +... It uses odl and exabgp as bgp peers. Routes advertized from odl +... are configured via application peer. Routes advertised from exabgp is +... statically configured in exabgp config file. +Suite Setup Start_Suite +Suite Teardown Stop_Suite +Library RequestsLibrary +Library SSHLibrary +Variables ${CURDIR}/../../../variables/Variables.py +Resource ${CURDIR}/../../../libraries/Utils.robot +Resource ${CURDIR}/../../../libraries/SetupUtils.robot +Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot +Resource ${CURDIR}/../../../libraries/KarafKeywords.robot +Resource ${CURDIR}/../../../libraries/SSHKeywords.robot +Library ${CURDIR}/../../../libraries/norm_json.py +Library ${CURDIR}/../../../libraries/BgpRpcClient.py ${TOOLS_SYSTEM_IP} + +*** Variables *** +${HOLDTIME} 180 +${DEVICE_NAME} controller-config +${BGP_PEER_NAME} example-bgp-peer +${RIB_INSTANCE} example-bgp-rib +${APP_PEER_NAME} example-bgp-peer-app +${CMD} env exabgp.tcp.port=1790 exabgp --debug +${BGP_VAR_FOLDER} ${CURDIR}/../../../variables/bgpfunctional +${BGP_L3VPN_DIR} ${BGP_VAR_FOLDER}/l3vpn_ipv4 +${DEFAUTL_EXA_CFG} exa.cfg +${L3VPN_EXA_CFG} bgp-l3vpn-ipv4.cfg +${L3VPN_RSPEMPTY} ${BGP_L3VPN_DIR}/bgp-l3vpn-ipv4-empty.json +${L3VPN_RSP} ${BGP_L3VPN_DIR}/bgp-l3vpn-ipv4.json +${L3VPN_URL} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/tables/bgp-types:ipv4-address-family/bgp-types:mpls-labeled-vpn-subsequent-address-family/bgp-vpn-ipv4:vpn-ipv4-routes +${CONFIG_SESSION} config-session +${EXARPCSCRIPT} ${CURDIR}/../../../../tools/exabgp_files/exarpc.py +${PEER_CHECK_URL} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/peer/bgp:%2F%2F + +*** Test Cases *** +Configure_App_Peer + [Documentation] Configures bgp application peer + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} RIB_INSTANCE_NAME=${RIB_INSTANCE} APP_PEER_ID=${ODL_SYSTEM_IP} + TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION} + +Reconfigure_ODL_To_Accept_Connection + [Documentation] Configures BGP peer module with initiate-connection set to false. + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT} + ... INITIATE=false RIB_INSTANCE_NAME=${RIB_INSTANCE} + TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION} + +L3vpn_Ipv4_To_Odl + [Documentation] Testing mpls vpn ipv4 routes reported to odl from exabgp + [Setup] Setup_Testcase ${L3VPN_EXA_CFG} ${L3VPN_URL} ${L3VPN_RSPEMPTY} + BuiltIn.Wait_Until_Keyword_Succeeds 15s 1s Verify Reported Data ${L3VPN_URL} ${L3VPN_RSP} + [Teardown] Teardown_Testcase ${L3VPN_URL} ${L3VPN_RSPEMPTY} + +L3vpn_Ipv4_From_Odl + [Documentation] Testing mpls vpn ipv4 routes reported from odl to exabgp + [Setup] Start_Tool_And_Verify_Connected ${DEFAUTL_EXA_CFG} + BgpRpcClient.exa_clean_update_message + &{mapping} BuiltIn.Create_Dictionary BGP_PEER_IP=${TOOLS_SYSTEM_IP} + TemplatedRequests.Post_As_Xml_Templated ${BGP_L3VPN_DIR}/route mapping=${mapping} session=${CONFIG_SESSION} + BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_Tool_Received_Update ${BGP_L3VPN_DIR}/route/exa-expected.json + [Teardown] Remove_Route_And_Stop_Tool + +Delete_Bgp_Peer_Configuration + [Documentation] Revert the BGP configuration to the original state: without any configured peers. + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} + TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION} + +Deconfigure_App_Peer + [Documentation] Revert the BGP configuration to the original state: without application peer + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} + TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION} + +*** Keywords *** +Start_Suite + [Documentation] Suite setup keyword + SetupUtils.Setup_Utils_For_Setup_And_Teardown + ${tools_system_conn_id}= SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=6s + Builtin.Set_Suite_Variable ${tools_system_conn_id} + Utils.Flexible_Mininet_Login ${TOOLS_SYSTEM_USER} + SSHKeywords.Virtual_Env_Create + SSHKeywords.Virtual_Env_Install_Package exabgp==3.4.16 + RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} + Upload_Config_Files + +Stop_Suite + [Documentation] Suite teardown keyword + SSHKeywords.Virtual_Env_Delete + SSHLibrary.Close_All_Connections + RequestsLibrary.Delete_All_Sessions + +Upload_Config_Files + [Documentation] Uploads exabgp config files and needed scripts + SSHLibrary.Put_File ${BGP_VAR_FOLDER}/${DEFAUTL_EXA_CFG} . + SSHLibrary.Put_File ${BGP_L3VPN_DIR}/${L3VPN_EXA_CFG} . + SSHLibrary.Put_File ${EXARPCSCRIPT} . + @{cfgfiles}= SSHLibrary.List_Files_In_Directory . *.cfg + : FOR ${cfgfile} IN @{cfgfiles} + \ SSHLibrary.Execute_Command sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile} + \ SSHLibrary.Execute_Command sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile} + \ SSHLibrary.Execute_Command sed -i -e 's/ROUTEREFRESH/disable/g' ${cfgfile} + \ SSHLibrary.Execute_Command sed -i -e 's/ADDPATH/disable/g' ${cfgfile} + \ ${stdout}= SSHLibrary.Execute_Command cat ${cfgfile} + \ Log ${stdout} + +Setup_Testcase + [Arguments] ${cfg_file} ${url} ${empty_response} + [Documentation] Verifies initial test condition and starts the tool + Verify_Reported_Data ${url} ${empty_response} + Start_Tool_And_Verify_Connected ${cfg_file} + +Start_Tool + [Arguments] ${cfg_file} ${mapping}={} + [Documentation] Start the tool ${cmd} ${cfg_file} + ${start_cmd} BuiltIn.Set_Variable ${cmd} ${cfg_file} + BuiltIn.Log ${start_cmd} + SSHKeywords.Virtual_Env_Activate_On_Current_Session log_output=${True} + ${output}= SSHLibrary.Write ${start_cmd} + BuiltIn.Log ${output} + +Verify_Tools_Connection + [Arguments] ${connected}=${True} + [Documentation] Checks peer presence in operational datastore + ${exp_status_code}= BuiltIn.Set_Variable_If ${connected} ${200} ${404} + ${rsp}= RequestsLibrary.Get Request ${CONFIG_SESSION} ${PEER_CHECK_URL}${TOOLS_SYSTEM_IP} + BuiltIn.Log ${rsp.content} + BuiltIn.Should_Be_Equal_As_Numbers ${exp_status_code} ${rsp.status_code} + +Start_Tool_And_Verify_Connected + [Arguments] ${cfg_file} + [Documentation] Start the tool and verify its connection + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + Start_Tool ${cfg_file} + BuiltIn.Wait_Until_Keyword_Succeeds 3x 3s Verify_Tools_Connection connected=${True} + +Stop_Tool + [Documentation] Stop the tool by sending ctrl+c + ${output}= SSHLibrary.Read + BuiltIn.Log ${output} + Utils.Write_Bare_Ctrl_C + ${output}= SSHLibrary.Read_Until_Prompt + BuiltIn.Log ${output} + SSHKeywords.Virtual_Env_Deactivate_On_Current_Session log_output=${True} + +Remove_Route_And_Stop_Tool + [Documentation] Removes configured route from application peer and stops the tool + &{mapping} BuiltIn.Create_Dictionary + TemplatedRequests.Delete_Templated ${BGP_L3VPN_DIR}/route mapping=${mapping} session=${CONFIG_SESSION} + Stop_Tool + +Teardown_Testcase + [Arguments] ${url} ${empty_response} + [Documentation] Testcse teardown with data verification + Stop_Tool + BuiltIn.Wait_Until_Keyword_Succeeds 3x 1s Verify_Reported_Data ${url} ${empty_response} + +Verify_Tool_Received_Update + [Arguments] ${exp_update_fn} + [Documentation] Verification of receiving particular update message + ${exp_update}= Get_Expected_Response_From_File ${exp_update_fn} + ${rcv_update_dict}= BgpRpcClient.exa_get_update_message msg_only=${True} + ${rcv_update}= BuiltIn.Evaluate json.dumps(${rcv_update_dict}) modules=json + ${keys_with_bits}= BuiltIn.Create_List op + ${received_json}= norm_json.Normalize_Json_Text ${rcv_update} keys_with_bits=${keys_with_bits} + ${expected_json}= norm_json.Normalize_Json_Text ${exp_update} keys_with_bits=${keys_with_bits} + BuiltIn.Log ${received_json} + BuiltIn.Log ${expected_json} + BuiltIn.Should_Be_Equal ${received_json} ${expected_json} + +Verify_Reported_Data + [Arguments] ${url} ${exprspfile} + [Documentation] Verifies expected response + ${keys_with_bits}= BuiltIn.Create_List op + ${expected_rsp}= Get_Expected_Response_From_File ${exprspfile} + ${expected_json}= norm_json.Normalize_Json_Text ${expected_rsp} keys_with_bits=${keys_with_bits} + ${rsp}= RequestsLibrary.Get_Request ${CONFIG_SESSION} ${url} + BuiltIn.Log ${rsp.content} + ${received_json}= norm_json.Normalize_Json_Text ${rsp.content} keys_with_bits=${keys_with_bits} + BuiltIn.Log ${received_json} + BuiltIn.Log ${expected_json} + BuiltIn.Should_Be_Equal ${received_json} ${expected_json} + +Get_Expected_Response_From_File + [Arguments] ${exprspfile} + [Documentation] Looks for release specific response first, then take default. + ${status} ${expresponse}= BuiltIn.Run_Keyword_And_Ignore_Error OperatingSystem.Get File ${exprspfile}.${ODL_STREAM} + Return From Keyword If '${status}' == 'PASS' ${expresponse} + ${expresponse}= OperatingSystem.Get File ${exprspfile} + [Return] ${expresponse} diff --git a/csit/suites/bgpcep/bgpfunct/020_bgp_functional_multipath.robot b/csit/suites/bgpcep/bgpfunct/020_bgp_functional_multipath.robot new file mode 100644 index 0000000000..9406b91230 --- /dev/null +++ b/csit/suites/bgpcep/bgpfunct/020_bgp_functional_multipath.robot @@ -0,0 +1,211 @@ +*** Settings *** +Documentation Functional test suite for bgp - n-path and all-path selection +... +... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. +... +... This program and the accompanying materials are made available under the +... terms of the Eclipse Public License v1.0 which accompanies this distribution, +... and is available at http://www.eclipse.org/legal/epl-v10.html +... +... This suite tests n-path and all-path selection policy. +... It uses odl and exabgp as bgp peers. Routes advertized from odl +... are configured via application peer. +Suite Setup Start_Suite +Suite Teardown Stop_Suite +Library RequestsLibrary +Library SSHLibrary +Variables ${CURDIR}/../../../variables/Variables.py +Resource ${CURDIR}/../../../libraries/Utils.robot +Resource ${CURDIR}/../../../libraries/SetupUtils.robot +Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot +Library ${CURDIR}/../../../libraries/norm_json.py +Library ${CURDIR}/../../../libraries/BgpRpcClient.py ${TOOLS_SYSTEM_IP} +Resource ${CURDIR}/../../../libraries/BGPcliKeywords.robot +Resource ${CURDIR}/../../../libraries/KarafKeywords.robot +Resource ${CURDIR}/../../../libraries/SSHKeywords.robot + +*** Variables *** +${HOLDTIME} 180 +${DEVICE_NAME} controller-config +${BGP_PEER_NAME} example-bgp-peer +${RIB_INSTANCE} example-bgp-rib +${APP_PEER_NAME} example-bgp-peer-app +${CMD} env exabgp.tcp.port=1790 exabgp --debug +${BGP_VAR_FOLDER} ${CURDIR}/../../../variables/bgpfunctional +${MULT_VAR_FOLDER} ${BGP_VAR_FOLDER}/multipaths +${DEFAUTL_RPC_CFG} exa.cfg +${CONFIG_SESSION} config-session +${EXARPCSCRIPT} ${CURDIR}/../../../../tools/exabgp_files/exarpc.py +${N_PATHS_VALUE} 2 +&{DEFAULT_MAPPING} ODLIP=${ODL_SYSTEM_IP} EXAIP=${TOOLS_SYSTEM_IP} NPATHS=${N_PATHS_VALUE} +@{PATH_ID_LIST} 1 2 3 +${PATH_ID_LIST_LEN} 3 +${NEXT_HOP_PREF} 100.100.100. +${RIB_URI} /restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules/module/odl-bgp-rib-impl-cfg:rib-impl/example-bgp-rib +${PEER_CHECK_URL} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/peer/bgp:%2F%2F +${NPATHS_SELM} n-paths +${ALLPATHS_SELM} all-paths +${ADDPATHCAP_SR} send\\/receive +${ADDPATHCAP_S} send +${ADDPATHCAP_R} receive +${ADDPATHCAP_D} disable + +*** Test Cases *** +Reconfigure_ODL_To_Accept_Connection + [Documentation] Configure BGP peer module with initiate-connection set to false. + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT} + ... INITIATE=false RIB_INSTANCE_NAME=${RIB_INSTANCE} + TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION} + +Odl Allpaths Exa SendReceived + [Documentation] all-paths selected policy selected + [Setup] Configure_Path_Selection_And_App_Peer_And_Connect_Peer ${ALLPATHS_SELM} ${ADDPATHCAP_SR} + Log_Loc_Rib_Operational + BuiltIn.Wait_Until_Keyword_Succeeds 6x 2s Verify_Expected_Update_Count ${PATH_ID_LIST_LEN} + [Teardown] Remove_App_Peer_Configuration_And_Stop_Tool + +Odl Npaths Exa SendReceived + [Documentation] n-paths policy selected on odl + [Setup] Configure_Path_Selection_And_App_Peer_And_Connect_Peer ${NPATHS_SELM} ${ADDPATHCAP_SR} + Log_Loc_Rib_Operational + BuiltIn.Wait_Until_Keyword_Succeeds 6x 2s Verify_Expected_Update_Count ${N_PATHS_VALUE} + [Teardown] Remove_App_Peer_Configuration_And_Stop_Tool + +Delete_Bgp_Peer_Configuration + [Documentation] Revert the BGP configuration to the original state: without any configured peers. + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} + TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION} + +*** Keywords *** +Start_Suite + [Documentation] Suite setup keyword + SetupUtils.Setup_Utils_For_Setup_And_Teardown + ${mininet_conn_id}= SSHLibrary.Open Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=6s + Builtin.Set Suite Variable ${mininet_conn_id} + Utils.Flexible Mininet Login ${TOOLS_SYSTEM_USER} + SSHKeywords.Virtual_Env_Create + SSHKeywords.Virtual_Env_Install_Package exabgp==3.4.16 + RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} + Upload_Config_Files + Configure_Odl_With_Multipaths + +Stop_Suite + [Documentation] Suite teardown keyword with ord rib restoration + SSHKeywords.Virtual_Env_Delete + TemplatedRequests.Put_As_Xml_To_Uri ${RIB_URI} ${rib_old} session=${CONFIG_SESSION} + SSHLibrary.Close_All_Connections + RequestsLibrary.Delete_All_Sessions + +Upload_Config_Files + [Arguments] ${addpath}=disable + [Documentation] Uploads exabgp config files + SSHLibrary.Put_File ${BGP_VAR_FOLDER}/${DEFAUTL_RPC_CFG} . + SSHLibrary.Put_File ${EXARPCSCRIPT} . + @{cfgfiles}= SSHLibrary.List_Files_In_Directory . *.cfg + : FOR ${cfgfile} IN @{cfgfiles} + \ SSHLibrary.Execute_Command sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile} + \ SSHLibrary.Execute_Command sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile} + \ SSHLibrary.Execute_Command sed -i -e 's/ROUTEREFRESH/enable/g' ${cfgfile} + \ SSHLibrary.Execute_Command sed -i -e 's/ADDPATH/${addpath}/g' ${cfgfile} + \ ${stdout}= SSHLibrary.Execute_Command cat ${cfgfile} + \ Log ${stdout} + +Configure_Path_Selection_And_App_Peer_And_Connect_Peer + [Arguments] ${odl_path_sel_mode} ${exa_add_path_value} + [Documentation] Setup test case keyword. Early after the path selection config the incomming connection + ... from exabgp towards odl may be rejected by odl due to config process not finished yet. Because of that + ... we try to start the tool 3 times in case early attempts fail. + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + Configure_Path_Selection_Mode ${odl_path_sel_mode} + Configure_App_Peer_With_Routes + Upload_Config_Files addpath=${exa_add_path_value} + BuiltIn.Wait_Until_Keyword_Succeeds 3x 1s Start_Tool_And_Verify_Connected ${DEFAUTL_RPC_CFG} + +Get_New_Config_File + [Arguments] ${cfg_template_file} ${mapping}={} ${new_cfg_name}=cfg.cfg + [Documentation] Returns a new config file from template + ${cfg_content}= TemplatedRequests.Resolve_Text_From_Template_File ${cfg_template} ${mapping} + SSHLibrary.Execute_Command echo ${cfg_content} > ${new_cfg_name} + [Return] ${new_cfg_name} + +Start_Tool + [Arguments] ${cfg_file} ${mapping}={} + [Documentation] Start the tool ${cmd} ${cfg_file} + ${start_cmd} BuiltIn.Set_Variable ${cmd} ${cfg_file} + BuiltIn.Log ${start_cmd} + SSHKeywords.Virtual_Env_Activate_On_Current_Session log_output=${True} + ${output}= SSHLibrary.Write ${start_cmd} + BuiltIn.Log ${output} + +Verify_Tools_Connection + [Arguments] ${connected}=${True} + [Documentation] Checks peer presence in operational datastore + ${exp_status_code}= BuiltIn.Set_Variable_If ${connected} ${200} ${404} + ${rsp}= RequestsLibrary.Get Request ${CONFIG_SESSION} ${PEER_CHECK_URL}${TOOLS_SYSTEM_IP} + BuiltIn.Log ${rsp.content} + BuiltIn.Should_Be_Equal_As_Numbers ${exp_status_code} ${rsp.status_code} + +Start_Tool_And_Verify_Connected + [Arguments] ${cfg_file} + [Documentation] Start the tool and verify its connection + Start_Tool ${cfg_file} + BuiltIn.Wait_Until_Keyword_Succeeds 3x 3s Verify_Tools_Connection connected=${True} + +Stop_Tool + [Documentation] Stop the tool by sending ctrl+c + ${output}= SSHLibrary.Read + BuiltIn.Log ${output} + Utils.Write_Bare_Ctrl_C + ${output}= SSHLibrary.Read_Until_Prompt + BuiltIn.Log ${output} + SSHKeywords.Virtual_Env_Deactivate_On_Current_Session log_output=${True} + +Remove_App_Peer_Configuration_And_Stop_Tool + Deconfigure_App_Peer + Stop_Tool + +Verify_Expected_Update_Count + [Arguments] ${exp_count} + [Documentation] Verify number of received update messages + ${tool_count}= BgpRpcClient.exa_get_received_update_count + BuiltIn.Should_Be_Equal_As_Numbers ${exp_count} ${tool_count} + +Configure_Path_Selection_Mode + [Arguments] ${psm} + [Documentation] Configure path selection mode and get rib information for potential debug purposes + &{mapping} BuiltIn.Create_Dictionary PATHSELMODE=${psm} + TemplatedRequests.Get_As_Xml_Templated ${MULT_VAR_FOLDER}/rib mapping=${mapping} session=${CONFIG_SESSION} + TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/module_psm mapping=${mapping} session=${CONFIG_SESSION} + +Configure_Odl_With_Multipaths + [Documentation] Configures odl to support n-paths or all-paths selection + ${mapping}= BuiltIn.Set Variable ${DEFAULT_MAPPING} + TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/module_n_paths mapping=${mapping} session=${CONFIG_SESSION} + TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/module_all_paths mapping=${mapping} session=${CONFIG_SESSION} + TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/service_psmf mapping=${mapping} session=${CONFIG_SESSION} + Configure_Path_Selection_Mode n-paths + TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/service_bpsm mapping=${mapping} session=${CONFIG_SESSION} + ${rib_old}= TemplatedRequests.Get_As_Xml_Templated ${MULT_VAR_FOLDER}/rib mapping=${mapping} session=${CONFIG_SESSION} + BuiltIn.Set_Suite_Variable ${rib_old} + TemplatedRequests.Put_As_Xml_Templated ${MULT_VAR_FOLDER}/rib mapping=${mapping} session=${CONFIG_SESSION} + +Log_Loc_Rib_Operational + ${rsp}= RequestsLibrary.Get Request ${CONFIG_SESSION} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/ + BuiltIn.Log ${rsp.content} + +Configure_App_Peer_With_Routes + [Documentation] Configure bgp application peer and fill it immediately with routes. + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} RIB_INSTANCE_NAME=${RIB_INSTANCE} APP_PEER_ID=${ODL_SYSTEM_IP} + TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION} + : FOR ${pathid} IN @{PATH_ID_LIST} + \ &{route_mapping} BuiltIn.Create_Dictionary NEXTHOP=${NEXT_HOP_PREF}${pathid} LOCALPREF=${pathid}00 PATHID=${pathid} + \ TemplatedRequests.Post_As_Xml_Templated ${MULT_VAR_FOLDER}/route mapping=${route_mapping} session=${CONFIG_SESSION} + +Deconfigure_App_Peer + [Documentation] Revert the BGP configuration to the original state: without application peer + &{route_mapping} BuiltIn.Create_Dictionary + TemplatedRequests.Delete_Templated ${MULT_VAR_FOLDER}/route mapping=${route_mapping} session=${CONFIG_SESSION} + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} + TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION} diff --git a/csit/suites/bgpcep/bgpfunct/030_bgp_functionalt_evpn.robot b/csit/suites/bgpcep/bgpfunct/030_bgp_functionalt_evpn.robot new file mode 100644 index 0000000000..a884f381a3 --- /dev/null +++ b/csit/suites/bgpcep/bgpfunct/030_bgp_functionalt_evpn.robot @@ -0,0 +1,421 @@ +*** Settings *** +Documentation Functional test for bgp - evpn +... +... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. +... +... This program and the accompanying materials are made available under the +... terms of the Eclipse Public License v1.0 which accompanies this distribution, +... and is available at http://www.eclipse.org/legal/epl-v10.html +... +... This suite tests advertising and receiveing routes with evpn content. +... It uses play.py and odl as bgp peers. Routes advertized from odl +... are configured via application peer. Routes advertised from play.py are +... stored in *.hex files. These files are used also as expected data which +... is recevied from odl. +Suite Setup Start_Suite +Suite Teardown Stop_Suite +Test Setup Verify Test Preconditions +Library RequestsLibrary +Library SSHLibrary +Variables ${CURDIR}/../../../variables/Variables.py +Resource ${CURDIR}/../../../libraries/Utils.robot +Resource ${CURDIR}/../../../libraries/SetupUtils.robot +Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot +Library ${CURDIR}/../../../libraries/norm_json.py +Library ${CURDIR}/../../../libraries/BgpRpcClient.py ${TOOLS_SYSTEM_IP} +Resource ${CURDIR}/../../../libraries/BGPcliKeywords.robot +Resource ${CURDIR}/../../../libraries/BGPSpeaker.robot +Resource ${CURDIR}/../../../libraries/KarafKeywords.robot +Resource ${CURDIR}/../../../libraries/SSHKeywords.robot + +*** Variables *** +${HOLDTIME} 180 +${DEVICE_NAME} controller-config +${BGP_PEER_NAME} example-bgp-peer +${RIB_INSTANCE} example-bgp-rib +${APP_PEER_NAME} example-bgp-peer-app +${CMD} env exabgp.tcp.port=1790 exabgp --debug +${BGP_VARIABLES_FOLDER} ${CURDIR}/../../../variables/bgpfunctional +${DEFAUTL_RPC_CFG} exa.cfg +${CONFIG_SESSION} config-session +${EVPN_VARIABLES_DIR} ${CURDIR}/../../../variables/bgpfunctional/l2vpn_evpn +${BGP_TOOL_LOG_LEVEL} debug +${PLAY_SCRIPT} ${CURDIR}/../../../../tools/fastbgp/play.py +${EVPN_CONF_URL} /restconf/config/bgp-rib:application-rib/example-app-rib/tables/odl-bgp-evpn:l2vpn-address-family/odl-bgp-evpn:evpn-subsequent-address-family/odl-bgp-evpn:evpn-routes/ +${EVPN_RIB_OPER_URL} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/tables/odl-bgp-evpn:l2vpn-address-family/odl-bgp-evpn:evpn-subsequent-address-family/odl-bgp-evpn:evpn-routes +${LOC_RIB_URL} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/loc-rib/tables/odl-bgp-evpn:l2vpn-address-family/odl-bgp-evpn:evpn-subsequent-address-family/odl-bgp-evpn:evpn-routes + +*** Test Cases *** +Configure_App_Peer + [Documentation] Configures bgp application peer + [Setup] KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} RIB_INSTANCE_NAME=${RIB_INSTANCE} APP_PEER_ID=${ODL_SYSTEM_IP} + TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION} + +Reconfigure_ODL_To_Accept_Connection + [Documentation] Configures BGP peer module with initiate-connection set to false. + [Setup] KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT} + ... INITIATE=false RIB_INSTANCE_NAME=${RIB_INSTANCE} + TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION} + +Start_Bgp_Peer + [Documentation] Start Python speaker to connect to ODL. We need to do WUKS until odl really starts to accept incomming bgp connection. The failure happens if the incomming connection comes too quickly after configuring the peer in the previous test case. + [Setup] KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + BuiltIn.Wait_Until_Keyword_Succeeds 3x 1s Start Bgp Peer + +Odl_To_Play_route_es_arb + [Template] Odl_To_Play_Template + route_es_arb + +Play_To_Odl_route_es_arb + [Template] Play_To_Odl_Template + route_es_arb + +Odl_To_Play_route_es_as + [Template] Odl_To_Play_Template + route_es_arb + +Play_To_Odl_route_es_as + [Template] Play_To_Odl_Template + route_es_as + +Odl_To_Play_route_es_lacp + [Template] Odl_To_Play_Template + route_es_arb + +Play_To_Odl_route_es_lacp + [Template] Play_To_Odl_Template + route_es_lacp + +Odl_To_Play_route_es_lan + [Template] Odl_To_Play_Template + route_es_arb + +Play_To_Odl_route_es_lan + [Template] Play_To_Odl_Template + route_es_lan + +Odl_To_Play_route_es_mac + [Template] Odl_To_Play_Template + route_es_arb + +Play_To_Odl_route_es_mac + [Template] Play_To_Odl_Template + route_es_mac + +Odl_To_Play_route_es_rou + [Template] Odl_To_Play_Template + route_es_arb + +Play_To_Odl_route_es_rou + [Template] Play_To_Odl_Template + route_es_rou + +Odl_To_Play_route_eth_arb + [Template] Odl_To_Play_Template + route_eth_arb + +Play_To_Odl_route_eth_arb + [Template] Play_To_Odl_Template + route_eth_arb + +Odl_To_Play_route_eth_as + [Template] Odl_To_Play_Template + route_eth_as + +Play_To_Odl_route_eth_as + [Template] Play_To_Odl_Template + route_eth_as + +Odl_To_Play_route_eth_lacp + [Template] Odl_To_Play_Template + route_eth_lacp + +Play_To_Odl_route_eth_lacp + [Template] Play_To_Odl_Template + route_eth_lacp + +Odl_To_Play_route_eth_lacp_extdef + [Template] Odl_To_Play_Template + route_eth_lacp_extdef + +Play_To_Odl_route_eth_lacp_extdef + [Template] Play_To_Odl_Template + route_eth_lacp_extdef + +Odl_To_Play_route_eth_lacp_extesilab + [Template] Odl_To_Play_Template + route_eth_lacp_extesilab + +Play_To_Odl_route_eth_lacp_extesilab + [Template] Play_To_Odl_Template + route_eth_lacp_extesilab + +Odl_To_Play_route_eth_lacp_extesr + [Template] Odl_To_Play_Template + route_eth_lacp_extesr + +Play_To_Odl_route_eth_lacp_extesr + [Template] Play_To_Odl_Template + route_eth_lacp_extesr + +Odl_To_Play_route_eth_lacp_extl2 + [Template] Odl_To_Play_Template + route_eth_lacp_extl2 + +Play_To_Odl_route_eth_lacp_extl2 + [Template] Play_To_Odl_Template + route_eth_lacp_extl2 + +Odl_To_Play_route_eth_lacp_extmac + [Template] Odl_To_Play_Template + route_eth_lacp_extmac + +Play_To_Odl_route_eth_lacp_extmac + [Template] Play_To_Odl_Template + route_eth_lacp_extmac + +Odl_To_Play_route_eth_lan + [Template] Odl_To_Play_Template + route_eth_lan + +Play_To_Odl_route_eth_lan + [Template] Play_To_Odl_Template + route_eth_lan + +Odl_To_Play_route_eth_mac + [Template] Odl_To_Play_Template + route_eth_mac + +Play_To_Odl_route_eth_mac + [Template] Play_To_Odl_Template + route_eth_mac + +Odl_To_Play_route_eth_rou + [Template] Odl_To_Play_Template + route_eth_rou + +Play_To_Odl_route_eth_rou + [Template] Play_To_Odl_Template + route_eth_rou + +Odl_To_Play_route_inc_arb + [Template] Odl_To_Play_Template + route_inc_arb + +Play_To_Odl_route_inc_arb + [Template] Play_To_Odl_Template + route_inc_arb + +Odl_To_Play_route_inc_as + [Template] Odl_To_Play_Template + route_inc_as + +Play_To_Odl_route_inc_as + [Template] Play_To_Odl_Template + route_inc_as + +Odl_To_Play_route_inc_lacp + [Template] Odl_To_Play_Template + route_inc_lacp + +Play_To_Odl_route_inc_lacp + [Template] Play_To_Odl_Template + route_inc_lacp + +Odl_To_Play_route_inc_lan + [Template] Odl_To_Play_Template + route_inc_lan + +Play_To_Odl_route_inc_lan + [Template] Play_To_Odl_Template + route_inc_lan + +Odl_To_Play_route_inc_mac + [Template] Odl_To_Play_Template + route_inc_mac + +Play_To_Odl_route_inc_mac + [Template] Play_To_Odl_Template + route_inc_mac + +Odl_To_Play_route_inc_rou + [Template] Odl_To_Play_Template + route_inc_rou + +Play_To_Odl_route_inc_rou + [Template] Play_To_Odl_Template + route_inc_rou + +Odl_To_Play_route_mac_arb + [Template] Odl_To_Play_Template + route_mac_arb + +Play_To_Odl_route_mac_arb + [Template] Play_To_Odl_Template + route_mac_arb + +Odl_To_Play_route_mac_as + [Template] Odl_To_Play_Template + route_mac_as + +Play_To_Odl_route_mac_as + [Template] Play_To_Odl_Template + route_mac_as + +Odl_To_Play_route_mac_lacp + [Template] Odl_To_Play_Template + route_mac_lacp + +Play_To_Odl_route_mac_lacp + [Template] Play_To_Odl_Template + route_mac_lacp + +Odl_To_Play_route_mac_lan + [Template] Odl_To_Play_Template + route_mac_lan + +Play_To_Odl_route_mac_lan + [Template] Play_To_Odl_Template + route_mac_lan + +Odl_To_Play_route_mac_mac + [Template] Odl_To_Play_Template + route_mac_mac + +Play_To_Odl_route_mac_mac + [Template] Play_To_Odl_Template + route_mac_mac + +Odl_To_Play_route_mac_rou + [Template] Odl_To_Play_Template + route_mac_rou + +Play_To_Odl_route_mac_rou + [Template] Play_To_Odl_Template + route_mac_rou + +Kill_Talking_BGP_Speaker + [Documentation] Abort the Python speaker + [Setup] KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + BGPSpeaker.Kill_BGP_Speaker + +Delete_Bgp_Peer_Configuration + [Documentation] Revert the BGP configuration to the original state: without any configured peers. + [Setup] KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} + TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION} + +Deconfigure_App_Peer + [Documentation] Revert the BGP configuration to the original state: without application peer + [Setup] KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} + TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION} + +*** Keywords *** +Start_Suite + [Documentation] Suite setup keyword + SetupUtils.Setup_Utils_For_Setup_And_Teardown + ${mininet_conn_id}= SSHLibrary.Open Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=6s + Builtin.Set Suite Variable ${mininet_conn_id} + Utils.Flexible Mininet Login ${TOOLS_SYSTEM_USER} + RequestsLibrary.Create Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} + SSHLibrary.Put File ${PLAY_SCRIPT} . + SSHKeywords.Assure_Library_Ipaddr target_dir=. + +Stop_Suite + [Documentation] Suite teardown keyword + SSHLibrary.Close_All_Connections + RequestsLibrary.Delete_All_Sessions + +Start_Bgp_Peer + [Documentation] Starts bgp peer and verifies that the peer runs. + BGPSpeaker.Start_BGP_Speaker --amount 0 --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_TOOL_LOG_LEVEL} --evpn --wfr 1 + BGPcliKeywords.Read_And_Fail_If_Prompt_Is_Seen + +Odl_To_Play_Template + [Arguments] ${totest} + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + ${data_xml}= OperatingSystem.Get_File ${EVPN_VARIABLES_DIR}/${totest}.xml + ${data_json}= OperatingSystem.Get_File ${EVPN_VARIABLES_DIR}/${totest}.json + ${announce_hex}= OperatingSystem.Get_File ${EVPN_VARIABLES_DIR}/announce_${totest}.hex + ${withdraw_hex}= OperatingSystem.Get_File ${EVPN_VARIABLES_DIR}/withdraw_${totest}.hex + BuiltIn.Log ${data_xml} + BuiltIn.Log ${data_json} + BuiltIn.Log ${announce_hex} + BuiltIn.Log ${withdraw_hex} + BgpRpcClient.play_clean + ${resp}= RequestsLibrary.Post_Request ${CONFIG_SESSION} ${EVPN_CONF_URL} data=${data_xml} headers=${HEADERS_XML} + BuiltIn.Should_Be_Equal_As_Numbers ${resp.status_code} 204 + ${resp}= RequestsLibrary.Get_Request ${CONFIG_SESSION} ${EVPN_CONF_URL} headers=${HEADERS_XML} + BuiltIn.Log ${resp.content} + ${aupdate}= BuiltIn.Wait_Until_Keyword_Succeeds 4x 2s Get_Update_Content + BuiltIn.Log ${aupdate} + BuiltIn.Should_Be_Equal_As_Strings ${aupdate} ${announce_hex} + BgpRpcClient.play_clean + Remove_Configured_Routes + ${wupdate}= BuiltIn.Wait_Until_Keyword_Succeeds 4x 2s Get_Update_Content + BuiltIn.Log ${wupdate} + BuiltIn.Should Be Equal As Strings ${wupdate} ${withdraw_hex} + [Teardown] Remove_Configured_Routes + +Play_To_Odl_Template + [Arguments] ${totest} + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + ${data_xml}= OperatingSystem.Get_File ${EVPN_VARIABLES_DIR}/${totest}.xml + ${data_json}= OperatingSystem.Get_File ${EVPN_VARIABLES_DIR}/${totest}.json + ${announce_hex}= OperatingSystem.Get_File ${EVPN_VARIABLES_DIR}/announce_${totest}.hex + ${withdraw_hex}= OperatingSystem.Get_File ${EVPN_VARIABLES_DIR}/withdraw_${totest}.hex + ${empty_routes}= OperatingSystem.Get_File ${EVPN_VARIABLES_DIR}/empty_routes.json + BuiltIn.Set_Suite_Variable ${withdraw_hex} + BuiltIn.Set_Suite_Variable ${empty_routes} + BuiltIn.Log ${data_xml} + BuiltIn.Log ${data_json} + BuiltIn.Log ${announce_hex} + BuiltIn.Log ${withdraw_hex} + BuiltIn.Log ${empty_routes} + BgpRpcClient.play_clean + BgpRpcClient.play_send ${announce_hex} + BuiltIn.Wait_Until_Keyword_Succeeds 4x 2s Loc_Rib_Presnece ${data_json} + BgpRpcClient.play_send ${withdraw_hex} + BuiltIn.Wait_Until_Keyword_Succeeds 4x 2s Loc_Rib_Presnece ${empty_routes} + [Teardown] Withdraw_Route_And_Verify ${withdraw_hex} + +Verify_Test_Preconditions + ${resp}= RequestsLibrary.Get_Request ${CONFIG_SESSION} ${EVPN_CONF_URL} + BuiltIn.Should_Be_Equal_As_Numbers ${resp.status_code} 404 + ${empty_routes}= OperatingSystem.Get_File ${EVPN_VARIABLES_DIR}/empty_routes.json + Loc_Rib_Presnece ${empty_routes} + +Remove_Configured_Routes + ${rsp}= RequestsLibrary.Get_Request ${CONFIG_SESSION} ${LOC_RIB_URL} headers=${HEADERS} + Log ${rsp.content} + ${resp}= RequestsLibrary.Delete_Request ${CONFIG_SESSION} ${EVPN_CONF_URL} + BuiltIn.Should_Be_Equal_As_Numbers ${resp.status_code} 200 + +Withdraw_Route_And_Verify + [Arguments] ${withdraw_hex} + [Documentation] Sends withdraw update message from exabgp and verifies route removal from odl's rib + BgpRpcClient.play_send ${withdraw_hex} + BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s Loc Rib Presnece ${empty_routes} + +Get_Update_Content + [Documentation] Gets received data from odl's peer + ${resp}= RequestsLibrary.Get_Request ${CONFIG_SESSION} ${EVPN_RIB_OPER_URL} headers=${HEADERS_XML} + BuiltIn.Log ${resp.content} + ${update}= BgpRpcClient.play_get + BuiltIn.Should_Not_Be_Equal ${update} ${Empty} + [Return] ${update} + +Loc_Rib_Presnece + [Arguments] ${exp_content} + [Documentation] Verifies if loc-rib contains expected data + ${rsp}= RequestsLibrary.Get_Request ${CONFIG_SESSION} ${LOC_RIB_URL} headers=${HEADERS} + Log ${rsp.content} + ${keys_with_bits}= BuiltIn.Create_List op + ${received_json}= norm_json.Normalize_Json_Text ${rsp.content} keys_with_bits=${keys_with_bits} + BuiltIn.Log ${received_json} + ${expected_json}= norm_json.Normalize_Json_Text ${exp_content} keys_with_bits=${keys_with_bits} + BuiltIn.Log ${expected_json} + BuiltIn.Should_Be_Equal ${received_json} ${expected_json} diff --git a/csit/suites/bgpcep/bgpfunct/040_bgp_functional_route_ref.robot b/csit/suites/bgpcep/bgpfunct/040_bgp_functional_route_ref.robot new file mode 100644 index 0000000000..15bfaf3301 --- /dev/null +++ b/csit/suites/bgpcep/bgpfunct/040_bgp_functional_route_ref.robot @@ -0,0 +1,189 @@ +*** Settings *** +Documentation Functional test for bgp - route refresh +... +... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. +... +... This program and the accompanying materials are made available under the +... terms of the Eclipse Public License v1.0 which accompanies this distribution, +... and is available at http://www.eclipse.org/legal/epl-v10.html +... +... This suite tests sending and receiveing route request message. +... It uses odl and exabgp as bgp peers. +... Sending route refresh message from odl is initiated via restconf. +... If route refresh received by odl also correct advertising of routes +... is verified. Receiving of route refresh by odl is verified by +... checking appropriate message counter via ${JOLOKURL}. Feature +... odl-jolokia is required by this test suite. +Suite Setup Start_Suite +Suite Teardown Stop_Suite +Library RequestsLibrary +Library SSHLibrary +Variables ${CURDIR}/../../../variables/Variables.py +Resource ${CURDIR}/../../../libraries/Utils.robot +Resource ${CURDIR}/../../../libraries/SetupUtils.robot +Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot +Resource ${CURDIR}/../../../libraries/KarafKeywords.robot +Resource ${CURDIR}/../../../libraries/SSHKeywords.robot +Library ${CURDIR}/../../../libraries/norm_json.py +Library ${CURDIR}/../../../libraries/BgpRpcClient.py ${TOOLS_SYSTEM_IP} + +*** Variables *** +${HOLDTIME} 180 +${DEVICE_NAME} controller-config +${BGP_PEER_NAME} example-bgp-peer +${RIB_INSTANCE} example-bgp-rib +${APP_PEER_NAME} example-bgp-peer-app +${CMD} env exabgp.tcp.port=1790 exabgp --debug +${BGP_VAR_FOLDER} ${CURDIR}/../../../variables/bgpfunctional +${BGP_RR_VAR_FOLDER} ${BGP_VAR_FOLDER}/route_refresh +${BGP_CFG_NAME} exa.cfg +${CONFIG_SESSION} config-session +${EXARPCSCRIPT} ${CURDIR}/../../../../tools/exabgp_files/exarpc.py +${JOLOKURL} /jolokia/read/org.opendaylight.controller:instanceName=${BGP_PEER_NAME},type=RuntimeBean,moduleFactoryName=bgp-peer +${PEER_CHECK_URL} /restconf/operational/bgp-rib:bgp-rib/rib/example-bgp-rib/peer/bgp:%2F%2F + +*** Test Cases *** +Configure_App_Peer + [Documentation] Configure bgp application peer + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} RIB_INSTANCE_NAME=${RIB_INSTANCE} APP_PEER_ID=${ODL_SYSTEM_IP} + TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION} + +Reconfigure_ODL_To_Accept_Connection + [Documentation] Configure BGP peer module with initiate-connection set to false. + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT} + ... INITIATE=false RIB_INSTANCE_NAME=${RIB_INSTANCE} + TemplatedRequests.Put_As_Xml_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION} + +Exa_To_Send_Route_Request + [Documentation] Exabgp sends route refresh and count received updates + [Setup] Configure_Routes_And_Start_Tool ${BGP_CFG_NAME} + Verify_Odl_Received_Route_Request 0 + BgpRpcClient.exa_clean_received_update_count + BgpRpcClient.exa_announce announce route-refresh ipv4 unicast + BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_Odl_Received_Route_Request 1 + BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_Tool_Received_Updates ${nr_configured_routes} + [Teardown] Deconfigure_Routes_And_Stop_Tool + +Odl_To_Send_Route_Request + [Documentation] Sends route requests and checks if exabgp receives it + [Setup] Start_Tool_And_Verify_Connected ${BGP_CFG_NAME} + BgpRpcClient.exa_clean_received_route_refresh_count + &{mapping} BuiltIn.Create_Dictionary BGP_PEER_IP=${TOOLS_SYSTEM_IP} + TemplatedRequests.Post_As_Xml_Templated ${BGP_VAR_FOLDER}/route_refresh mapping=${mapping} session=${CONFIG_SESSION} + BuiltIn.Wait_Until_Keyword_Succeeds 5x 2s Verify_Odl_Sent_Route_Request 1 + [Teardown] Stop_Tool + +Delete_Bgp_Peer_Configuration + [Documentation] Revert the BGP configuration to the original state: without any configured peers. + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} + TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/bgp_peer mapping=${mapping} session=${CONFIG_SESSION} + +Deconfigure_App_Peer + [Documentation] Revert the BGP configuration to the original state: without application peer + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} APP_PEER_NAME=${APP_PEER_NAME} + TemplatedRequests.Delete_Templated ${BGP_VAR_FOLDER}/app_peer mapping=${mapping} session=${CONFIG_SESSION} + +*** Keywords *** +Start_Suite + [Documentation] Suite setup keyword + SetupUtils.Setup_Utils_For_Setup_And_Teardown + ${mininet_conn_id}= SSHLibrary.Open Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=6s + Builtin.Set_Suite_Variable ${mininet_conn_id} + Utils.Flexible_Mininet_Login ${TOOLS_SYSTEM_USER} + SSHKeywords.Virtual_Env_Create + SSHKeywords.Virtual_Env_Install_Package exabgp==3.4.16 + RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} + Upload_Config_Files + +Stop_Suite + [Documentation] Suite teardown keyword + SSHKeywords.Virtual_Env_Delete + SSHLibrary.Close_All_Connections + RequestsLibrary.Delete_All_Sessions + +Upload_Config_Files + [Documentation] Uploads exabgp config files + SSHLibrary.Put_File ${BGP_VAR_FOLDER}/${BGP_CFG_NAME} . + SSHLibrary.Put_File ${EXARPCSCRIPT} . + @{cfgfiles}= SSHLibrary.List_Files_In_Directory . *.cfg + : FOR ${cfgfile} IN @{cfgfiles} + \ SSHLibrary.Execute_Command sed -i -e 's/EXABGPIP/${TOOLS_SYSTEM_IP}/g' ${cfgfile} + \ SSHLibrary.Execute_Command sed -i -e 's/ODLIP/${ODL_SYSTEM_IP}/g' ${cfgfile} + \ SSHLibrary.Execute_Command sed -i -e 's/ROUTEREFRESH/enable/g' ${cfgfile} + \ SSHLibrary.Execute_Command sed -i -e 's/ADDPATH/disable/g' ${cfgfile} + \ ${stdout}= SSHLibrary.Execute_Command cat ${cfgfile} + \ Log ${stdout} + +Start_Tool + [Arguments] ${cfg_file} ${mapping}={} + [Documentation] Start the tool ${cmd} ${cfg_file} + ${start_cmd} BuiltIn.Set_Variable ${cmd} ${cfg_file} + BuiltIn.Log ${start_cmd} + SSHKeywords.Virtual_Env_Activate_On_Current_Session log_output=${True} + ${output}= SSHLibrary.Write ${start_cmd} + BuiltIn.Log ${output} + +Verify_Tools_Connection + [Arguments] ${connected}=${True} + [Documentation] Checks peer presence in operational datastore + ${exp_status_code}= BuiltIn.Set_Variable_If ${connected} ${200} ${404} + ${rsp}= RequestsLibrary.Get Request ${CONFIG_SESSION} ${PEER_CHECK_URL}${TOOLS_SYSTEM_IP} + BuiltIn.Log ${rsp.content} + BuiltIn.Should_Be_Equal_As_Numbers ${exp_status_code} ${rsp.status_code} + +Start_Tool_And_Verify_Connected + [Arguments] ${cfg_file} + [Documentation] Start the tool and verify its connection + KarafKeywords.Log_Testcase_Start_To_Controller_Karaf + Start_Tool ${cfg_file} + BuiltIn.Wait_Until_Keyword_Succeeds 3x 3s Verify_Tools_Connection connected=${True} + +Stop_Tool + [Documentation] Stop the tool by sending ctrl+c + ${output}= SSHLibrary.Read + BuiltIn.Log ${output} + Utils.Write_Bare_Ctrl_C + ${output}= SSHLibrary.Read_Until_Prompt + BuiltIn.Log ${output} + SSHKeywords.Virtual_Env_Deactivate_On_Current_Session log_output=${True} + +Configure_Routes_And_Start_Tool + [Arguments] ${cfg_file} + [Documentation] Setup keyword for exa to odl test case + : FOR ${prefix} IN 1.1.1.1/32 2.2.2.2/32 + \ &{mapping} BuiltIn.Create_Dictionary PREFIX=${prefix} + \ TemplatedRequests.Post_As_Xml_Templated ${BGP_RR_VAR_FOLDER}/route mapping=${mapping} session=${CONFIG_SESSION} + BuiltIn.Set_Suite_Variable ${nr_configured_routes} 2 + Start_Tool_And_Verify_Connected ${cfg_file} + BuiltIn.Wait_Until_Keyword_Succeeds 3x 3s Verify_Tool_Received_Updates ${nr_configured_routes} + +Deconfigure_Routes_And_Stop_Tool + [Documentation] Teardown keyword for exa to odl test case + Stop_Tool + &{mapping} BuiltIn.Create_Dictionary PREFIX=${prefix} + TemplatedRequests.Delete_Templated ${BGP_RR_VAR_FOLDER}/route mapping=${mapping} session=${CONFIG_SESSION} + +Verify_Odl_Sent_Route_Request + [Arguments] ${expcount} + [Documentation] Compares expected count of route request messages on exabgp side + ${count}= BgpRpcClient.exa_get_received_route_refresh_count + BuiltIn.Should Be Equal As Numbers ${count} ${expcount} + +Verify_Odl_Received_Route_Request + [Arguments] ${expcount} + [Documentation] Gets numebr of received route requests and compares with given expected count + ${rsp}= RequestsLibrary.Get_Request ${CONFIG_SESSION} ${JOLOKURL} + BuiltIn.Log ${rsp.content} + BuiltIn.Should_Be_Equal_As_Numbers ${rsp.status_code} 200 + BuiltIn.Should_Be_Equal_As_Numbers ${rsp.json()['status']} 200 + BuiltIn.Should_Be_Equal_As_Numbers ${rsp.json()['value']['BgpSessionState']['messagesStats']['routeRefreshMsgs']['received']['count']['value']} ${expcount} + +Verify_Tool_Received_Updates + [Arguments] ${expcount} + [Documentation] Gets numebr of received update requests and compares with given expected count + ${count_recv}= BgpRpcClient.exa_get_received_update_count + BuiltIn.Should Be Equal As Numbers ${count_recv} ${expcount} diff --git a/csit/testplans/bgpcep-functional.txt b/csit/testplans/bgpcep-functional.txt new file mode 100644 index 0000000000..d552e61bab --- /dev/null +++ b/csit/testplans/bgpcep-functional.txt @@ -0,0 +1,12 @@ +# Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License v1.0 which accompanies this distribution, +# and is available at http://www.eclipse.org/legal/epl-v10.html + +# Place the suites in run order: +integration/test/csit/suites/netconf/ready/netconfready.robot +integration/test/csit/suites/bgpcep/bgpfunct/010_bgp_functional_l3vpn.robot +integration/test/csit/suites/bgpcep/bgpfunct/030_bgp_functionalt_evpn.robot +integration/test/csit/suites/bgpcep/bgpfunct/040_bgp_functional_route_ref.robot +integration/test/csit/suites/bgpcep/bgpfunct/020_bgp_functional_multipath.robot diff --git a/csit/testplans/bgpcep-userfeatures-beryllium.txt b/csit/testplans/bgpcep-userfeatures-beryllium.txt index 4b0f2db070..ec629c3eb4 100644 --- a/csit/testplans/bgpcep-userfeatures-beryllium.txt +++ b/csit/testplans/bgpcep-userfeatures-beryllium.txt @@ -15,4 +15,3 @@ integration/test/csit/suites/bgpcep/bgpuser/ibgp_peers_basic.robot integration/test/csit/suites/bgpcep/bgpuser/ebgp_peers_basic.robot integration/test/csit/suites/bgpcep/bgpflowspec/010_bgp_flowspec.robot integration/test/csit/suites/bgpcep/bgpuser/ibgp_peer_lsp.robot - diff --git a/csit/testplans/bgpcep-userfeatures.txt b/csit/testplans/bgpcep-userfeatures.txt index b4d1806683..938aa56672 100644 --- a/csit/testplans/bgpcep-userfeatures.txt +++ b/csit/testplans/bgpcep-userfeatures.txt @@ -15,4 +15,7 @@ integration/test/csit/suites/bgpcep/bgpuser/ibgp_peers_basic.robot integration/test/csit/suites/bgpcep/bgpuser/ebgp_peers_basic.robot integration/test/csit/suites/bgpcep/bgpflowspec/010_bgp_flowspec.robot integration/test/csit/suites/bgpcep/bgpuser/ibgp_peer_lsp.robot - +integration/test/csit/suites/bgpcep/bgpfunct/010_bgp_functional_l3vpn.robot +integration/test/csit/suites/bgpcep/bgpfunct/030_bgp_functionalt_evpn.robot +integration/test/csit/suites/bgpcep/bgpfunct/040_bgp_functional_route_ref.robot +integration/test/csit/suites/bgpcep/bgpfunct/020_bgp_functional_multipath.robot diff --git a/csit/variables/bgpfunctional/app_peer/data.xml b/csit/variables/bgpfunctional/app_peer/data.xml new file mode 100644 index 0000000000..8e8ea290a9 --- /dev/null +++ b/csit/variables/bgpfunctional/app_peer/data.xml @@ -0,0 +1,18 @@ + + x:bgp-application-peer + $APP_PEER_NAME + $APP_PEER_ID + + x:rib-instance + $RIB_INSTANCE_NAME + + example-app-rib + + x:dom-async-data-broker + pingpong-broker + + + prefix:bgp-peer-registry + global-bgp-peer-registry + + diff --git a/csit/variables/bgpfunctional/app_peer/location.uri b/csit/variables/bgpfunctional/app_peer/location.uri new file mode 100644 index 0000000000..19e585f7a6 --- /dev/null +++ b/csit/variables/bgpfunctional/app_peer/location.uri @@ -0,0 +1 @@ +restconf/config/network-topology:network-topology/topology/topology-netconf/node/$DEVICE_NAME/yang-ext:mount/config:modules/module/odl-bgp-rib-impl-cfg:bgp-application-peer/$APP_PEER_NAME diff --git a/csit/variables/bgpfunctional/bgp_peer/data.xml b/csit/variables/bgpfunctional/bgp_peer/data.xml new file mode 100644 index 0000000000..35dd1478d6 --- /dev/null +++ b/csit/variables/bgpfunctional/bgp_peer/data.xml @@ -0,0 +1,48 @@ + + prefix:bgp-peer + $BGP_NAME + $IP + $PEER_PORT + $HOLDTIME + $INITIATE + + prefix:rib-instance + $RIB_INSTANCE_NAME + + + prefix:bgp-peer-registry + global-bgp-peer-registry + + + binding:binding-rpc-registry + binding-rpc-broker + + + prefix:bgp-table-type + ipv4-unicast + + + prefix:bgp-table-type + ipv6-unicast + + + prefix:bgp-table-type + linkstate + + + prefix:bgp-table-type + ipv4-l3vpn + + + prefix:bgp-table-type + evpn + + + prefix:add-path + ipv4-unicast-both + + + prefix:add-path + ipv6-unicast-both + + diff --git a/csit/variables/bgpfunctional/bgp_peer/location.uri b/csit/variables/bgpfunctional/bgp_peer/location.uri new file mode 100644 index 0000000000..b88d6eb86c --- /dev/null +++ b/csit/variables/bgpfunctional/bgp_peer/location.uri @@ -0,0 +1 @@ +restconf/config/network-topology:network-topology/topology/topology-netconf/node/$DEVICE_NAME/yang-ext:mount/config:modules/module/odl-bgp-rib-impl-cfg:bgp-peer/$BGP_NAME diff --git a/csit/variables/bgpfunctional/exa.cfg b/csit/variables/bgpfunctional/exa.cfg new file mode 100644 index 0000000000..da41c0abfe --- /dev/null +++ b/csit/variables/bgpfunctional/exa.cfg @@ -0,0 +1,23 @@ +neighbor ODLIP { +router-id EXABGPIP; +local-address EXABGPIP; +local-as 64496; +peer-as 64496; + capability { + route-refresh ROUTEREFRESH; + add-path ADDPATH; + } + + family { + ipv4 unicast; + ipv4 mpls-vpn; + } + + process exarpcserver { + run exarpc.py --host EXABGPIP; + encoder json; + receive-routes; + neighbor-changes; + } +} + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_arb.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_arb.hex new file mode 100644 index 0000000000..3b7658c1c9 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_arb.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004a02000000334001010040020040050400000064800e2200194604c714a629000417000219999999000100000000000000000000202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_as.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_as.hex new file mode 100644 index 0000000000..d288396e9c --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_as.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004a02000000334001010040020040050400000064800e2200194604c714a62900041700021999999900010501010101000007d000202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_lacp.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_lacp.hex new file mode 100644 index 0000000000..d2fb576fee --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_lacp.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004a02000000334001010040020040050400000064800e2200194604c714a629000417000219999999000101f20cdd809ff7001600202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_lan.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_lan.hex new file mode 100644 index 0000000000..bff2ddf51e --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_lan.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004a02000000334001010040020040050400000064800e2200194604c714a629000417000219999999000102f20cdd809ff7001400202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_mac.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_mac.hex new file mode 100644 index 0000000000..f4827b3b14 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_mac.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004a02000000334001010040020040050400000064800e2200194604c714a629000417000219999999000103f20cdd809ff70007d0202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_rou.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_rou.hex new file mode 100644 index 0000000000..258f8f03c3 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_es_rou.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004a02000000334001010040020040050400000064800e2200194604c714a6290004170002199999990001042b2b2b2b000007d000202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_arb.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_arb.hex new file mode 100644 index 0000000000..83dbba41a7 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_arb.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004c02000000354001010040020040050400000064800e2400194604c714a6290001190002199999990001000000000000000000000000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_as.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_as.hex new file mode 100644 index 0000000000..ccacba02ba --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_as.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004c02000000354001010040020040050400000064800e2400194604c714a62900011900021999999900010501010101000007d0000000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp.hex new file mode 100644 index 0000000000..ba75d1afeb --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004c02000000354001010040020040050400000064800e2400194604c714a629000119000219999999000101f20cdd809ff70016000000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extdef.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extdef.hex new file mode 100644 index 0000000000..559c74c3ae --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extdef.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005702000000404001010040020040050400000064800e2400194604c714a629000119000219999999000101f20cdd809ff70016000000000a05dc10c01008030d000000000000 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extesilab.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extesilab.hex new file mode 100644 index 0000000000..089f3e5421 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extesilab.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005702000000404001010040020040050400000064800e2400194604c714a629000119000219999999000101f20cdd809ff70016000000000a05dc10c01008060101000005dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extesr.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extesr.hex new file mode 100644 index 0000000000..377032c188 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extesr.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005702000000404001010040020040050400000064800e2400194604c714a629000119000219999999000101f20cdd809ff70016000000000a05dc10c010080602f20cdd809ff8 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extl2.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extl2.hex new file mode 100644 index 0000000000..ddc0d150af --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extl2.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005702000000404001010040020040050400000064800e2400194604c714a629000119000219999999000101f20cdd809ff70016000000000a05dc10c010084604000700c80000 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extmac.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extmac.hex new file mode 100644 index 0000000000..a5db24f477 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lacp_extmac.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005702000000404001010040020040050400000064800e2400194604c714a629000119000219999999000101f20cdd809ff70016000000000a05dc10c0100806000100000000c8 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lan.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lan.hex new file mode 100644 index 0000000000..1c24bad445 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_lan.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004c02000000354001010040020040050400000064800e2400194604c714a629000119000219999999000102f20cdd809ff70014000000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_mac.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_mac.hex new file mode 100644 index 0000000000..e2c772a042 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_mac.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004c02000000354001010040020040050400000064800e2400194604c714a629000119000219999999000103f20cdd809ff70007d00000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_rou.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_rou.hex new file mode 100644 index 0000000000..c7a0d4aae8 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_eth_rou.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff004c02000000354001010040020040050400000064800e2400194604c714a6290001190002199999990001042b2b2b2b000007d0000000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_arb.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_arb.hex new file mode 100644 index 0000000000..07e9f012ed --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_arb.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800e1c00194604c714a62900031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_as.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_as.hex new file mode 100644 index 0000000000..07e9f012ed --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_as.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800e1c00194604c714a62900031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_lacp.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_lacp.hex new file mode 100644 index 0000000000..07e9f012ed --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_lacp.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800e1c00194604c714a62900031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_lan.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_lan.hex new file mode 100644 index 0000000000..07e9f012ed --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_lan.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800e1c00194604c714a62900031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_mac.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_mac.hex new file mode 100644 index 0000000000..07e9f012ed --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_mac.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800e1c00194604c714a62900031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_rou.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_rou.hex new file mode 100644 index 0000000000..07e9f012ed --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_inc_rou.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800e1c00194604c714a62900031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_arb.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_arb.hex new file mode 100644 index 0000000000..c3dc06b7ff --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_arb.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005b02000000444001010040020040050400000064800e3300194604c714a6290002280002199999990001000000000000000000000000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_as.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_as.hex new file mode 100644 index 0000000000..3d70d5b78e --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_as.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005b02000000444001010040020040050400000064800e3300194604c714a62900022800021999999900010501010101000007d0000000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_lacp.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_lacp.hex new file mode 100644 index 0000000000..53e1890e65 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_lacp.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005b02000000444001010040020040050400000064800e3300194604c714a629000228000219999999000101f20cdd809ff70016000000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_lan.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_lan.hex new file mode 100644 index 0000000000..718357f393 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_lan.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005b02000000444001010040020040050400000064800e3300194604c714a629000228000219999999000102f20cdd809ff70014000000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_mac.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_mac.hex new file mode 100644 index 0000000000..439be9e736 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_mac.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005b02000000444001010040020040050400000064800e3300194604c714a629000228000219999999000103f20cdd809ff70007d00000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_rou.hex b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_rou.hex new file mode 100644 index 0000000000..0b03e719fc --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/announce_route_mac_rou.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff005b02000000444001010040020040050400000064800e3300194604c714a6290002280002199999990001042b2b2b2b000007d0000000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/empty_routes.json b/csit/variables/bgpfunctional/l2vpn_evpn/empty_routes.json new file mode 100644 index 0000000000..824ab4a0e2 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/empty_routes.json @@ -0,0 +1,3 @@ +{ + "odl-bgp-evpn:evpn-routes": {} +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_arb.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_arb.json new file mode 100644 index 0000000000..4d04e53d45 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_arb.json @@ -0,0 +1,28 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "es-route": { + "orig-route-ip": "43.43.43.43", + "arbitrary": { + "arbitrary": "AAAAAAAAAAAA" + } + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "BBcAAhmZmZkAAQAAAAAAAAAAAAAgKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_arb.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_arb.xml new file mode 100644 index 0000000000..a6a0807612 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_arb.xml @@ -0,0 +1,23 @@ + + + BBcAAhmZmZkAAQAAAAAAAAAAAAAgKysrKw== + 429496729:1 + + 43.43.43.43 + + AAAAAAAAAAAA + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_as.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_as.json new file mode 100644 index 0000000000..96e31b1b1a --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_as.json @@ -0,0 +1,29 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "es-route": { + "as-generated": { + "as": 16843009, + "local-discriminator": 2000 + }, + "orig-route-ip": "43.43.43.43" + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "BBcAAhmZmZkAAQUBAQEBAAAH0AAgKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_as.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_as.xml new file mode 100644 index 0000000000..30d6b7f088 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_as.xml @@ -0,0 +1,24 @@ + + + BBcAAhmZmZkAAQUBAQEBAAAH0AAgKysrKw== + 429496729:1 + + 43.43.43.43 + + 16843009 + 2000 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lacp.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lacp.json new file mode 100644 index 0000000000..cd4cc44baa --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lacp.json @@ -0,0 +1,29 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "es-route": { + "orig-route-ip": "43.43.43.43", + "lacp-auto-generated": { + "ce-lacp-port-key": 22, + "ce-lacp-mac-address": "f2:0c:dd:80:9f:f7" + } + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "BBcAAhmZmZkAAQHyDN2An/cAFgAgKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lacp.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lacp.xml new file mode 100644 index 0000000000..7c8a821752 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lacp.xml @@ -0,0 +1,24 @@ + + + BBcAAhmZmZkAAQHyDN2An/cAFgAgKysrKw== + 429496729:1 + + 43.43.43.43 + + f2:0c:dd:80:9f:f7 + 22 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lan.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lan.json new file mode 100644 index 0000000000..175ea670e0 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lan.json @@ -0,0 +1,29 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "es-route": { + "lan-auto-generated": { + "root-bridge-priority": 20, + "root-bridge-mac-address": "f2:0c:dd:80:9f:f7" + }, + "orig-route-ip": "43.43.43.43" + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "BBcAAhmZmZkAAQLyDN2An/cAFAAgKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lan.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lan.xml new file mode 100644 index 0000000000..f87ccc9731 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_lan.xml @@ -0,0 +1,24 @@ + + + BBcAAhmZmZkAAQLyDN2An/cAFAAgKysrKw== + 429496729:1 + + 43.43.43.43 + + f2:0c:dd:80:9f:f7 + 20 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_mac.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_mac.json new file mode 100644 index 0000000000..d0972cedfc --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_mac.json @@ -0,0 +1,29 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "es-route": { + "mac-auto-generated": { + "system-mac-address": "f2:0c:dd:80:9f:f7", + "local-discriminator": 2000 + }, + "orig-route-ip": "43.43.43.43" + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "BBcAAhmZmZkAAQPyDN2An/cAB9AgKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_mac.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_mac.xml new file mode 100644 index 0000000000..c2d30957e3 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_mac.xml @@ -0,0 +1,24 @@ + + + BBcAAhmZmZkAAQPyDN2An/cAB9AgKysrKw== + 429496729:1 + + 43.43.43.43 + + f2:0c:dd:80:9f:f7 + 2000 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_rou.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_rou.json new file mode 100644 index 0000000000..94ed6e423b --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_rou.json @@ -0,0 +1,29 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "es-route": { + "router-id-generated": { + "local-discriminator": 2000, + "router-id": "43.43.43.43" + }, + "orig-route-ip": "43.43.43.43" + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "BBcAAhmZmZkAAQQrKysrAAAH0AAgKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_es_rou.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_rou.xml new file mode 100644 index 0000000000..148c976da0 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_es_rou.xml @@ -0,0 +1,24 @@ + + + BBcAAhmZmZkAAQQrKysrAAAH0AAgKysrKw== + 429496729:1 + + 43.43.43.43 + + 43.43.43.43 + 2000 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_arb.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_arb.json new file mode 100644 index 0000000000..57f29dc00b --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_arb.json @@ -0,0 +1,31 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQAAAAAAAAAAAAAAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "arbitrary": { + "arbitrary": "AAAAAAAAAAAA" + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_arb.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_arb.xml new file mode 100644 index 0000000000..129d2ecd2d --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_arb.xml @@ -0,0 +1,26 @@ + + + ARYAAhmZmZkAAQAAAAAAAAAAAAAAAAAK + 429496729:1 + + 24001 + + 10 + + + AAAAAAAAAAAA + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_as.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_as.json new file mode 100644 index 0000000000..6ab79f80cf --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_as.json @@ -0,0 +1,32 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQUBAQEBAAAH0AAAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "as-generated": { + "as": 16843009, + "local-discriminator": 2000 + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_as.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_as.xml new file mode 100644 index 0000000000..340ec82eec --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_as.xml @@ -0,0 +1,27 @@ + + + ARYAAhmZmZkAAQUBAQEBAAAH0AAAAAAK + 429496729:1 + + 24001 + + 10 + + + 16843009 + 2000 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp.json new file mode 100644 index 0000000000..8dc51edacf --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp.json @@ -0,0 +1,32 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "lacp-auto-generated": { + "ce-lacp-port-key": 22, + "ce-lacp-mac-address": "f2:0c:dd:80:9f:f7" + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp.xml new file mode 100644 index 0000000000..87b177ce28 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp.xml @@ -0,0 +1,27 @@ + + + ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK + 429496729:1 + + 24001 + + 10 + + + f2:0c:dd:80:9f:f7 + 22 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extdef.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extdef.json new file mode 100644 index 0000000000..9c34692b03 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extdef.json @@ -0,0 +1,38 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "extended-communities": [ + { + "transitive": true, + "default-gateway-extended-community": {} + } + ], + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "lacp-auto-generated": { + "ce-lacp-port-key": 22, + "ce-lacp-mac-address": "f2:0c:dd:80:9f:f7" + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extdef.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extdef.xml new file mode 100644 index 0000000000..950fc69460 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extdef.xml @@ -0,0 +1,32 @@ + + + ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK + 429496729:1 + + 24001 + + 10 + + + f2:0c:dd:80:9f:f7 + 22 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + true + + + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesilab.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesilab.json new file mode 100644 index 0000000000..57794659b4 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesilab.json @@ -0,0 +1,41 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "extended-communities": [ + { + "transitive": true, + "esi-label-extended-community": { + "single-active-mode": true, + "esi-label": 24001 + } + } + ], + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "lacp-auto-generated": { + "ce-lacp-port-key": 22, + "ce-lacp-mac-address": "f2:0c:dd:80:9f:f7" + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesilab.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesilab.xml new file mode 100644 index 0000000000..d4f7a3974b --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesilab.xml @@ -0,0 +1,34 @@ + + + ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK + 429496729:1 + + 24001 + + 10 + + + f2:0c:dd:80:9f:f7 + 22 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + true + + true + 24001 + + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesr.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesr.json new file mode 100644 index 0000000000..216137f557 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesr.json @@ -0,0 +1,40 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "extended-communities": [ + { + "transitive": true, + "es-import-route-extended-community": { + "es-import": "f2:0c:dd:80:9f:f8" + } + } + ], + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "lacp-auto-generated": { + "ce-lacp-port-key": 22, + "ce-lacp-mac-address": "f2:0c:dd:80:9f:f7" + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesr.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesr.xml new file mode 100644 index 0000000000..f6e7c8bc48 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extesr.xml @@ -0,0 +1,33 @@ + + + ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK + 429496729:1 + + 24001 + + 10 + + + f2:0c:dd:80:9f:f7 + 22 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + true + + f2:0c:dd:80:9f:f8 + + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extl2.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extl2.json new file mode 100644 index 0000000000..185fde0b74 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extl2.json @@ -0,0 +1,43 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "extended-communities": [ + { + "transitive": false, + "layer-2-attributes-extended-community": { + "control-word": true, + "backup-pe": true, + "primary-pe": true, + "l2-mtu": 200 + } + } + ], + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "lacp-auto-generated": { + "ce-lacp-port-key": 22, + "ce-lacp-mac-address": "f2:0c:dd:80:9f:f7" + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extl2.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extl2.xml new file mode 100644 index 0000000000..88ae8a9958 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extl2.xml @@ -0,0 +1,36 @@ + + + ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK + 429496729:1 + + 24001 + + 10 + + + f2:0c:dd:80:9f:f7 + 22 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + false + + true + true + true + 200 + + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extmac.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extmac.json new file mode 100644 index 0000000000..6a2c488001 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extmac.json @@ -0,0 +1,41 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "extended-communities": [ + { + "mac-mobility-extended-community": { + "seq-number": 200, + "static": true + }, + "transitive": true + } + ], + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "lacp-auto-generated": { + "ce-lacp-port-key": 22, + "ce-lacp-mac-address": "f2:0c:dd:80:9f:f7" + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extmac.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extmac.xml new file mode 100644 index 0000000000..98b44d6fb2 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lacp_extmac.xml @@ -0,0 +1,34 @@ + + + ARYAAhmZmZkAAQHyDN2An/cAFgAAAAAK + 429496729:1 + + 24001 + + 10 + + + f2:0c:dd:80:9f:f7 + 22 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + true + + true + 200 + + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lan.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lan.json new file mode 100644 index 0000000000..32e7559163 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lan.json @@ -0,0 +1,32 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQLyDN2An/cAFAAAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "lan-auto-generated": { + "root-bridge-priority": 20, + "root-bridge-mac-address": "f2:0c:dd:80:9f:f7" + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lan.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lan.xml new file mode 100644 index 0000000000..58f27fc271 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_lan.xml @@ -0,0 +1,27 @@ + + + ARYAAhmZmZkAAQLyDN2An/cAFAAAAAAK + 429496729:1 + + 24001 + + 10 + + + f2:0c:dd:80:9f:f7 + 20 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_mac.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_mac.json new file mode 100644 index 0000000000..db1d24370a --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_mac.json @@ -0,0 +1,32 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQPyDN2An/cAB9AAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "mac-auto-generated": { + "system-mac-address": "f2:0c:dd:80:9f:f7", + "local-discriminator": 2000 + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_mac.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_mac.xml new file mode 100644 index 0000000000..6d874e73f6 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_mac.xml @@ -0,0 +1,27 @@ + + + ARYAAhmZmZkAAQPyDN2An/cAB9AAAAAK + 429496729:1 + + 24001 + + 10 + + + f2:0c:dd:80:9f:f7 + 2000 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_rou.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_rou.json new file mode 100644 index 0000000000..339b9505b6 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_rou.json @@ -0,0 +1,32 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "ARYAAhmZmZkAAQQrKysrAAAH0AAAAAAK", + "route-distinguisher": "429496729:1", + "ethernet-a-d-route": { + "router-id-generated": { + "local-discriminator": 2000, + "router-id": "43.43.43.43" + }, + "mpls-label": 24001, + "ethernet-tag-id": { + "vlan-id": 10 + } + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_rou.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_rou.xml new file mode 100644 index 0000000000..b5884aa8d7 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_eth_rou.xml @@ -0,0 +1,27 @@ + + + ARYAAhmZmZkAAQQrKysrAAAH0AAAAAAK + 429496729:1 + + 24001 + + 10 + + + 43.43.43.43 + 2000 + + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_arb.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_arb.json new file mode 100644 index 0000000000..421e76b82b --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_arb.json @@ -0,0 +1,28 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "inc-multi-ethernet-tag-res": { + "orig-route-ip": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + } + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AxEAAhmZmZkAAQAAAAogKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_arb.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_arb.xml new file mode 100644 index 0000000000..761a404b3e --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_arb.xml @@ -0,0 +1,23 @@ + + + AxEAAhmZmZkAAQAAAAogKysrKw== + 429496729:1 + + + 10 + + 43.43.43.43 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_as.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_as.json new file mode 100644 index 0000000000..421e76b82b --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_as.json @@ -0,0 +1,28 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "inc-multi-ethernet-tag-res": { + "orig-route-ip": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + } + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AxEAAhmZmZkAAQAAAAogKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_as.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_as.xml new file mode 100644 index 0000000000..761a404b3e --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_as.xml @@ -0,0 +1,23 @@ + + + AxEAAhmZmZkAAQAAAAogKysrKw== + 429496729:1 + + + 10 + + 43.43.43.43 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lacp.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lacp.json new file mode 100644 index 0000000000..421e76b82b --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lacp.json @@ -0,0 +1,28 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "inc-multi-ethernet-tag-res": { + "orig-route-ip": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + } + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AxEAAhmZmZkAAQAAAAogKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lacp.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lacp.xml new file mode 100644 index 0000000000..761a404b3e --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lacp.xml @@ -0,0 +1,23 @@ + + + AxEAAhmZmZkAAQAAAAogKysrKw== + 429496729:1 + + + 10 + + 43.43.43.43 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lan.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lan.json new file mode 100644 index 0000000000..421e76b82b --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lan.json @@ -0,0 +1,28 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "inc-multi-ethernet-tag-res": { + "orig-route-ip": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + } + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AxEAAhmZmZkAAQAAAAogKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lan.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lan.xml new file mode 100644 index 0000000000..761a404b3e --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_lan.xml @@ -0,0 +1,23 @@ + + + AxEAAhmZmZkAAQAAAAogKysrKw== + 429496729:1 + + + 10 + + 43.43.43.43 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_mac.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_mac.json new file mode 100644 index 0000000000..421e76b82b --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_mac.json @@ -0,0 +1,28 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "inc-multi-ethernet-tag-res": { + "orig-route-ip": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + } + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AxEAAhmZmZkAAQAAAAogKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_mac.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_mac.xml new file mode 100644 index 0000000000..761a404b3e --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_mac.xml @@ -0,0 +1,23 @@ + + + AxEAAhmZmZkAAQAAAAogKysrKw== + 429496729:1 + + + 10 + + 43.43.43.43 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_rou.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_rou.json new file mode 100644 index 0000000000..421e76b82b --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_rou.json @@ -0,0 +1,28 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "inc-multi-ethernet-tag-res": { + "orig-route-ip": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + } + }, + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AxEAAhmZmZkAAQAAAAogKysrKw==", + "route-distinguisher": "429496729:1" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_rou.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_rou.xml new file mode 100644 index 0000000000..761a404b3e --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_inc_rou.xml @@ -0,0 +1,23 @@ + + + AxEAAhmZmZkAAQAAAAogKysrKw== + 429496729:1 + + + 10 + + 43.43.43.43 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_arb.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_arb.json new file mode 100644 index 0000000000..3c6b68c190 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_arb.json @@ -0,0 +1,34 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys=", + "route-distinguisher": "429496729:1", + "mac-ip-adv-route": { + "ethernet-tag-id": { + "vlan-id": 10 + }, + "mpls-label1": 24002, + "mpls-label2": 24003, + "ip-address": "43.43.43.43", + "arbitrary": { + "arbitrary": "AAAAAAAAAAAA" + }, + "mac-address": "f2:0c:dd:80:9f:f7" + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_arb.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_arb.xml new file mode 100644 index 0000000000..21d64be580 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_arb.xml @@ -0,0 +1,29 @@ + + + AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys= + 429496729:1 + + + AAAAAAAAAAAA + + + 10 + + f2:0c:dd:80:9f:f7 + 43.43.43.43 + 24002 + 24003 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_as.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_as.json new file mode 100644 index 0000000000..d748a3e866 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_as.json @@ -0,0 +1,35 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys=", + "route-distinguisher": "429496729:1", + "mac-ip-adv-route": { + "mpls-label1": 24002, + "mpls-label2": 24003, + "ip-address": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + }, + "as-generated": { + "as": 16843009, + "local-discriminator": 2000 + }, + "mac-address": "f2:0c:dd:80:9f:f7" + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_as.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_as.xml new file mode 100644 index 0000000000..acf570df1c --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_as.xml @@ -0,0 +1,30 @@ + + + AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys= + 429496729:1 + + + 16843009 + 2000 + + + 10 + + f2:0c:dd:80:9f:f7 + 43.43.43.43 + 24002 + 24003 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lacp.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lacp.json new file mode 100644 index 0000000000..3bde4c2a8a --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lacp.json @@ -0,0 +1,35 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys=", + "route-distinguisher": "429496729:1", + "mac-ip-adv-route": { + "mpls-label1": 24002, + "mpls-label2": 24003, + "lacp-auto-generated": { + "ce-lacp-port-key": 22, + "ce-lacp-mac-address": "f2:0c:dd:80:9f:f7" + }, + "ip-address": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + }, + "mac-address": "f2:0c:dd:80:9f:f7" + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lacp.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lacp.xml new file mode 100644 index 0000000000..05453ad0c5 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lacp.xml @@ -0,0 +1,30 @@ + + + AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys= + 429496729:1 + + + f2:0c:dd:80:9f:f7 + 22 + + + 10 + + f2:0c:dd:80:9f:f7 + 43.43.43.43 + 24002 + 24003 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lan.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lan.json new file mode 100644 index 0000000000..a572faf0b8 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lan.json @@ -0,0 +1,35 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys=", + "route-distinguisher": "429496729:1", + "mac-ip-adv-route": { + "mpls-label1": 24002, + "mpls-label2": 24003, + "lan-auto-generated": { + "root-bridge-priority": 20, + "root-bridge-mac-address": "f2:0c:dd:80:9f:f7" + }, + "ip-address": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + }, + "mac-address": "f2:0c:dd:80:9f:f7" + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lan.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lan.xml new file mode 100644 index 0000000000..e357610511 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_lan.xml @@ -0,0 +1,30 @@ + + + AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys= + 429496729:1 + + + f2:0c:dd:80:9f:f7 + 20 + + + 10 + + f2:0c:dd:80:9f:f7 + 43.43.43.43 + 24002 + 24003 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_mac.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_mac.json new file mode 100644 index 0000000000..44567ea753 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_mac.json @@ -0,0 +1,35 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys=", + "route-distinguisher": "429496729:1", + "mac-ip-adv-route": { + "mac-auto-generated": { + "system-mac-address": "f2:0c:dd:80:9f:f7", + "local-discriminator": 2000 + }, + "mpls-label1": 24002, + "mpls-label2": 24003, + "ip-address": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + }, + "mac-address": "f2:0c:dd:80:9f:f7" + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_mac.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_mac.xml new file mode 100644 index 0000000000..6fde9ae205 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_mac.xml @@ -0,0 +1,30 @@ + + + AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys= + 429496729:1 + + + f2:0c:dd:80:9f:f7 + 2000 + + + 10 + + f2:0c:dd:80:9f:f7 + 43.43.43.43 + 24002 + 24003 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_rou.json b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_rou.json new file mode 100644 index 0000000000..d97f07c2af --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_rou.json @@ -0,0 +1,35 @@ +{ + "odl-bgp-evpn:evpn-routes": { + "evpn-route": [ + { + "attributes": { + "origin": { + "value": "igp" + }, + "ipv4-next-hop": { + "global": "199.20.166.41" + }, + "local-pref": { + "pref": 100 + }, + "as-path": {} + }, + "route-key": "AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys=", + "route-distinguisher": "429496729:1", + "mac-ip-adv-route": { + "router-id-generated": { + "local-discriminator": 2000, + "router-id": "43.43.43.43" + }, + "mpls-label1": 24002, + "mpls-label2": 24003, + "ip-address": "43.43.43.43", + "ethernet-tag-id": { + "vlan-id": 10 + }, + "mac-address": "f2:0c:dd:80:9f:f7" + } + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_rou.xml b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_rou.xml new file mode 100644 index 0000000000..1618eb3c3f --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/route_mac_rou.xml @@ -0,0 +1,30 @@ + + + AhgAAhmZmZkAAQAAAAow8gzdgJ/3ICsrKys= + 429496729:1 + + + 43.43.43.43 + 2000 + + + 10 + + f2:0c:dd:80:9f:f7 + 43.43.43.43 + 24002 + 24003 + + + + 199.20.166.41 + + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_arb.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_arb.hex new file mode 100644 index 0000000000..a40a601531 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_arb.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800f1c0019460417000219999999000100000000000000000000202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_as.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_as.hex new file mode 100644 index 0000000000..df3027624d --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_as.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800f1c001946041700021999999900010501010101000007d000202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_lacp.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_lacp.hex new file mode 100644 index 0000000000..85acb5a7fa --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_lacp.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800f1c0019460417000219999999000101f20cdd809ff7001600202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_lan.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_lan.hex new file mode 100644 index 0000000000..18f8f757fe --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_lan.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800f1c0019460417000219999999000102f20cdd809ff7001400202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_mac.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_mac.hex new file mode 100644 index 0000000000..6ec2cfacff --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_mac.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800f1c0019460417000219999999000103f20cdd809ff70007d0202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_rou.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_rou.hex new file mode 100644 index 0000000000..1fe8ff9f9e --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_es_rou.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0044020000002d4001010040020040050400000064800f1c00194604170002199999990001042b2b2b2b000007d000202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_arb.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_arb.hex new file mode 100644 index 0000000000..bfca28982b --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_arb.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0046020000002f4001010040020040050400000064800f1e00194601190002199999990001000000000000000000000000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_as.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_as.hex new file mode 100644 index 0000000000..f1595773d7 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_as.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0046020000002f4001010040020040050400000064800f1e001946011900021999999900010501010101000007d0000000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp.hex new file mode 100644 index 0000000000..60da31b1a8 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0046020000002f4001010040020040050400000064800f1e0019460119000219999999000101f20cdd809ff70016000000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extdef.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extdef.hex new file mode 100644 index 0000000000..c95083645f --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extdef.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0051020000003a4001010040020040050400000064800f1e0019460119000219999999000101f20cdd809ff70016000000000a05dc10c01008030d000000000000 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extesilab.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extesilab.hex new file mode 100644 index 0000000000..002e898514 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extesilab.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0051020000003a4001010040020040050400000064800f1e0019460119000219999999000101f20cdd809ff70016000000000a05dc10c01008060101000005dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extesr.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extesr.hex new file mode 100644 index 0000000000..9a35d5a857 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extesr.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0051020000003a4001010040020040050400000064800f1e0019460119000219999999000101f20cdd809ff70016000000000a05dc10c010080602f20cdd809ff8 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extl2.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extl2.hex new file mode 100644 index 0000000000..e02538efd9 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extl2.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0051020000003a4001010040020040050400000064800f1e0019460119000219999999000101f20cdd809ff70016000000000a05dc10c010084604000700c80000 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extmac.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extmac.hex new file mode 100644 index 0000000000..cac07a1424 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lacp_extmac.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0051020000003a4001010040020040050400000064800f1e0019460119000219999999000101f20cdd809ff70016000000000a05dc10c0100806000100000000c8 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lan.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lan.hex new file mode 100644 index 0000000000..9fea46751a --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_lan.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0046020000002f4001010040020040050400000064800f1e0019460119000219999999000102f20cdd809ff70014000000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_mac.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_mac.hex new file mode 100644 index 0000000000..198967de95 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_mac.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0046020000002f4001010040020040050400000064800f1e0019460119000219999999000103f20cdd809ff70007d00000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_rou.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_rou.hex new file mode 100644 index 0000000000..266edafec8 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_eth_rou.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0046020000002f4001010040020040050400000064800f1e00194601190002199999990001042b2b2b2b000007d0000000000a05dc10 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_arb.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_arb.hex new file mode 100644 index 0000000000..2de10fbe0a --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_arb.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff003e02000000274001010040020040050400000064800f16001946031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_as.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_as.hex new file mode 100644 index 0000000000..2de10fbe0a --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_as.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff003e02000000274001010040020040050400000064800f16001946031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_lacp.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_lacp.hex new file mode 100644 index 0000000000..2de10fbe0a --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_lacp.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff003e02000000274001010040020040050400000064800f16001946031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_lan.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_lan.hex new file mode 100644 index 0000000000..2de10fbe0a --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_lan.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff003e02000000274001010040020040050400000064800f16001946031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_mac.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_mac.hex new file mode 100644 index 0000000000..2de10fbe0a --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_mac.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff003e02000000274001010040020040050400000064800f16001946031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_rou.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_rou.hex new file mode 100644 index 0000000000..2de10fbe0a --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_inc_rou.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff003e02000000274001010040020040050400000064800f16001946031100021999999900010000000a202b2b2b2b \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_arb.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_arb.hex new file mode 100644 index 0000000000..259fb075ec --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_arb.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0055020000003e4001010040020040050400000064800f2d00194602280002199999990001000000000000000000000000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_as.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_as.hex new file mode 100644 index 0000000000..26ab1b2d70 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_as.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0055020000003e4001010040020040050400000064800f2d001946022800021999999900010501010101000007d0000000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_lacp.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_lacp.hex new file mode 100644 index 0000000000..183d41c479 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_lacp.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0055020000003e4001010040020040050400000064800f2d0019460228000219999999000101f20cdd809ff70016000000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_lan.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_lan.hex new file mode 100644 index 0000000000..66e3e7feb9 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_lan.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0055020000003e4001010040020040050400000064800f2d0019460228000219999999000102f20cdd809ff70014000000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_mac.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_mac.hex new file mode 100644 index 0000000000..4bf45190b9 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_mac.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0055020000003e4001010040020040050400000064800f2d0019460228000219999999000103f20cdd809ff70007d00000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_rou.hex b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_rou.hex new file mode 100644 index 0000000000..0138dd39c9 --- /dev/null +++ b/csit/variables/bgpfunctional/l2vpn_evpn/withdraw_route_mac_rou.hex @@ -0,0 +1 @@ +ffffffffffffffffffffffffffffffff0055020000003e4001010040020040050400000064800f2d00194602280002199999990001042b2b2b2b000007d0000000000a30f20cdd809ff7202b2b2b2b05dc2005dc30 \ No newline at end of file diff --git a/csit/variables/bgpfunctional/l3vpn_ipv4/bgp-l3vpn-ipv4-empty.json b/csit/variables/bgpfunctional/l3vpn_ipv4/bgp-l3vpn-ipv4-empty.json new file mode 100644 index 0000000000..8d2885cd0e --- /dev/null +++ b/csit/variables/bgpfunctional/l3vpn_ipv4/bgp-l3vpn-ipv4-empty.json @@ -0,0 +1,3 @@ +{ + "bgp-vpn-ipv4:vpn-ipv4-routes": {} +} diff --git a/csit/variables/bgpfunctional/l3vpn_ipv4/bgp-l3vpn-ipv4.cfg b/csit/variables/bgpfunctional/l3vpn_ipv4/bgp-l3vpn-ipv4.cfg new file mode 100755 index 0000000000..8754fcbfaf --- /dev/null +++ b/csit/variables/bgpfunctional/l3vpn_ipv4/bgp-l3vpn-ipv4.cfg @@ -0,0 +1,16 @@ +neighbor ODLIP { +router-id EXABGPIP; +local-address EXABGPIP; +local-as 64496; +peer-as 64496; + family { + ipv4 mpls-vpn; + } + static { + route 1.1.1.0/24 { + next-hop 10.0.255.254; + rd 1.2.3.4:1; + label 24005; + } + } +} diff --git a/csit/variables/bgpfunctional/l3vpn_ipv4/bgp-l3vpn-ipv4.json b/csit/variables/bgpfunctional/l3vpn_ipv4/bgp-l3vpn-ipv4.json new file mode 100644 index 0000000000..9f7f0d57d0 --- /dev/null +++ b/csit/variables/bgpfunctional/l3vpn_ipv4/bgp-l3vpn-ipv4.json @@ -0,0 +1,28 @@ +{ + "bgp-vpn-ipv4:vpn-ipv4-routes": { + "vpn-route": [ + { + "attributes": { + "as-path": {}, + "ipv4-next-hop": { + "global": "10.0.255.254" + }, + "local-pref": { + "pref": 100 + }, + "origin": { + "value": "igp" + } + }, + "label-stack": [ + { + "label-value": 24005 + } + ], + "prefix": "1.1.1.0/24", + "route-distinguisher": "1.2.3.4:1", + "route-key": "cAXcUQABAQIDBAABAQEB" + } + ] + } +} diff --git a/csit/variables/bgpfunctional/l3vpn_ipv4/route/exa-expected.json b/csit/variables/bgpfunctional/l3vpn_ipv4/route/exa-expected.json new file mode 100644 index 0000000000..a443fb1183 --- /dev/null +++ b/csit/variables/bgpfunctional/l3vpn_ipv4/route/exa-expected.json @@ -0,0 +1,20 @@ +{ + "update": { + "announce": { + "ipv4 mpls-vpn": { + "199.20.166.41": { + "2.2.2.2/32": { + "label": [ + 123 + ], + "route-distinguisher": "429496729:1" + } + } + } + }, + "attribute": { + "local-preference": 100, + "origin": "igp" + } + } +} diff --git a/csit/variables/bgpfunctional/l3vpn_ipv4/route/location.uri b/csit/variables/bgpfunctional/l3vpn_ipv4/route/location.uri new file mode 100644 index 0000000000..8b4132299a --- /dev/null +++ b/csit/variables/bgpfunctional/l3vpn_ipv4/route/location.uri @@ -0,0 +1 @@ +/restconf/config/bgp-rib:application-rib/example-app-rib/tables/bgp-types:ipv4-address-family/bgp-types:mpls-labeled-vpn-subsequent-address-family/bgp-vpn-ipv4:vpn-ipv4-routes/ diff --git a/csit/variables/bgpfunctional/l3vpn_ipv4/route/post_data.xml b/csit/variables/bgpfunctional/l3vpn_ipv4/route/post_data.xml new file mode 100644 index 0000000000..7abd5e9bf8 --- /dev/null +++ b/csit/variables/bgpfunctional/l3vpn_ipv4/route/post_data.xml @@ -0,0 +1,19 @@ + + vpn1 + + 123 + + 429496729:1 + 2.2.2.2/32 + + + 199.20.166.41 + + + igp + + + 100 + + + diff --git a/csit/variables/bgpfunctional/multipaths/module_all_paths/data.xml b/csit/variables/bgpfunctional/multipaths/module_all_paths/data.xml new file mode 100644 index 0000000000..4146bcb050 --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/module_all_paths/data.xml @@ -0,0 +1,4 @@ + + x:advertise-all-paths + all-paths + diff --git a/csit/variables/bgpfunctional/multipaths/module_all_paths/location.uri b/csit/variables/bgpfunctional/multipaths/module_all_paths/location.uri new file mode 100644 index 0000000000..5f539927bb --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/module_all_paths/location.uri @@ -0,0 +1 @@ +/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules/module/odl-bgp-path-selection-mode:advertise-all-paths/all-paths diff --git a/csit/variables/bgpfunctional/multipaths/module_n_paths/data.xml b/csit/variables/bgpfunctional/multipaths/module_n_paths/data.xml new file mode 100644 index 0000000000..4b9b72b28d --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/module_n_paths/data.xml @@ -0,0 +1,5 @@ + + x:advertise-n-paths + n-paths + $NPATHS + diff --git a/csit/variables/bgpfunctional/multipaths/module_n_paths/location.uri b/csit/variables/bgpfunctional/multipaths/module_n_paths/location.uri new file mode 100644 index 0000000000..95ffa5ba5a --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/module_n_paths/location.uri @@ -0,0 +1 @@ +/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules/module/odl-bgp-path-selection-mode:advertise-n-paths/n-paths diff --git a/csit/variables/bgpfunctional/multipaths/module_psm/data.xml b/csit/variables/bgpfunctional/multipaths/module_psm/data.xml new file mode 100644 index 0000000000..417f80fd2b --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/module_psm/data.xml @@ -0,0 +1,12 @@ + + x:bgp-psm-impl + ipv4-unicast-path-selection-mode + + ipv4-unicast + bgp-table-type + + + $PATHSELMODE + x:path-selection-mode-factory + + diff --git a/csit/variables/bgpfunctional/multipaths/module_psm/location.uri b/csit/variables/bgpfunctional/multipaths/module_psm/location.uri new file mode 100644 index 0000000000..89223be044 --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/module_psm/location.uri @@ -0,0 +1 @@ +/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules/module/odl-bgp-rib-impl-cfg:bgp-psm-impl/ipv4-unicast-path-selection-mode diff --git a/csit/variables/bgpfunctional/multipaths/modules/location.uri b/csit/variables/bgpfunctional/multipaths/modules/location.uri new file mode 100644 index 0000000000..84d0f0dfe2 --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/modules/location.uri @@ -0,0 +1 @@ +/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules diff --git a/csit/variables/bgpfunctional/multipaths/rib/data.xml b/csit/variables/bgpfunctional/multipaths/rib/data.xml new file mode 100644 index 0000000000..ccc0850460 --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/rib/data.xml @@ -0,0 +1,83 @@ + + x:rib-impl + example-bgp-rib + 64496 + + pingpong-broker + x:dom-async-data-broker + + 192.0.2.2 + + global-bgp-dispatcher + bgp-dispatcher + + + pingpong-binding-data-broker + x:binding-async-data-broker + + + + global-rib-extensions + x:extensions + + + ipv4-unicast + bgp-table-type + + + ipv6-unicast + bgp-table-type + + + linkstate + bgp-table-type + + + ipv4-flowspec + bgp-table-type + + + ipv6-flowspec + bgp-table-type + + + ipv4-flowspec-l3vpn + bgp-table-type + + + ipv6-flowspec-l3vpn + bgp-table-type + + + ipv4-labeled-unicast + bgp-table-type + + + ipv6-labeled-unicast + bgp-table-type + + + ipv4-l3vpn + bgp-table-type + + + ipv6-l3vpn + bgp-table-type + + + evpn + bgp-table-type + + example-bgp-rib + + runtime-mapping-singleton + x:binding-codec-tree-factory + + + ipv4-unicast-path-selection-mode + bgp-path-selection-mode + + diff --git a/csit/variables/bgpfunctional/multipaths/rib/location.uri b/csit/variables/bgpfunctional/multipaths/rib/location.uri new file mode 100644 index 0000000000..2f612b5bb9 --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/rib/location.uri @@ -0,0 +1 @@ +/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules/module/odl-bgp-rib-impl-cfg:rib-impl/example-bgp-rib diff --git a/csit/variables/bgpfunctional/multipaths/route/location.uri b/csit/variables/bgpfunctional/multipaths/route/location.uri new file mode 100644 index 0000000000..8dad9e51cd --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/route/location.uri @@ -0,0 +1 @@ +/restconf/config/bgp-rib:application-rib/example-app-rib/tables/bgp-types:ipv4-address-family/bgp-types:unicast-subsequent-address-family/bgp-inet:ipv4-routes/ diff --git a/csit/variables/bgpfunctional/multipaths/route/post_data.xml b/csit/variables/bgpfunctional/multipaths/route/post_data.xml new file mode 100644 index 0000000000..40a8cbe0bd --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/route/post_data.xml @@ -0,0 +1,25 @@ + + 1.1.1.1/32 + $PATHID + + + $NEXTHOP + + + + 0 + + + $LOCALPREF + + + 41.41.41.41 + + + igp + + + 40.40.40.40 + + + diff --git a/csit/variables/bgpfunctional/multipaths/service_bpsm/data.xml b/csit/variables/bgpfunctional/multipaths/service_bpsm/data.xml new file mode 100644 index 0000000000..f8ca77e816 --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/service_bpsm/data.xml @@ -0,0 +1,7 @@ + + x:bgp-path-selection-mode + + ipv4-unicast-path-selection-mode + /modules/module[type='bgp-psm-impl'][name='ipv4-unicast-path-selection-mode'] + + diff --git a/csit/variables/bgpfunctional/multipaths/service_bpsm/location.uri b/csit/variables/bgpfunctional/multipaths/service_bpsm/location.uri new file mode 100644 index 0000000000..73702bb7d6 --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/service_bpsm/location.uri @@ -0,0 +1 @@ +/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:services/service/odl-bgp-rib-impl-cfg:bgp-path-selection-mode diff --git a/csit/variables/bgpfunctional/multipaths/service_psmf/data.xml b/csit/variables/bgpfunctional/multipaths/service_psmf/data.xml new file mode 100644 index 0000000000..84469ceacc --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/service_psmf/data.xml @@ -0,0 +1,11 @@ + + x:path-selection-mode-factory + + all-paths + /modules/module[type='advertise-all-paths'][name='all-paths'] + + + n-paths + /modules/module[type='advertise-n-paths'][name='n-paths'] + + diff --git a/csit/variables/bgpfunctional/multipaths/service_psmf/location.uri b/csit/variables/bgpfunctional/multipaths/service_psmf/location.uri new file mode 100644 index 0000000000..a2de4726ed --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/service_psmf/location.uri @@ -0,0 +1 @@ +/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:services/service/odl-bgp-path-selection-mode:path-selection-mode-factory/ diff --git a/csit/variables/bgpfunctional/multipaths/services/location.uri b/csit/variables/bgpfunctional/multipaths/services/location.uri new file mode 100644 index 0000000000..21c836e25f --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/services/location.uri @@ -0,0 +1 @@ +/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:services diff --git a/csit/variables/bgpfunctional/multipaths/services/post_all_paths.xml b/csit/variables/bgpfunctional/multipaths/services/post_all_paths.xml new file mode 100644 index 0000000000..a7989db54a --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/services/post_all_paths.xml @@ -0,0 +1,7 @@ + + prefix:path-selection-mode-factory + + all-paths + /config/modules/module[name='advertise-all-paths']/instance[name='all-paths'] + + diff --git a/csit/variables/bgpfunctional/multipaths/services/post_n_paths.xml b/csit/variables/bgpfunctional/multipaths/services/post_n_paths.xml new file mode 100644 index 0000000000..67987ed06b --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/services/post_n_paths.xml @@ -0,0 +1,7 @@ + + x:path-selection-mode-factory + + n-paths + /modules/module[type='advertise-n-paths'][name='n-paths'] + + diff --git a/csit/variables/bgpfunctional/multipaths/services/post_psm.xml b/csit/variables/bgpfunctional/multipaths/services/post_psm.xml new file mode 100644 index 0000000000..3562899c10 --- /dev/null +++ b/csit/variables/bgpfunctional/multipaths/services/post_psm.xml @@ -0,0 +1,7 @@ + + prefix:bgp-path-selection-mode + + ipv4-unicast-path-selection-mode + /modules/module[type='bgp-psm-impl'][name='ipv4-unicast-path-selection-mode'] + + diff --git a/csit/variables/bgpfunctional/route_refresh/location.uri b/csit/variables/bgpfunctional/route_refresh/location.uri new file mode 100644 index 0000000000..1ee5ce2270 --- /dev/null +++ b/csit/variables/bgpfunctional/route_refresh/location.uri @@ -0,0 +1 @@ +/restconf/operations/bgp-peer-rpc:route-refresh-request diff --git a/csit/variables/bgpfunctional/route_refresh/post_data.xml b/csit/variables/bgpfunctional/route_refresh/post_data.xml new file mode 100644 index 0000000000..d0592f9bd2 --- /dev/null +++ b/csit/variables/bgpfunctional/route_refresh/post_data.xml @@ -0,0 +1,5 @@ + + types:ipv4-address-family + types:unicast-subsequent-address-family + /rib:bgp-rib/rib:rib[rib:id="example-bgp-rib"]/rib:peer[rib:peer-id="bgp://$BGP_PEER_IP"] + diff --git a/csit/variables/bgpfunctional/route_refresh/route/location.uri b/csit/variables/bgpfunctional/route_refresh/route/location.uri new file mode 100644 index 0000000000..8dad9e51cd --- /dev/null +++ b/csit/variables/bgpfunctional/route_refresh/route/location.uri @@ -0,0 +1 @@ +/restconf/config/bgp-rib:application-rib/example-app-rib/tables/bgp-types:ipv4-address-family/bgp-types:unicast-subsequent-address-family/bgp-inet:ipv4-routes/ diff --git a/csit/variables/bgpfunctional/route_refresh/route/post_data.xml b/csit/variables/bgpfunctional/route_refresh/route/post_data.xml new file mode 100644 index 0000000000..e42c260d2f --- /dev/null +++ b/csit/variables/bgpfunctional/route_refresh/route/post_data.xml @@ -0,0 +1,25 @@ + + $PREFIX + 0 + + + 199.20.160.41 + + + + 0 + + + 100 + + + 41.41.41.41 + + + igp + + + 40.40.40.40 + + + diff --git a/tools/exabgp_files/exarpc.py b/tools/exabgp_files/exarpc.py new file mode 100644 index 0000000000..1d2a36c9d8 --- /dev/null +++ b/tools/exabgp_files/exarpc.py @@ -0,0 +1,361 @@ +#!/usr/bin/env python + +import argparse +import binascii +import json +import logging +import os +import re +import select +import sys +import threading +from exabgp.bgp.message import Message +from SimpleXMLRPCServer import SimpleXMLRPCServer + + +class ExaStorage(dict): + """Thread safe dictionary + + The object will serve as thread safe data storage. + It should be used with "with" statement. + + The content of thet dict may be changed dynamically, but i'll use it as + { + "counters": { : count, ...} + "messages": { : [hex_string1, ]} + """ + def __init__(self): + """Thread safe dictionary init""" + super(ExaStorage, self).__init__() + self._lock = threading.Lock() + + def __enter__(self): + """Entry point of "with" statement""" + self._lock.acquire() + return self + + def __exit__(self, type_, value, traceback): + """End point of "with" statement""" + self._lock.release() + + +class Rpcs(object): + """Handler for SimpleXMLRPCServer.""" + + def __init__(self, storage): + """Init method + + Arguments: + :storage: thread safe dict + """ + self.storage = storage + + def _write(self, text): + """Pass commands from rpc server towards exabgp + + Arguments: + :text: exabgp command + """ + logging.debug('Command towards exabgp: {}'.format(text)) + sys.stdout.write(text) + sys.stdout.write("\n") + sys.stdout.flush() + logging.debug('Connand flushed: {}.'.format(text)) + + def get_counter(self, msg_type): + """Gets counter value + + Arguments: + :msg_type: message type which counter should be returned + Returns: + :cnt: counter value + """ + logging.debug('get_counter rpc called, storage {}'.format(self.storage)) + with self.storage as s: + if 'counters' not in s: + return 0 + cnt = 0 if msg_type not in s['counters'] else s['counters'][msg_type] + return cnt + + def clean_counter(self, msg_type): + """Cleans counter + + Arguments: + :msg_type: message type which counter should be cleaned + """ + + logging.debug('clean_counter rpc called, storage {}'.format(self.storage)) + with self.storage as s: + if 'counters' not in s: + return + if msg_type in s['counters']: + del s['counters'][msg_type] + + def get_message(self, msg_type): + """Gets last received message + + Arguments: + :msg_type: message type which counter should be returned + Returns: + :msg: message + """ + logging.debug('get_message {} rpc called, storage {}'.format(msg_type, self.storage)) + with self.storage as s: + if 'messages' not in s: + return None + msg = None if msg_type not in s['messages'] else s['messages'][msg_type] + return msg + + def clean_message(self, msg_type): + """Removes stored message + + Arguments: + :msg_type: message type which message should be cleaned + """ + + logging.debug('clean_message rpc called, storage {}'.format(self.storage)) + with self.storage as s: + if 'messages' not in s: + return + if msg_type in s['messages']: + del s['messages'][msg_type] + return + + def execute(self, exabgp_cmd): + """Execite given command on exabgp + + Arguments: + :exabgp_cmd: command + """ + logging.info('executing: {}.'.format(exabgp_cmd)) + self._write(exabgp_cmd) + + +def decode_message(header, body): + """Decodes message + + Arguments: + :header: hexstring of the header + :body: hexstring of the body + Returns: + :msg_type: message type + :msg: None (in the future some decoded data) + """ + headbin = binascii.unhexlify(header) + + msg_type = ord(headbin[18]) + msg = None + + return msg_type, msg + + +def _increment_counter(storage, key): + """Increments the counter for a message + + Arguments: + :key: message type + """ + with storage as s: + if 'counters' not in s: + s['counters'] = {} + if key not in s['counters']: + s['counters'][key] = 1 + else: + s['counters'][key] += 1 + + +def _store_last_received_message(storage, key, msg): + """Stores message under key. + + Arguments: + :key: message type + """ + with storage as s: + if 'messages' not in s: + s['messages'] = {} + s['messages'][key] = msg + + +def handle_open(storage, msg): + """Handles received bgp open message + + - incements open counter + + Arguments: + :msg: hex string of open body + """ + logging.debug('Handling Open with storage {}'.format(storage)) + _increment_counter(storage, 'open') + + +def handle_keepalive(storage, msg): + """Handles received bgp keepalive message + + - incements keepalive counter + + Arguments: + :msg: hex string of message body (in fact it is None) + """ + logging.debug('Handling KeepAlive with storage {}'.format(storage)) + _increment_counter(storage, 'keepalive') + + +def handle_update(storage, msg): + """Handles received bgp update message + + - incements update counter + + Arguments: + :msg: hex string of update body + """ + logging.debug('Handling Update with storage {}'.format(storage)) + _increment_counter(storage, 'update') + + +def handle_route_refresh(storage, msg): + """Handles received bgp route refresh message + + - incements route refresh counter + + Arguments: + :msg: hex string of route refresh body + """ + logging.debug('Handling Route Refresh with storage {}'.format(storage)) + _increment_counter(storage, 'route_refresh') + + +def handle_json_update(storage, jdata): + """Handles received json parsed bgp update message + + - incements update counter + + Arguments: + :jdata: json formated data of update message + """ + logging.debug('Handling Json Update with storage {}'.format(storage)) + _increment_counter(storage, 'update') + _store_last_received_message(storage, 'update', jdata) + + +def handle_json_state(storage, jdata): + """Handles received json state message + + This is for future use. This information is not used/required/needed + at the moment. + + Arguments: + :jdata: json formated data about connection/peer state + """ + logging.debug('Handling Json State with storage {}'.format(storage)) + + +def handle_json_refresh(storage, jdata): + """Handles received json route refresh message + + This is for future use. This information is not used/required/needed + at the moment. + + Arguments: + :jdata: json formated data about connection/peer state + """ + logging.debug('Handling Json State with storage {}'.format(storage)) + _increment_counter(storage, 'route_refresh') + + +def exa_msg_handler(storage, data, encoder): + """Handles incomming messages""" + + if encoder == 'text': + if not ('neighbor' in data and 'header' in data and 'body' in data): + logging.debug('Ignoring received notification from exabgp: {}'.format(data)) + return + restr = 'neighbor (?P[0-9,\\.]+) received (?P[0-9]+) header\ + (?P
[0-9,A-F]+) body.?(?P[0-9,A-F]+)?' + pat = re.compile(restr) + match = re.search(pat, data) + if match is None: + logging.warn('Unexpected data in this part, only bgp message expected. Received: {}.'.format(data)) + return + msg_type, msg = decode_message(match.groupdict()['header'], match.groupdict()['body']) + if msg_type == Message.CODE.KEEPALIVE: + handle_keepalive(storage, msg) + elif msg_type == Message.CODE.OPEN: + handle_open(storage, msg) + elif msg_type == Message.CODE.UPDATE: + handle_update(storage, msg) + elif msg_type == Message.CODE.ROUTE_REFRESH: + handle_route_refresh(storage, msg) + else: + logging.warn('No handler function for msg_type: {}'.format(msg_type)) + elif encoder == 'json': + try: + jdata = json.loads(data) + except Exception: + logging.error('Unable to parse, expected json, received: {}.'.format(data)) + return + if jdata['type'] == 'state': + logging.debug('State info received: {}.'.format(data)) + handle_json_state(storage, jdata) + elif jdata['type'] == 'update': + logging.debug('Update info received: {}.'.format(data)) + handle_json_update(storage, jdata) + elif jdata['type'] == 'notification': + logging.debug('Notification info received: {}.'.format(data)) + elif jdata['type'] == 'refresh': + logging.debug('Route refresh received: {}.'.format(data)) + handle_json_refresh(storage, jdata) + else: + logging.error('Unexpected type for data: {}'.format(data)) + else: + logging.error('Ignoring received data, unknown encoder: {}'.format(encoder)) + + +def main(*argv): + """This script is used as i/o api for communication with exabgp + + Arguments: + :*argv: unparsed cli arguments + + In a separate thread an rpc server is started. This server will be used as an api towards the user. + Stdin and stdout are used for communication with exabgp. + """ + + parser = argparse.ArgumentParser(description='ExaBgp rpc server script') + parser.add_argument('--host', default='127.0.0.1', help='Host where exabgp is running (default is 127.0.0.1)') + parser.add_argument('--loglevel', default=logging.DEBUG, help='Log level') + parser.add_argument('--logfile', default='{}/exarpc.log'.format(os.path.dirname(os.path.abspath(__file__))), + help='Log file name.') + parser.add_argument('--encoder', default='json', help='Exabgp encoder type') + in_args = parser.parse_args(*argv) + logging.basicConfig(filename=in_args.logfile, level=in_args.loglevel) + + storage = ExaStorage() + rpcserver = SimpleXMLRPCServer((in_args.host, 8000), allow_none=True) + rpcserver.register_instance(Rpcs(storage)) + trpc = threading.Thread(target=rpcserver.serve_forever) + trpc.start() + + epoll = select.epoll() + + epoll.register(sys.__stdin__, select.EPOLLIN | select.EPOLLERR | select.EPOLLHUP) + + try: + while True: + logging.debug('Epoll loop') + events = epoll.poll(10) + for fd, event_type in events: + logging.debug('Epoll returned: {},{}'.format(fd, event_type)) + if event_type != select.EPOLLIN: + raise Exception('Unexpected epoll event') + else: + data = sys.stdin.readline() + logging.debug('Data recevied from exabgp: {}.'.format(data)) + exa_msg_handler(storage, data, in_args.encoder) + except Exception as e: + logging.warn('Exception occured: {}'.format(e)) + finally: + rpcserver.shutdown() + trpc.join() + +if __name__ == '__main__': + main() diff --git a/tools/fastbgp/play.py b/tools/fastbgp/play.py index 5dc84a1ba3..b191f73d1c 100755 --- a/tools/fastbgp/play.py +++ b/tools/fastbgp/play.py @@ -11,17 +11,19 @@ EXABGP in this type of scenario.""" # terms of the Eclipse Public License v1.0 which accompanies this distribution, # and is available at http://www.eclipse.org/legal/epl-v10.html +from copy import deepcopy +from SimpleXMLRPCServer import SimpleXMLRPCServer import argparse import binascii import ipaddr +import logging +import Queue import select import socket -import time -import logging import struct - import thread -from copy import deepcopy +import threading +import time __author__ = "Vratko Polak" @@ -30,6 +32,25 @@ __license__ = "Eclipse Public License v1.0" __email__ = "vrpolak@cisco.com" +class SafeDict(dict): + '''Thread safe dictionary + + The object will serve as thread safe data storage. + It should be used with "with" statement. + ''' + + def __init__(self, * p_arg, ** n_arg): + super(SafeDict, self).__init__() + self._lock = threading.Lock() + + def __enter__(self): + self._lock.acquire() + return self + + def __exit__(self, type, value, traceback): + self._lock.release() + + def parse_arguments(): """Use argparse to get arguments, @@ -131,6 +152,11 @@ def parse_arguments(): parser.add_argument("-lsteaddrstep", default="1", type=int, help=str_help) str_help = "How many play utilities are to be started." parser.add_argument("--multiplicity", default="1", type=int, help=str_help) + str_help = "Open message includes multiprotocol extension capability l2vpn-evpn.\ +Enabling this flag makes the script not decoding the update mesage, because of not\ +supported decoding for these elements." + parser.add_argument("--evpn", default=False, action="store_true", help=str_help) + parser.add_argument("--wfr", default=10, type=int, help="Wait for read timeout") arguments = parser.parse_args() if arguments.multiplicity < 1: print "Multiplicity", arguments.multiplicity, "is not positive." @@ -326,6 +352,7 @@ class MessageGenerator(object): self.performance_threshold_default = args.threshold self.rfc4760 = args.rfc4760 self.bgpls = args.bgpls + self.evpn = args.evpn # Default values when BGP-LS Attributes are used if self.bgpls: self.prefix_count_to_add_default = 1 @@ -781,6 +808,18 @@ class MessageGenerator(object): ) optional_parameters_hex += optional_parameter_hex + if self.evpn: + optional_parameter_hex = ( + "\x02" # Param type ("Capability Ad") + "\x06" # Length (6 bytes) + "\x01" # Multiprotocol extetension capability, + "\x04" # Capability value length + "\x00\x19" # AFI (L2-VPN) + "\x00" # (reserved) + "\x46" # SAFI (EVPN) + ) + optional_parameters_hex += optional_parameter_hex + optional_parameter_hex = ( "\x02" # Param type ("Capability Ad") "\x06" # Length (6 bytes) @@ -1235,12 +1274,14 @@ class ReadTracker(object): for idle waiting. """ - def __init__(self, bgp_socket, timer): + def __init__(self, bgp_socket, timer, storage, evpn=False, wait_for_read=10): """The reader initialisation. Arguments: bgp_socket: socket to be used for sending timer: timer to be used for scheduling + storage: thread safe dict + evpn: flag that evpn functionality is tested """ # References to outside objects. self.socket = bgp_socket @@ -1261,6 +1302,9 @@ class ReadTracker(object): self.prefixes_withdrawn = 0 self.rx_idle_time = 0 self.rx_activity_detected = True + self.storage = storage + self.evpn = evpn + self.wfr = wait_for_read def read_message_chunk(self): """Read up to one message @@ -1458,6 +1502,16 @@ class ReadTracker(object): # message header - message type msg_type_hex = msg[18:19] msg_type = int(binascii.b2a_hex(msg_type_hex), 16) + + with self.storage as stor: + # this will replace the previously stored message + stor['update'] = binascii.hexlify(msg) + + logger.debug("Evpn {}".format(self.evpn)) + if self.evpn: + logger.debug("Skipping update decoding due to evpn data expected") + return + if msg_type == 2: logger.debug("Message type: 0x%s (update)", binascii.b2a_hex(msg_type_hex)) @@ -1515,7 +1569,7 @@ class ReadTracker(object): # Compute time to the first predictable state change event_time = self.timer.get_next_event_time() # snapshot_time would be imprecise - wait_timedelta = min(event_time - time.time(), 10) + wait_timedelta = min(event_time - time.time(), self.wfr) if wait_timedelta < 0: # The program got around to waiting to an event in "very near # future" so late that it became a "past" event, thus tell @@ -1606,20 +1660,23 @@ class WriteTracker(object): class StateTracker(object): """Main loop has state so complex it warrants this separate class.""" - def __init__(self, bgp_socket, generator, timer): + def __init__(self, bgp_socket, generator, timer, inqueue, storage, cliargs): """The state tracker initialisation. Arguments: bgp_socket: socket to be used for sending / receiving generator: generator to be used for message generation timer: timer to be used for scheduling + inqueue: user initiated messages queue + storage: thread safe dict to store data for the rpc server + cliargs: cli args from the user """ # References to outside objects. self.socket = bgp_socket self.generator = generator self.timer = timer # Sub-trackers. - self.reader = ReadTracker(bgp_socket, timer) + self.reader = ReadTracker(bgp_socket, timer, storage, evpn=cliargs.evpn, wait_for_read=cliargs.wfr) self.writer = WriteTracker(bgp_socket, generator, timer) # Prioritization state. self.prioritize_writing = False @@ -1632,6 +1689,7 @@ class StateTracker(object): # TODO: Alternative is to switch fairly between reading and # writing (called round robin from now on). # Message counting is done in generator. + self.inqueue = inqueue def perform_one_loop_iteration(self): """ The main loop iteration @@ -1649,6 +1707,14 @@ class StateTracker(object): logger.info("KEEP ALIVE is sent.") # We are sending a message now, so let's prioritize it. self.prioritize_writing = True + + try: + msg = self.inqueue.get_nowait() + logger.info("Received message: {}".format(msg)) + msgbin = binascii.unhexlify(msg) + self.writer.enqueue_message_for_sending(msgbin) + except Queue.Empty: + pass # Now we know what our priorities are, we have to check # which actions are available. # socket.socket() returns three lists, @@ -1736,13 +1802,15 @@ def create_logger(loglevel, logfile): return logger -def job(arguments): +def job(arguments, inqueue, storage): """One time initialisation and iterations looping. Notes: Establish BGP connection and run iterations. Arguments: :arguments: Command line arguments + :inqueue: Data to be sent from play.py + :storage: Shared dict for rpc server Returns: :return: None """ @@ -1775,11 +1843,56 @@ def job(arguments): # Use the remembered time. timer.reset_my_keepalive_time(timer.snapshot_time) # End of initial handshake phase. - state = StateTracker(bgp_socket, generator, timer) + state = StateTracker(bgp_socket, generator, timer, inqueue, storage, arguments) while True: # main reactor loop state.perform_one_loop_iteration() +class Rpcs: + '''Handler for SimpleXMLRPCServer''' + def __init__(self, sendqueue, storage): + '''Init method + + Arguments: + :sendqueue: queue for data to be sent towards odl + :storage: thread safe dict + ''' + self.queue = sendqueue + self.storage = storage + + def send(self, text): + '''Data to be sent + + Arguments: + :text: hes string of the data to be sent + ''' + self.queue.put(text) + + def get(self, text=''): + '''Reads data form the storage + + - returns stored data or an empty string, at the moment only + 'update' is stored + + Arguments: + :text: a key to the storage to get the data + Returns: + :data: stored data + ''' + with self.storage as stor: + return stor.get(text, '') + + def clean(self, text=''): + '''Cleans data form the storage + + Arguments: + :text: a key to the storage to clean the data + ''' + with self.storage as stor: + if text in stor: + del stor[text] + + def threaded_job(arguments): """Run the job threaded @@ -1793,6 +1906,8 @@ def threaded_job(arguments): prefix_current = arguments.firstprefix myip_current = arguments.myip thread_args = [] + rpcqueue = Queue.Queue() + storage = SafeDict() while 1: amount_per_util = (amount_left - 1) / utils_left + 1 # round up @@ -1813,14 +1928,14 @@ def threaded_job(arguments): try: # Create threads for t in thread_args: - thread.start_new_thread(job, (t,)) + thread.start_new_thread(job, (t, rpcqueue, storage)) except Exception: print "Error: unable to start thread." raise SystemExit(2) - # Work remains forever - while 1: - time.sleep(5) + rpcserver = SimpleXMLRPCServer((arguments.myip.compressed, 8000), allow_none=True) + rpcserver.register_instance(Rpcs(rpcqueue, storage)) + rpcserver.serve_forever() if __name__ == "__main__":