Skip to content

Commit

Permalink
Add Mobility info to xmpp enet and inet message
Browse files Browse the repository at this point in the history
To support mobility extended community, add sequence number and sticky bit to
xmpp route messages.

Xmpp message xml message will carry a tag "mobility" with "seqno" and "sticky"
as attribute.

Example:
<xmpp-message>
    <mobility seqno="2" sticky="true" />
</xmpp-message>

Change-Id: Ife4909cff8e2febe349c44b48c5cae7abf0440f9
Related-bug: #1645092
  • Loading branch information
bailkeri committed Dec 13, 2016
1 parent 39efa1d commit e039251
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 3 deletions.
32 changes: 31 additions & 1 deletion src/schema/test/xmpp_unicast_test.cc
Expand Up @@ -55,10 +55,39 @@ TEST_F(QueryTest, Decode) {
xdoc_.reset();
}

TEST_F(QueryTest, Decode_1) {
pugi::xml_parse_result result =
xdoc_.load_file("controller/src/schema/testdata/bgp_l3vpn_unicast_3.xml");
EXPECT_TRUE(result);

pugi::xml_node node = xdoc_.first_child();
if (node.type() != pugi::node_null) {
EntryType::XmlParseProperty(node, &xparser_);

EntryType *entryp_;
entryp_ = (static_cast<EntryType *>(xparser_.get()));

EXPECT_EQ(entryp_->nlri.af, 1);
ASSERT_STREQ(entryp_->nlri.address.c_str(), "10.1.2.1/32");

EXPECT_EQ(entryp_->next_hops.next_hop[0].af, 1);
ASSERT_STREQ(entryp_->next_hops.next_hop[0].address.c_str(),
"infrastructure-ip-address");
EXPECT_EQ(entryp_->next_hops.next_hop[0].label, 10000);
EXPECT_EQ(entryp_->version, 1);
EXPECT_EQ(entryp_->mobility.seqno, 5);
EXPECT_EQ(entryp_->mobility.sticky, false);
}
xdoc_.reset();
}


TEST_F(QueryTest, Encode) {
EntryType entryp_;

entryp_.version = 2;
entryp_.mobility.seqno = 2;
entryp_.mobility.sticky = true;
entryp_.nlri.af = 1;
entryp_.nlri.address = "10.2.2.2";

Expand All @@ -72,7 +101,6 @@ TEST_F(QueryTest, Encode) {
pugi::xml_node node = xdoc_.root();
pugi::xml_node node_p = node.append_child("entry");
entryp_.Encode(&node_p);

node = xdoc_.first_child();
if (node.type() != pugi::node_null) {
EntryType::XmlParseProperty(node, &xparser_);
Expand All @@ -86,6 +114,8 @@ TEST_F(QueryTest, Encode) {
ASSERT_STREQ(entryp2_->next_hops.next_hop[0].address.c_str(),
"20.2.2.2");
EXPECT_EQ(entryp2_->version, 2);
EXPECT_EQ(entryp2_->mobility.seqno, 2);
EXPECT_EQ(entryp2_->mobility.sticky, true);
EXPECT_EQ(entryp2_->next_hops.next_hop[0].label, 1000);
}
xdoc_.reset();
Expand Down
26 changes: 26 additions & 0 deletions src/schema/testdata/bgp_l3vpn_unicast_3.xml
@@ -0,0 +1,26 @@
<entry xmlns='http://ietf.org/protocol/bgpvpn'>
<nlri>
<af>1</af>
<address>10.1.2.1/32</address>
</nlri>
<version>1</version>
<mobility seqno="5" sticky="false"/>
<next-hops>
<next-hop>
<af>1</af>
<address>infrastructure-ip-address</address>
<label>10000</label>
</next-hop>
</next-hops>
</entry>


<!--
<entry xmlns='http://ietf.org/protocol/bgpvpn'>
<nlri af='1'>10.1.2.1/32</nlri>
<next-hops-list>
<next-hop af='1' label='10000'>'infrastructure-ip-address'</next-hop>
</next-hops-list>
<version>1</version>
</entry>
-->
8 changes: 7 additions & 1 deletion src/schema/xmpp_enet.xsd
Expand Up @@ -46,14 +46,20 @@ xsd:targetNamespace="http://www.contrailsystems.com/xmpp-enet-cfg.xsd">
<xsd:element name="security-group" type="xsd:integer" maxOccurs="unbounded"/>
</xsd:complexType>

<xsd:complexType name="EnetMobilityType">
<xsd:attribute name="sticky" type="xsd:boolean"/>
<xsd:attribute name="seqno" type="xsd:integer"/>
</xsd:complexType>

<xsd:complexType name="EnetEntryType">
<xsd:all>
<xsd:element name="nlri" type="EnetAddressType"/>
<xsd:element name="next-hops" type="EnetNextHopListType"/>
<xsd:element name="olist" type="EnetOlistType"/>
<xsd:element name="virtual-network" type="xsd:string"/>
<xsd:element name="mobility" type="EnetMobilityType"/>
<!-- sequence-number is deprecated in favor of mobility -->
<xsd:element name="sequence-number" type="xsd:integer"/>
<xsd:element name="sticky" type="xsd:boolean" default="false"/>
<xsd:element name="security-group-list" type="EnetSecurityGroupListType"/>
<xsd:element name="local-preference" type="xsd:integer"/>
<xsd:element name="med" type="xsd:integer"/>
Expand Down
8 changes: 7 additions & 1 deletion src/schema/xmpp_unicast.xsd
Expand Up @@ -71,14 +71,20 @@ xsd:targetNamespace="http://www.contrailsystems.com/bgp-l3vpn-unicast-cfg.xsd">
<xsd:element name="load-balance-decision" type="LoadBalanceDecisionType" default="field-hash"/>
</xsd:complexType>

<xsd:complexType name="MobilityType">
<xsd:attribute name="sticky" type="xsd:boolean"/>
<xsd:attribute name="seqno" type="xsd:integer"/>
</xsd:complexType>

<xsd:complexType name="EntryType">
<xsd:all>
<xsd:element name="nlri" type="IPAddressType"/>
<xsd:element name="next-hops" type="NextHopListType"/>
<xsd:element name="version" type="xsd:integer"/>
<xsd:element name="virtual-network" type="xsd:string"/>
<xsd:element name="mobility" type="MobilityType"/>
<!-- sequence-number is deprecated in favor of mobility -->
<xsd:element name="sequence-number" type="xsd:integer"/>
<xsd:element name="sticky" type="xsd:boolean" default="false"/>
<xsd:element name="security-group-list" type="SecurityGroupListType"/>
<xsd:element name="community-tag-list" type="CommunityTagListType"/>
<xsd:element name="local-preference" type="xsd:integer"/>
Expand Down

0 comments on commit e039251

Please sign in to comment.