Merge "Make sure we only accept short AS numbers"
authorDana Kutenicsova <dkutenic@cisco.com>
Sun, 8 Dec 2013 12:56:13 +0000 (12:56 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Sun, 8 Dec 2013 12:56:13 +0000 (12:56 +0000)
bgp/concepts/src/main/yang/bgp-types.yang
bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/CommunitiesParser.java
bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java
bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/RouteOriginCommunityTest.java
bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/RouteTargetCommunityTest.java

index 475e6f03221dc00a32e1059a3bba7736f1f41e6b..39e51c1fedf2fc7cb80ded1c743a4922ce20da22 100644 (file)
@@ -75,11 +75,17 @@ module bgp-types {
                }
        }
 
+       typedef short-as-number {
+               type inet:as-number {
+                       range 0..65535;
+               }
+       }
+
        grouping bgp-aggregator {
                reference "http://tools.ietf.org/html/rfc4271#section-5.1.7";
                description "BGP Path Attribute AGGREGATOR.";
                leaf as-number {
-                       // BUG-79 : add range 0..65535 when the bug is fixed.
+                       // We are acting as a NEW speaker, so only four bytes are allowed
                        type inet:as-number;
                }
                leaf network-address {
@@ -113,11 +119,7 @@ module bgp-types {
                                                type boolean;
                                        }
                                        leaf global-administrator {
-                                               type inet:as-number;
-                                               // BUG-79
-                                               //{
-                                               //      range 0..65535;
-                                               //}
+                                               type short-as-number;
                                        }
                                        leaf local-administrator {
                                                type binary {
@@ -159,11 +161,7 @@ module bgp-types {
                                container route-target-extended-community {
                                        when "../comm-type = 1 and ../comm-sub-type = 2 or ../comm-type = 2 and ../comm-sub-type = 2 or ../comm-type = 3 and ../comm-sub-type = 2";
                                        leaf global-administrator {
-                                               type inet:as-number;
-                                               // BUG-79
-                                               //{
-                                               //      range 0..65535;
-                                               //}
+                                               type short-as-number;
                                        }
                                        leaf local-administrator {
                                                type binary {
@@ -176,11 +174,7 @@ module bgp-types {
                                container route-origin-extended-community {
                                        when "../comm-type = 1 and ../comm-sub-type = 3 or ../comm-type = 2 and ../comm-sub-type = 3 or ../comm-type = 3 and ../comm-sub-type = 3";
                                        leaf global-administrator {
-                                               type inet:as-number;
-                                               // BUG-79
-                                               //{
-                                               //      range 0..65535;
-                                               //}
+                                               type short-as-number;
                                        }
                                        leaf local-administrator {
                                                type binary {
index f777d52f601f6e0bc7b99f9e530b99dc193c022c..48a68c6abcb0ce55ec4307a4a00c409962b3c454 100644 (file)
@@ -14,10 +14,10 @@ import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
 import org.opendaylight.protocol.bgp.parser.BGPError;
 import org.opendaylight.protocol.concepts.Ipv4Util;
 import org.opendaylight.protocol.util.ByteArray;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.ExtendedCommunities;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.ExtendedCommunitiesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Community;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ShortAsNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.AsSpecificExtendedCommunityCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.Inet4SpecificExtendedCommunityCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.OpaqueExtendedCommunityCaseBuilder;
@@ -117,42 +117,42 @@ public final class CommunitiesParser {
                                comm = new ExtendedCommunitiesBuilder().setCommType(AS_TYPE_TRANS).setCommSubType(ROUTE_TARGET_SUBTYPE).setExtendedCommunity(
                                                new RouteTargetExtendedCommunityCaseBuilder().setRouteTargetExtendedCommunity(
                                                                new RouteTargetExtendedCommunityBuilder().setGlobalAdministrator(
-                                                                               new AsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
-                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
+                                                                               new ShortAsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
+                                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
                        } else if (subType == ROUTE_ORIGIN_SUBTYPE) {
                                comm = new ExtendedCommunitiesBuilder().setCommType(AS_TYPE_TRANS).setCommSubType(ROUTE_ORIGIN_SUBTYPE).setExtendedCommunity(
                                                new RouteOriginExtendedCommunityCaseBuilder().setRouteOriginExtendedCommunity(
                                                                new RouteOriginExtendedCommunityBuilder().setGlobalAdministrator(
-                                                                               new AsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
-                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
+                                                                               new ShortAsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
+                                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
                        } else {
                                comm = new ExtendedCommunitiesBuilder().setCommType(AS_TYPE_TRANS).setExtendedCommunity(
                                                new AsSpecificExtendedCommunityCaseBuilder().setAsSpecificExtendedCommunity(
                                                                new AsSpecificExtendedCommunityBuilder().setTransitive(false).setGlobalAdministrator(
-                                                                               new AsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
-                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
+                                                                               new ShortAsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
+                                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
                        }
                        break;
                case AS_TYPE_NON_TRANS:
                        comm = new ExtendedCommunitiesBuilder().setCommType(AS_TYPE_NON_TRANS).setExtendedCommunity(
                                        new AsSpecificExtendedCommunityCaseBuilder().setAsSpecificExtendedCommunity(
                                                        new AsSpecificExtendedCommunityBuilder().setTransitive(true).setGlobalAdministrator(
-                                                                       new AsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
-                                                                       ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
+                                                                       new ShortAsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
+                                                                                       ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
                        break;
                case ROUTE_TYPE_ONLY:
                        if (subType == ROUTE_TARGET_SUBTYPE) {
                                comm = new ExtendedCommunitiesBuilder().setCommType(ROUTE_TYPE_ONLY).setCommSubType(ROUTE_TARGET_SUBTYPE).setExtendedCommunity(
                                                new RouteTargetExtendedCommunityCaseBuilder().setRouteTargetExtendedCommunity(
                                                                new RouteTargetExtendedCommunityBuilder().setGlobalAdministrator(
-                                                                               new AsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
-                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
+                                                                               new ShortAsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
+                                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
                        } else if (subType == ROUTE_ORIGIN_SUBTYPE) {
                                comm = new ExtendedCommunitiesBuilder().setCommType(ROUTE_TYPE_ONLY).setCommSubType(ROUTE_ORIGIN_SUBTYPE).setExtendedCommunity(
                                                new RouteOriginExtendedCommunityCaseBuilder().setRouteOriginExtendedCommunity(
                                                                new RouteOriginExtendedCommunityBuilder().setGlobalAdministrator(
-                                                                               new AsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
-                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
+                                                                               new ShortAsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
+                                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
                        } else {
                                throw new BGPDocumentedException("Could not parse Extended Community subtype: " + subType, BGPError.OPT_ATTR_ERROR);
                        }
@@ -162,20 +162,20 @@ public final class CommunitiesParser {
                                comm = new ExtendedCommunitiesBuilder().setCommType(INET_TYPE_TRANS).setCommSubType(ROUTE_TARGET_SUBTYPE).setExtendedCommunity(
                                                new RouteTargetExtendedCommunityCaseBuilder().setRouteTargetExtendedCommunity(
                                                                new RouteTargetExtendedCommunityBuilder().setGlobalAdministrator(
-                                                                               new AsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
-                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
+                                                                               new ShortAsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
+                                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
                        } else if (subType == ROUTE_ORIGIN_SUBTYPE) {
                                comm = new ExtendedCommunitiesBuilder().setCommType(INET_TYPE_TRANS).setCommSubType(ROUTE_ORIGIN_SUBTYPE).setExtendedCommunity(
                                                new RouteOriginExtendedCommunityCaseBuilder().setRouteOriginExtendedCommunity(
                                                                new RouteOriginExtendedCommunityBuilder().setGlobalAdministrator(
-                                                                               new AsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
-                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
+                                                                               new ShortAsNumber(ByteArray.bytesToLong(ByteArray.subByte(value, 0, AS_NUMBER_LENGTH)))).setLocalAdministrator(
+                                                                                               ByteArray.subByte(value, AS_NUMBER_LENGTH, AS_LOCAL_ADMIN_LENGTH)).build()).build()).build();
                        } else {
                                comm = new ExtendedCommunitiesBuilder().setCommType(INET_TYPE_TRANS).setExtendedCommunity(
                                                new Inet4SpecificExtendedCommunityCaseBuilder().setInet4SpecificExtendedCommunity(
                                                                new Inet4SpecificExtendedCommunityBuilder().setTransitive(false).setGlobalAdministrator(
                                                                                Ipv4Util.addressForBytes(ByteArray.subByte(value, 0, 4))).setLocalAdministrator(
-                                                                               ByteArray.subByte(value, 4, 2)).build()).build()).build();
+                                                                                               ByteArray.subByte(value, 4, 2)).build()).build()).build();
                        }
                        break;
                case INET_TYPE_NON_TRANS:
@@ -183,7 +183,7 @@ public final class CommunitiesParser {
                                        new Inet4SpecificExtendedCommunityCaseBuilder().setInet4SpecificExtendedCommunity(
                                                        new Inet4SpecificExtendedCommunityBuilder().setTransitive(true).setGlobalAdministrator(
                                                                        Ipv4Util.addressForBytes(ByteArray.subByte(value, 0, 4))).setLocalAdministrator(
-                                                                       ByteArray.subByte(value, 4, 2)).build()).build()).build();
+                                                                                       ByteArray.subByte(value, 4, 2)).build()).build()).build();
                        break;
                case OPAQUE_TYPE_TRANS:
                        comm = new ExtendedCommunitiesBuilder().setCommType(OPAQUE_TYPE_TRANS).setExtendedCommunity(
index dbb1d86e0a2b38c13e5881a4fff5d900048a4000..f9431937a3d6fe0a28525e3d47de184253920147 100644 (file)
@@ -37,6 +37,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpAggregator;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ShortAsNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.AsSpecificExtendedCommunityCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.AsSpecificExtendedCommunityCaseBuilder;
@@ -128,7 +129,7 @@ public class ComplementaryTest {
                        fail("Not expected exception: " + e1);
                }
                AsSpecificExtendedCommunityCase expected = new AsSpecificExtendedCommunityCaseBuilder().setAsSpecificExtendedCommunity(
-                               new AsSpecificExtendedCommunityBuilder().setTransitive(false).setGlobalAdministrator(new AsNumber(54L)).setLocalAdministrator(
+                               new AsSpecificExtendedCommunityBuilder().setTransitive(false).setGlobalAdministrator(new ShortAsNumber(54L)).setLocalAdministrator(
                                                new byte[] { 0, 0, 1, 76 }).build()).build();
                AsSpecificExtendedCommunityCase result = (AsSpecificExtendedCommunityCase) as.getExtendedCommunity();
                assertEquals(expected.getAsSpecificExtendedCommunity().isTransitive(), result.getAsSpecificExtendedCommunity().isTransitive());
@@ -144,7 +145,7 @@ public class ComplementaryTest {
                        fail("Not expected exception: " + e1);
                }
                expected = new AsSpecificExtendedCommunityCaseBuilder().setAsSpecificExtendedCommunity(
-                               new AsSpecificExtendedCommunityBuilder().setTransitive(true).setGlobalAdministrator(new AsNumber(54L)).setLocalAdministrator(
+                               new AsSpecificExtendedCommunityBuilder().setTransitive(true).setGlobalAdministrator(new ShortAsNumber(54L)).setLocalAdministrator(
                                                new byte[] { 0, 0, 1, 76 }).build()).build();
                result = (AsSpecificExtendedCommunityCase) as.getExtendedCommunity();
                assertEquals(expected.getAsSpecificExtendedCommunity().isTransitive(), result.getAsSpecificExtendedCommunity().isTransitive());
@@ -157,7 +158,7 @@ public class ComplementaryTest {
                        fail("Not expected exception: " + e1);
                }
                final RouteTargetExtendedCommunityCase rexpected = new RouteTargetExtendedCommunityCaseBuilder().setRouteTargetExtendedCommunity(
-                               new RouteTargetExtendedCommunityBuilder().setGlobalAdministrator(new AsNumber(35L)).setLocalAdministrator(
+                               new RouteTargetExtendedCommunityBuilder().setGlobalAdministrator(new ShortAsNumber(35L)).setLocalAdministrator(
                                                new byte[] { 4, 2, 8, 7 }).build()).build();
                final RouteTargetExtendedCommunityCase rresult = (RouteTargetExtendedCommunityCase) rtc.getExtendedCommunity();
                assertEquals(rexpected.getRouteTargetExtendedCommunity().getGlobalAdministrator(),
@@ -174,7 +175,7 @@ public class ComplementaryTest {
                        fail("Not expected exception: " + e1);
                }
                final RouteOriginExtendedCommunityCase oexpected = new RouteOriginExtendedCommunityCaseBuilder().setRouteOriginExtendedCommunity(
-                               new RouteOriginExtendedCommunityBuilder().setGlobalAdministrator(new AsNumber(24L)).setLocalAdministrator(
+                               new RouteOriginExtendedCommunityBuilder().setGlobalAdministrator(new ShortAsNumber(24L)).setLocalAdministrator(
                                                new byte[] { 4, 2, 8, 7 }).build()).build();
                final RouteOriginExtendedCommunityCase oresult = (RouteOriginExtendedCommunityCase) roc.getExtendedCommunity();
                assertEquals(oexpected.getRouteOriginExtendedCommunity().getGlobalAdministrator(),
index ed022094c08c2d49ab2886e4ae41057539e4b86c..7b9a4ab8587ab31fe19229cdb89e6322b82c47c9 100644 (file)
@@ -13,6 +13,7 @@ import static org.junit.Assert.assertEquals;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ShortAsNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.route.origin.extended.community._case.RouteOriginExtendedCommunity;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.route.origin.extended.community._case.RouteOriginExtendedCommunityBuilder;
 
@@ -22,14 +23,14 @@ public class RouteOriginCommunityTest {
 
        @Before
        public void init() {
-               final AsNumber globalAdmin = new AsNumber(65535L);
+               final ShortAsNumber globalAdmin = new ShortAsNumber(65535L);
                final byte[] localAdmin = new byte[] { 10, 0, 0, 1 };
                this.community = new RouteOriginExtendedCommunityBuilder().setGlobalAdministrator(globalAdmin).setLocalAdministrator(localAdmin).build();
        }
 
        @Test
        public void testGetGlobalAdmin() {
-               final AsNumber testAsn = new AsNumber(65535L);
+               final ShortAsNumber testAsn = new ShortAsNumber(65535L);
                assertEquals(this.community.getGlobalAdministrator(), testAsn);
        }
 
index 8e11081835811fae6a41ec6d05e9614c88962275..9c499b3280ec4e34b52647ebed5bec1909f0c34a 100644 (file)
@@ -13,6 +13,7 @@ import static org.junit.Assert.assertEquals;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ShortAsNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.route.target.extended.community._case.RouteTargetExtendedCommunity;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.route.target.extended.community._case.RouteTargetExtendedCommunityBuilder;
 
@@ -22,14 +23,14 @@ public class RouteTargetCommunityTest {
 
        @Before
        public void init() {
-               final AsNumber globalAdmin = new AsNumber(65535L);
+               final ShortAsNumber globalAdmin = new ShortAsNumber(65535L);
                final byte[] localAdmin = new byte[] { 10, 0, 0, 1 };
                this.community = new RouteTargetExtendedCommunityBuilder().setGlobalAdministrator(globalAdmin).setLocalAdministrator(localAdmin).build();
        }
 
        @Test
        public void testGetGlobalAdmin() {
-               final AsNumber testAsn = new AsNumber(65535L);
+               final ShortAsNumber testAsn = new ShortAsNumber(65535L);
                assertEquals(this.community.getGlobalAdministrator(), testAsn);
        }