Testing mcast-vpn functionality.
Testing 7 types of routes and 4 attributes
introduced by mcast-vpn.
Sending routes from application-peer, and verifying
it with play.py, and sending routes with play.py in hex,
and verifying it at odl side.
Based on rfc6514.
Fluorine test only.
Change-Id: Iee46907b847d8801a684634035e239f46b4e4c15
Signed-off-by: Tomas Markovic <tomas.markovic@pantheon.tech>
--- /dev/null
+*** Settings ***
+Documentation Functional test for bgp - mvpn
+...
+... Copyright (c) 2018 AT&T Intellectual Property. 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 distbmution,
+... and is available at http://www.eclipse.org/legal/epl-v10.html
+...
+... This suite tests advertising mvpn routes to odl. For advertising play.py is used,
+... and particular files are stored as *.hex files. There are 7 different
+... types of routes used for auto-discovery of multicast network. Also 4 more routes
+... with new attributes specific for mvpn.
+Suite Setup Start_Suite
+Suite Teardown Stop_Suite
+Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+Library RequestsLibrary
+Library SSHLibrary
+Library String
+Library ../../../libraries/BgpRpcClient.py ${TOOLS_SYSTEM_IP}
+Resource ../../../libraries/BGPcliKeywords.robot
+Resource ../../../libraries/BGPSpeaker.robot
+Resource ../../../libraries/CompareStream.robot
+Resource ../../../libraries/SetupUtils.robot
+Resource ../../../libraries/SSHKeywords.robot
+Resource ../../../libraries/TemplatedRequests.robot
+Resource ../../../variables/Variables.robot
+
+*** Variables ***
+${HOLDTIME} 180
+${APP_PEER_NAME} example-bgp-peer-app
+${BGP_DIR} ${CURDIR}/../../../variables/bgpfunctional
+${CONFIG_SESSION} config-session
+${MVPN_DIR} ${CURDIR}/../../../variables/bgpfunctional/mvpn
+${PLAY_SCRIPT} ${CURDIR}/../../../../tools/fastbgp/play.py
+${RIB_NAME} example-bgp-rib
+&{MVPN_ADJ_RIB_IN} PATH=peer/bgp:%2F%2F${TOOLS_SYSTEM_IP}/adj-rib-in BGP_RIB=${RIB_NAME}
+&{MVPN_LOC_RIB} PATH=loc-rib BGP_RIB=${RIB_NAME}
+&{MVPN_EFFECTIVE_RIB_IN} PATH=peer/bgp:%2F%2F${TOOLS_SYSTEM_IP}/effective-rib-in BGP_RIB=${RIB_NAME}
+&{MVPN_APP_PEER} IP=${ODL_SYSTEM_IP} BGP_RIB=${RIB_NAME}
+&{MVPN_ODL_CONFIG} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT} INITIATE=false BGP_RIB=${RIB_NAME} PASSIVE_MODE=true
+
+*** Test Cases ***
+Configure_App_Peer
+ [Documentation] Configures bgp application peer.
+ [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+ TemplatedRequests.Put_As_Xml_Templated ${MVPN_DIR}/app_peer mapping=${MVPN_APP_PEER} session=${CONFIG_SESSION}
+
+Reconfigure_ODL_To_Accept_Connection
+ [Documentation] Configures BGP peer module with initiate-connection set to false.
+ [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+ TemplatedRequests.Put_As_Xml_Templated ${MVPN_DIR}/bgp_peer mapping=${MVPN_ODL_CONFIG} 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] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+ BuiltIn.Wait_Until_Keyword_Succeeds 3x 1s Start Bgp Peer
+
+Odl_To_Play_intra_as_ipmsi_ad
+ [Template] Odl_To_Play_Template
+ intra_as_ipmsi_ad
+
+Play_To_Odl_intra_as_ipmsi_ad
+ [Template] Play_To_Odl_Template
+ intra_as_ipmsi_ad
+
+Odl_To_Play_inter_as_ipmsi_ad
+ [Template] Odl_To_Play_Template
+ inter_as_ipmsi_ad
+
+Play_To_Odl_inter_as_ipmsi_ad
+ [Template] Play_To_Odl_Template
+ inter_as_ipmsi_ad
+
+Odl_To_Play_spmsi_ad
+ [Template] Odl_To_Play_Template
+ spmsi_ad
+
+Play_To_Odl_spmsi_ad
+ [Template] Play_To_Odl_Template
+ spmsi_ad
+
+Odl_To_Play_leaf_ad
+ [Template] Odl_To_Play_Template
+ leaf_ad
+
+Play_To_Odl_leaf_ad
+ [Template] Play_To_Odl_Template
+ leaf_ad
+
+Odl_To_Play_source_active_ad
+ [Template] Odl_To_Play_Template
+ source_active_ad
+
+Play_To_Odl_source_active_ad
+ [Template] Play_To_Odl_Template
+ source_active_ad
+
+Odl_To_Play_shared_tree_join
+ [Template] Odl_To_Play_Template
+ shared_tree_join
+
+Play_To_Odl_shared_tree_join
+ [Template] Play_To_Odl_Template
+ shared_tree_join
+
+Odl_To_Play_source_tree_join
+ [Template] Odl_To_Play_Template
+ source_tree_join
+
+Play_To_Odl_source_tree_join
+ [Template] Play_To_Odl_Template
+ source_tree_join
+
+Odl_To_Play_intra_pe_distinguisher
+ [Template] Odl_To_Play_Template
+ intra_pe_distinguisher
+
+Play_To_Odl_intra_pe_distinguisher
+ [Template] Play_To_Odl_Template
+ intra_pe_distinguisher
+
+Odl_To_Play_intra_vrf
+ [Template] Odl_To_Play_Template
+ intra_vrf
+
+Play_To_Odl_intra_vrf
+ [Template] Play_To_Odl_Template
+ intra_vrf
+
+Odl_To_Play_intra_source_as
+ [Template] Odl_To_Play_Template
+ intra_source_as
+
+Play_To_Odl_intra_source_as
+ [Template] Play_To_Odl_Template
+ intra_source_as
+
+Odl_To_Play_intra_source_as_4
+ [Template] Odl_To_Play_Template
+ intra_source_as_4
+
+Play_To_Odl_intra_source_as_4
+ [Template] Play_To_Odl_Template
+ intra_source_as_4
+
+Kill_Talking_BGP_Speaker
+ [Documentation] Abort the Python speaker
+ [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+ BGPSpeaker.Kill_BGP_Speaker
+ BGPcliKeywords.Store_File_To_Workspace play.py.out mvpn_play.log
+
+Delete_Bgp_Peer_Configuration
+ [Documentation] Revert the BGP configuration to the original state: without any configured peers.
+ [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+ TemplatedRequests.Delete_Templated ${MVPN_DIR}/bgp_peer mapping=${MVPN_ODL_CONFIG} session=${CONFIG_SESSION}
+
+Deconfigure_App_Peer
+ [Documentation] Revert the BGP configuration to the original state: without application peer
+ [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+ TemplatedRequests.Delete_Templated ${MVPN_DIR}/app_peer mapping=${MVPN_APP_PEER} session=${CONFIG_SESSION}
+
+*** Keywords ***
+Start_Suite
+ [Documentation] Initialize SetupUtils. 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}
+ SSHKeywords.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} --debug --mvpn --wfr 1
+ BGPcliKeywords.Read_And_Fail_If_Prompt_Is_Seen
+
+Odl_To_Play_Template
+ [Arguments] ${totest}
+ ${announce_hex} = OperatingSystem.Get_File ${MVPN_DIR}/${totest}/announce_${totest}.hex
+ ${announce_hex} = String.Remove_String ${announce_hex} \n
+ ${withdraw_hex} = OperatingSystem.Get_File ${MVPN_DIR}/${totest}/withdraw_${totest}.hex
+ ${withdraw_hex} = String.Remove_String ${withdraw_hex} \n
+ BgpRpcClient.play_clean
+ TemplatedRequests.Post_As_Xml_Templated ${MVPN_DIR}/${totest}/app mapping=${MVPN_APP_PEER} session=${CONFIG_SESSION}
+ ${update} BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s Get_Update_Message
+ BuiltIn.Should_Be_Equal_As_Strings ${update} ${announce_hex}
+ BgpRpcClient.play_clean
+ Remove_Configured_Routes ${totest}
+ ${update} BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s Get_Update_Message
+ BuiltIn.Should_Be_Equal_As_Strings ${update} ${withdraw_hex}
+ [Teardown] Remove_Configured_Routes ${totest}
+
+Play_To_Odl_Template
+ [Arguments] ${totest}
+ ${announce_hex} = OperatingSystem.Get_File ${MVPN_DIR}/${totest}/announce_${totest}.hex
+ ${withdraw_hex} = OperatingSystem.Get_File ${MVPN_DIR}/${totest}/withdraw_${totest}.hex
+ BgpRpcClient.play_clean
+ BgpRpcClient.play_send ${announce_hex}
+ BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${MVPN_DIR}/${totest}/rib mapping=${MVPN_ADJ_RIB_IN} session=${CONFIG_SESSION}
+ ... verify=True
+ BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${MVPN_DIR}/${totest}/rib mapping=${MVPN_EFFECTIVE_RIB_IN} session=${CONFIG_SESSION}
+ ... verify=True
+ BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${MVPN_DIR}/${totest}/rib mapping=${MVPN_LOC_RIB} session=${CONFIG_SESSION}
+ ... verify=True
+ BgpRpcClient.play_send ${withdraw_hex}
+ ${ipv} BuiltIn.Set_Variable_If '${totest}' == 'intra_ipv6' ipv6 ipv4
+ BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${MVPN_DIR}/empty_routes_${ipv} mapping=${MVPN_LOC_RIB} session=${CONFIG_SESSION}
+ ... verify=True
+ [Teardown] BgpRpcClient.play_send ${withdraw_hex}
+
+Get_Update_Message
+ [Documentation] Returns hex update message.
+ ${update} = BgpRpcClient.play_get
+ BuiltIn.Should_Not_Be_Equal ${update} ${Empty}
+ [Return] ${update}
+
+Remove_Configured_Routes
+ [Arguments] ${totest}
+ [Documentation] Removes the route if present.
+ BuiltIn.Run_Keyword_And_Ignore_Error TemplatedRequests.Delete_Templated ${MVPN_DIR}/${totest}/app mapping=${MVPN_APP_PEER} session=${CONFIG_SESSION}
integration/test/csit/suites/bgpcep/bgpfunct/030_bgp_functional_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
+integration/test/csit/suites/bgpcep/bgpfunct/060_bgp_functional_mvpn.robot
integration/test/csit/suites/bgpcep/bgpfunct/bgp_policies_default.robot
integration/test/csit/suites/bgpcep/tcpmd5user/tcpmd5user.robot
--- /dev/null
+<neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions">
+ <neighbor-address>$IP</neighbor-address>
+ <config>
+ <peer-group>application-peers</peer-group>
+ </config>
+</neighbor>
--- /dev/null
+restconf/config/openconfig-network-instance:network-instances/network-instance/global-bgp/openconfig-network-instance:protocols/protocol/openconfig-policy-types:BGP/$BGP_RIB/bgp/neighbors/neighbor/$IP
--- /dev/null
+<neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions">
+ <neighbor-address>$IP</neighbor-address>
+ <route-reflector>
+ <config>
+ <route-reflector-client>false</route-reflector-client>
+ </config>
+ </route-reflector>
+ <timers>
+ <config>
+ <hold-time>$HOLDTIME</hold-time>
+ </config>
+ </timers>
+ <transport>
+ <config>
+ <remote-port>$PEER_PORT</remote-port>
+ <passive-mode>$PASSIVE_MODE</passive-mode>
+ </config>
+ </transport>
+ <config>
+ <peer-type>INTERNAL</peer-type>
+ </config>
+ <afi-safis>
+ <afi-safi>
+ <afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types">x:IPV4-UNICAST</afi-safi-name>
+ </afi-safi>
+ <afi-safi>
+ <afi-safi-name>IPV4-MCAST-VPN</afi-safi-name>
+ </afi-safi>
+ <afi-safi>
+ <afi-safi-name>IPV6-MCAST-VPN</afi-safi-name>
+ </afi-safi>
+ <afi-safi>
+ <afi-safi-name>LINKSTATE</afi-safi-name>
+ </afi-safi>
+ </afi-safis>
+</neighbor>
--- /dev/null
+restconf/config/openconfig-network-instance:network-instances/network-instance/global-bgp/openconfig-network-instance:protocols/protocol/openconfig-policy-types:BGP/$BGP_RIB/bgp/neighbors/neighbor/$IP
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {}
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+{
+ "bgp-mvpn-ipv6:mvpn-routes-ipv6": {}
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv6-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv6:mvpn-routes-ipv6
--- /dev/null
+ffffffffffffffffffffffffffffffff0046020000002f400101014002008004040000000040050400000064800e17000105047f01010100020c00010102030401020000fbf0
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>AgwAAQECAwQBAgAA+/A=</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>egp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ </attributes>
+ <inter-as-i-pmsi-a-d>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <source-as>64496</source-as>
+ </inter-as-i-pmsi-a-d>
+ </mvpn-route>
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "path-id": 0,
+ "route-key": "AgwAAQECAwQBAgAA+/A=",
+ "attributes": {
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "as-path": {},
+ "origin": {
+ "value": "egp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "inter-as-i-pmsi-a-d": {
+ "route-distinguisher": "1.2.3.4:258",
+ "source-as": 64496
+ }
+ }
+ ]
+ }
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff00400200000029400101014002008004040000000040050400000064800f11000105020c00010102030401020000fbf0
--- /dev/null
+ffffffffffffffffffffffffffffffff0046020000002f400101014002008004040000000040050400000064800e17000105047f01010100010c00010102030401020a0a0a0a
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>AQwAAQECAwQBAgoKCgo=</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>egp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ </attributes>
+ <intra-as-i-pmsi-a-d>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <orig-route-ip>10.10.10.10</orig-route-ip>
+ </intra-as-i-pmsi-a-d>
+</mvpn-route>
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "path-id": 0,
+ "route-key": "AQwAAQECAwQBAgoKCgo=",
+ "attributes": {
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "as-path": {},
+ "origin": {
+ "value": "egp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "intra-as-i-pmsi-a-d": {
+ "route-distinguisher": "1.2.3.4:258",
+ "orig-route-ip": "10.10.10.10"
+ }
+ }
+ ]
+ }
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff00400200000029400101014002008004040000000040050400000064800f11000105010c00010102030401020a0a0a0a
--- /dev/null
+ffffffffffffffffffffffffffffffff004b02000000344001010040020040050400000064800e230002051020010db800010000000000000000000600010c0001ac10002c0065c0a86401
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv6-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv6:mvpn-routes-ipv6
--- /dev/null
+<?xml version="1.0" ?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv6">
+ <route-key>flow1</route-key>
+ <path-id>0</path-id>
+ <intra-as-i-pmsi-a-d>
+ <route-distinguisher>172.16.0.44:101</route-distinguisher>
+ <orig-route-ip>192.168.100.1</orig-route-ip>
+ </intra-as-i-pmsi-a-d>
+ <attributes>
+ <ipv6-next-hop>
+ <global>2001:db8:1::6</global>
+ </ipv6-next-hop>
+ <as-path/>
+ <origin>
+ <value>igp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ </attributes>
+</mvpn-route>
--- /dev/null
+{
+ "bgp-mvpn-ipv6:mvpn-routes-ipv6": {
+ "mvpn-route": [
+ {
+ "route-key": "AQwAAawQACwAZcCoZAE=",
+ "path-id": 0,
+ "intra-as-i-pmsi-a-d": {
+ "route-distinguisher": "172.16.0.44:101",
+ "orig-route-ip": "192.168.100.1"
+ },
+ "attributes": {
+ "as-path": {
+ },
+ "ipv6-next-hop": {
+ "global": "2001:db8:1::6"
+ },
+ "origin": {
+ "value": "igp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ }
+ }
+ ]
+ }
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv6-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv6:mvpn-routes-ipv6
--- /dev/null
+ffffffffffffffffffffffffffffffff003902000000224001010040020040050400000064800f11000205010c0001ac10002c0065c0a86401
\ No newline at end of file
--- /dev/null
+ffffffffffffffffffffffffffffffff00570200000040c01b0e0a0a0a0104e3800a0a140204e3c0400101014002008004040000000040050400000064800e17000105047f01010100010c00010102030401020a0a0a0a
\ No newline at end of file
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>AQwAAQECAwQBAgoKCgo=</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>egp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ <pe-distinguisher-labels-attribute>
+ <pe-distinguisher-label-attribute>
+ <pe-address>10.10.10.1</pe-address>
+ <mpls-label>20024</mpls-label>
+ </pe-distinguisher-label-attribute>
+ <pe-distinguisher-label-attribute>
+ <pe-address>10.10.20.2</pe-address>
+ <mpls-label>20028</mpls-label>
+ </pe-distinguisher-label-attribute>
+ </pe-distinguisher-labels-attribute>
+ </attributes>
+ <intra-as-i-pmsi-a-d>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <orig-route-ip>10.10.10.10</orig-route-ip>
+ </intra-as-i-pmsi-a-d>
+</mvpn-route>
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "route-key": "AQwAAQECAwQBAgoKCgo=",
+ "path-id": 0,
+ "attributes": {
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "as-path": {},
+ "pe-distinguisher-labels-attribute": {
+ "pe-distinguisher-label-attribute": [
+ {
+ "pe-address": "10.10.10.1",
+ "mpls-label": 20024
+ },
+ {
+ "pe-address": "10.10.20.2",
+ "mpls-label": 20028
+ }
+ ]
+ },
+ "origin": {
+ "value": "egp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "intra-as-i-pmsi-a-d": {
+ "route-distinguisher": "1.2.3.4:258",
+ "orig-route-ip": "10.10.10.10"
+ }
+ }
+ ]
+ }
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff0051020000003ac01b0e0a0a0a0104e3800a0a140204e3c0400101014002008004040000000040050400000064800f11000105010c00010102030401020a0a0a0a
\ No newline at end of file
--- /dev/null
+ffffffffffffffffffffffffffffffff0051020000003a400101014002008004040000000040050400000064800e17000105047f01010100010c00010102030401020a0a0a0ac010080009004100000000
\ No newline at end of file
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>AQwAAQECAwQBAgoKCgo=</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>egp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ <extended-communities>
+ <transitive>true</transitive>
+ <source-as-extended-community>
+ <global-administrator>65</global-administrator>
+ </source-as-extended-community>
+ </extended-communities>
+ </attributes>
+ <intra-as-i-pmsi-a-d>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <orig-route-ip>10.10.10.10</orig-route-ip>
+ </intra-as-i-pmsi-a-d>
+</mvpn-route>
\ No newline at end of file
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "route-key": "AQwAAQECAwQBAgoKCgo=",
+ "path-id": 0,
+ "attributes": {
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "extended-communities": [
+ {
+ "transitive": true,
+ "source-as-extended-community": {
+ "global-administrator": 65
+ }
+ }
+ ],
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "as-path": {},
+ "origin": {
+ "value": "egp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "intra-as-i-pmsi-a-d": {
+ "route-distinguisher": "1.2.3.4:258",
+ "orig-route-ip": "10.10.10.10"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff004b0200000034400101014002008004040000000040050400000064800f11000105010c00010102030401020a0a0a0ac010080009004100000000
\ No newline at end of file
--- /dev/null
+ffffffffffffffffffffffffffffffff0051020000003a400101004002008004040000000040050400000064800e17000105047f01010100010c00010102030401020a0a0a0ac0100802d10000fbf00000
\ No newline at end of file
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>AQwAAQECAwQBAgoKCgo=</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>igp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ <extended-communities>
+ <transitive>true</transitive>
+ <source-as-4-extended-community>
+ <global-administrator>64496</global-administrator>
+ </source-as-4-extended-community>
+ </extended-communities>
+ </attributes>
+ <intra-as-i-pmsi-a-d>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <orig-route-ip>10.10.10.10</orig-route-ip>
+ </intra-as-i-pmsi-a-d>
+</mvpn-route>
\ No newline at end of file
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "route-key": "AQwAAQECAwQBAgoKCgo=",
+ "path-id": 0,
+ "attributes": {
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "extended-communities": [
+ {
+ "transitive": true,
+ "source-as-4-extended-community": {
+ "global-administrator": 64496
+ }
+ }
+ ],
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "as-path": {},
+ "origin": {
+ "value": "igp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "intra-as-i-pmsi-a-d": {
+ "route-distinguisher": "1.2.3.4:258",
+ "orig-route-ip": "10.10.10.10"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff004b0200000034400101004002008004040000000040050400000064800f11000105010c00010102030401020a0a0a0ac0100802d10000fbf00000
\ No newline at end of file
--- /dev/null
+ffffffffffffffffffffffffffffffff0051020000003a400101014002008004040000000040050400000064800e17000105047f01010100010c00010102030401020a0a0a0ac01008010b0a0000013130
\ No newline at end of file
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>AQwAAQECAwQBAgoKCgo=</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>egp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ <extended-communities>
+ <transitive>true</transitive>
+ <vrf-route-import-extended-community>
+ <inet4-specific-extended-community-common>
+ <global-administrator>10.0.0.1</global-administrator>
+ <local-administrator>MTA=</local-administrator>
+ </inet4-specific-extended-community-common>
+ </vrf-route-import-extended-community>
+ </extended-communities>
+ </attributes>
+ <intra-as-i-pmsi-a-d>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <orig-route-ip>10.10.10.10</orig-route-ip>
+ </intra-as-i-pmsi-a-d>
+</mvpn-route>
\ No newline at end of file
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "route-key": "AQwAAQECAwQBAgoKCgo=",
+ "path-id": 0,
+ "attributes": {
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "extended-communities": [
+ {
+ "transitive": true,
+ "vrf-route-import-extended-community": {
+ "inet4-specific-extended-community-common": {
+ "global-administrator": "10.0.0.1",
+ "local-administrator": "MTA="
+ }
+ }
+ }
+ ],
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "as-path": {},
+ "origin": {
+ "value": "egp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "intra-as-i-pmsi-a-d": {
+ "route-distinguisher": "1.2.3.4:258",
+ "orig-route-ip": "10.10.10.10"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff004b0200000034400101014002008004040000000040050400000064800f11000105010c00010102030401020a0a0a0ac01008010b0a0000013130
\ No newline at end of file
--- /dev/null
+ffffffffffffffffffffffffffffffff004c0200000035400101014002008004040000000040050400000064800e1d000105047f010101000412020c00010102030401020000000101000001
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>BBICDAABAQIDBAECAAAAAQEAAAE=</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>egp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ </attributes>
+ <leaf-a-d>
+ <orig-route-ip>1.0.0.1</orig-route-ip>
+ <inter-as-i-pmsi-a-d>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <source-as>1</source-as>
+ </inter-as-i-pmsi-a-d>
+ </leaf-a-d>
+</mvpn-route>
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "path-id": 0,
+ "route-key": "BBICDAABAQIDBAECAAAAAQEAAAE=",
+ "attributes": {
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "as-path": {},
+ "origin": {
+ "value": "egp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "leaf-a-d": {
+ "orig-route-ip": "1.0.0.1",
+ "inter-as-i-pmsi-a-d": {
+ "route-distinguisher": "1.2.3.4:258",
+ "source-as": 1
+ }
+ }
+ }
+ ]
+ }
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff0046020000002f400101014002008004040000000040050400000064800f170001050412020c00010102030401020000000101000001
\ No newline at end of file
--- /dev/null
+ffffffffffffffffffffffffffffffff00500200000039400101014002008004040000000040050400000064800e21000105047f01010100061600010102030401020000001020010000012002000002
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>BhYAAQECAwQBAgAAABAgAQAAASACAAAC</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>egp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ </attributes>
+ <shared-tree-join>
+ <c-multicast>
+ <multicast-source>1.0.0.1</multicast-source>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <source-as>16</source-as>
+ <c-g-address>2.0.0.2</c-g-address>
+ </c-multicast>
+ </shared-tree-join>
+</mvpn-route>
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "path-id": 0,
+ "route-key": "BhYAAQECAwQBAgAAABAgAQAAASACAAAC",
+ "attributes": {
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "as-path": {},
+ "origin": {
+ "value": "egp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "shared-tree-join": {
+ "c-multicast": {
+ "multicast-source": "1.0.0.1",
+ "route-distinguisher": "1.2.3.4:258",
+ "source-as": 16,
+ "c-g-address": "2.0.0.2"
+ }
+ }
+ }
+ ]
+ }
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff004a0200000033400101014002008004040000000040050400000064800f1b000105061600010102030401020000001020010000012002000002
--- /dev/null
+ffffffffffffffffffffffffffffffff004c0200000035400101014002008004040000000040050400000064800e1d000105047f010101000512000101020304010220010000012002000002
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>BRIAAQECAwQBAiABAAABIAIAAAI=</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>egp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ </attributes>
+ <source-active-a-d>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <multicast-source>1.0.0.1</multicast-source>
+ <multicast-group>2.0.0.2</multicast-group>
+ </source-active-a-d>
+</mvpn-route>
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "path-id": 0,
+ "route-key": "BRIAAQECAwQBAiABAAABIAIAAAI=",
+ "attributes": {
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "as-path": {},
+ "origin": {
+ "value": "egp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "source-active-a-d": {
+ "route-distinguisher": "1.2.3.4:258",
+ "multicast-source": "1.0.0.1",
+ "multicast-group": "2.0.0.2"
+ }
+ }
+ ]
+ }
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff0046020000002f400101014002008004040000000040050400000064800f170001050512000101020304010220010000012002000002
--- /dev/null
+ffffffffffffffffffffffffffffffff00500200000039400101014002008004040000000040050400000064800e21000105047f01010100071600010102030401020000000a20010000012002000002
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>BxYAAQECAwQBAgAAAAogAQAAASACAAAC</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>egp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ </attributes>
+ <source-tree-join>
+ <c-multicast>
+ <multicast-source>1.0.0.1</multicast-source>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <source-as>10</source-as>
+ <c-g-address>2.0.0.2</c-g-address>
+ </c-multicast>
+ </source-tree-join>
+</mvpn-route>
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "path-id": 0,
+ "route-key": "BxYAAQECAwQBAgAAAAogAQAAASACAAAC",
+ "attributes": {
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "as-path": {},
+ "origin": {
+ "value": "egp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "source-tree-join": {
+ "c-multicast": {
+ "multicast-source": "1.0.0.1",
+ "route-distinguisher": "1.2.3.4:258",
+ "source-as": 10,
+ "c-g-address": "2.0.0.2"
+ }
+ }
+ }
+ ]
+ }
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff004a0200000033400101014002008004040000000040050400000064800f1b000105071600010102030401020000000a20010000012002000002
--- /dev/null
+ffffffffffffffffffffffffffffffff00500200000039400101014002008004040000000040050400000064800e21000105047f0101010003160001010203040102200a00000a200c00000c01000001
--- /dev/null
+/restconf/config/bgp-rib:application-rib/$IP/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+<?xml version="1.0"?>
+<mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
+ <path-id>0</path-id>
+ <route-key>AxYAAQECAwQBAiAKAAAKIAwAAAwBAAAB</route-key>
+ <attributes>
+ <ipv4-next-hop>
+ <global>127.1.1.1</global>
+ </ipv4-next-hop>
+ <multi-exit-disc>
+ <med>0</med>
+ </multi-exit-disc>
+ <as-path/>
+ <origin>
+ <value>egp</value>
+ </origin>
+ <local-pref>
+ <pref>100</pref>
+ </local-pref>
+ </attributes>
+ <s-pmsi-a-d>
+ <orig-route-ip>1.0.0.1</orig-route-ip>
+ <multicast-source>10.0.0.10</multicast-source>
+ <route-distinguisher>1.2.3.4:258</route-distinguisher>
+ <c-g-address>12.0.0.12</c-g-address>
+ </s-pmsi-a-d>
+</mvpn-route>
--- /dev/null
+{
+ "bgp-mvpn-ipv4:mvpn-routes-ipv4": {
+ "mvpn-route": [
+ {
+ "path-id": 0,
+ "route-key": "AxYAAQECAwQBAiAKAAAKIAwAAAwBAAAB",
+ "attributes": {
+ "ipv4-next-hop": {
+ "global": "127.1.1.1"
+ },
+ "multi-exit-disc": {
+ "med": 0
+ },
+ "as-path": {},
+ "origin": {
+ "value": "egp"
+ },
+ "local-pref": {
+ "pref": 100
+ }
+ },
+ "s-pmsi-a-d": {
+ "orig-route-ip": "1.0.0.1",
+ "multicast-source": "10.0.0.10",
+ "route-distinguisher": "1.2.3.4:258",
+ "c-g-address": "12.0.0.12"
+ }
+ }
+ ]
+ }
+}
--- /dev/null
+restconf/operational/bgp-rib:bgp-rib/rib/$BGP_RIB/$PATH/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes-ipv4
--- /dev/null
+ffffffffffffffffffffffffffffffff004a0200000033400101014002008004040000000040050400000064800f1b00010503160001010203040102200a00000a200c00000c01000001
-restconf/config/openconfig-network-instance:network-instances/network-instance/global-bgp/openconfig-network-instance:protocols/protocol/openconfig-policy-types:BGP/$BGP_RIB_OPENCONFIG/bgp/neighbors/neighbor/$IP
+restconf/config/openconfig-network-instance:network-instances/network-instance/global-bgp/openconfig-network-instance:protocols/protocol/openconfig-policy-types:BGP/$BGP_RIB/bgp/neighbors/neighbor/$IP
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)
+ str_help = "Open message includes Multicast in MPLS/BGP IP VPNs arguments.\
+ Enabling this flag makes the script not decoding the update mesage, because of not\
+ supported decoding for these elements."
+ parser.add_argument("--mvpn", default=False, action="store_true", help=str_help)
parser.add_argument("--wfr", default=10, type=int, help="Wait for read timeout")
str_help = "Skipping well known attributes for update message"
parser.add_argument("--skipattr", default=False, action="store_true", help=str_help)
self.rfc4760 = args.rfc4760
self.bgpls = args.bgpls
self.evpn = args.evpn
+ self.mvpn = args.mvpn
self.skipattr = args.skipattr
# Default values when BGP-LS Attributes are used
if self.bgpls:
)
optional_parameters_hex += optional_parameter_hex
+ if self.mvpn:
+ optional_parameter_hex = (
+ "\x02" # Param type ("Capability Ad")
+ "\x06" # Length (6 bytes)
+ "\x01" # Multiprotocol extetension capability,
+ "\x04" # Capability value length
+ "\x00\x01" # AFI (IPV4)
+ "\x00" # (reserved)
+ "\x05" # SAFI (MCAST-VPN)
+ )
+ optional_parameters_hex += optional_parameter_hex
+ optional_parameter_hex = (
+ "\x02" # Param type ("Capability Ad")
+ "\x06" # Length (6 bytes)
+ "\x01" # Multiprotocol extetension capability,
+ "\x04" # Capability value length
+ "\x00\x02" # AFI (IPV6)
+ "\x00" # (reserved)
+ "\x05" # SAFI (MCAST-VPN)
+ )
+ optional_parameters_hex += optional_parameter_hex
+
optional_parameter_hex = (
"\x02" # Param type ("Capability Ad")
"\x06" # Length (6 bytes)
for idle waiting.
"""
- def __init__(self, bgp_socket, timer, storage, evpn=False, wait_for_read=10):
+ def __init__(self, bgp_socket, timer, storage, evpn=False, mvpn=False, wait_for_read=10):
"""The reader initialisation.
Arguments:
timer: timer to be used for scheduling
storage: thread safe dict
evpn: flag that evpn functionality is tested
+ mvpn: flag that mvpn functionality is tested
"""
# References to outside objects.
self.socket = bgp_socket
self.rx_activity_detected = True
self.storage = storage
self.evpn = evpn
+ self.mvpn = mvpn
self.wfr = wait_for_read
def read_message_chunk(self):
"""
# TODO: We could return the whole message, currently not needed.
# We assume the socket is readable.
+ logger.info("READING MESSAGE")
chunk_message = self.socket.recv(self.bytes_to_read)
self.msg_in += chunk_message
self.bytes_to_read -= len(chunk_message)
logger.debug("Skipping update decoding due to evpn data expected")
return
+ logger.debug("Mvpn {}".format(self.mvpn))
+ if self.mvpn:
+ logger.debug("Skipping update decoding due to mvpn data expected")
+ return
+
if msg_type == 2:
logger.debug("Message type: 0x%s (update)",
binascii.b2a_hex(msg_type_hex))
self.generator = generator
self.timer = timer
# Sub-trackers.
- self.reader = ReadTracker(bgp_socket, timer, storage, evpn=cliargs.evpn, wait_for_read=cliargs.wfr)
+ self.reader = ReadTracker(bgp_socket, timer, storage, evpn=cliargs.evpn,
+ mvpn=cliargs.mvpn, wait_for_read=cliargs.wfr)
self.writer = WriteTracker(bgp_socket, generator, timer)
# Prioritization state.
self.prioritize_writing = False