Add uint24.yang 95/86695/4
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 4 Jan 2020 08:47:58 +0000 (09:47 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 4 Jan 2020 12:13:53 +0000 (13:13 +0100)
odl-bgp-evpn defines an explicit uint24 type, which is useful as
low as network-concepts. Separate this type into its own module
and reuse it everywhere we are dealing with a 24 bit unsigned types.

This flushes out unneeded tests in LlGracefulCapabilityHandlerTest,
where we are asserting that DTOs are validating the value -- which
is a given and tested in DTO codegen tests.

Change-Id: I423d1af64b0514aa2b0e2f0f0fca728c062ef89a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
20 files changed:
bgp/extensions/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/esi/types/EsiModelUtil.java
bgp/extensions/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/esi/types/MacParser.java
bgp/extensions/evpn/src/main/yang/odl-bgp-evpn.yang
bgp/extensions/evpn/src/test/java/org/opendaylight/protocol/bgp/evpn/impl/esi/types/MacParserTest.java
bgp/extensions/labeled-unicast/src/main/yang/bgp-labeled-unicast.yang
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/sr/SrNodeAttributesParser.java
bgp/extensions/linkstate/src/main/yang/bgp-linkstate.yang
bgp/extensions/linkstate/src/main/yang/bgp-segment-routing.yang
bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/SrAttributeParserTest.java
bgp/openconfig-api/pom.xml
bgp/openconfig-api/src/main/yang/bgp-ll-graceful-restart.yang
bgp/parser-api/src/main/yang/bgp-multiprotocol.yang
bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/LlGracefulCapabilityHandler.java
bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/LlGracefulCapabilityHandlerTest.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/GracefulRestartUtil.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/GracefulRestartUtilTest.java
concepts/src/main/yang/network-concepts.yang
concepts/src/main/yang/uint24.yang [new file with mode: 0644]
util/src/main/java/org/opendaylight/protocol/util/ByteBufUtils.java

index 3dae118bf3bc838d8e82d372de731e6d1dab297b..0ea01be04fcf868a35f7825a7b3b4932a90a6051 100644 (file)
@@ -11,10 +11,10 @@ import com.google.common.base.Preconditions;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.Uint24;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.arbitrary._case.Arbitrary;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.arbitrary._case.ArbitraryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.evpn.EvpnChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
index 7aa9adcd8e1c40ef46bf761e8e9f0560bc70340b..34bd30cf8c01936c700c37b5a2252eaeeb754dc4 100644 (file)
@@ -18,7 +18,6 @@ import org.opendaylight.protocol.util.ByteBufUtils;
 import org.opendaylight.protocol.util.ByteBufWriteUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.IetfYangUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.EsiType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.Uint24;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.Esi;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.MacAutoGeneratedCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.MacAutoGeneratedCaseBuilder;
@@ -59,7 +58,7 @@ final class MacParser extends AbstractEsiType {
                 .setMacAutoGenerated(new MacAutoGeneratedBuilder()
                     .setSystemMacAddress(IetfYangUtil.INSTANCE.macAddressFor(
                         ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH)))
-                    .setLocalDiscriminator(new Uint24(ByteBufUtils.readUint24(buffer)))
+                    .setLocalDiscriminator(ByteBufUtils.readUint24(buffer))
                     .build())
                 .build();
     }
index 6de6a7f70c7013288942635ab6abc63a87bda416..a50a50e4330d39c478862b6c8b2688d8d8be5a49 100644 (file)
@@ -13,6 +13,7 @@ module odl-bgp-evpn {
     import bgp-message { prefix bgp-msg; revision-date 2018-03-29; }
     import bgp-multiprotocol { prefix bgp-mp; revision-date 2018-03-29; }
     import pmsi-tunnel { prefix pmsi; revision-date 2018-03-29; }
+    import odl-uint24 { prefix uint24; }
 
     organization "Cisco Systems, Inc.";
 
@@ -99,14 +100,6 @@ module odl-bgp-evpn {
         }
     }
 
-    typedef uint24 {
-        type uint32 {
-            range "0 .. 16777215";
-        }
-        description
-            "24-bit unsigned integer.";
-    }
-
     grouping ethernet-tag-id {
         reference "https://tools.ietf.org/html/rfc7432#section-7.1";
         description "An Ethernet Tag ID is a 32-bit field containing either
@@ -190,7 +183,7 @@ module odl-bgp-evpn {
                         mandatory true;
                     }
                     leaf local-discriminator {
-                        type uint24;
+                        type uint24:uint24;
                         mandatory true;
                     }
                 }
index 68da2182e8836b11e040fe92fb3dde2a33b6e1b0..0aee39c69ef9102c99a63134611318bb86d8ce2c 100644 (file)
@@ -22,13 +22,13 @@ import io.netty.buffer.Unpooled;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.protocol.util.ByteArray;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.Uint24;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.Esi;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.ArbitraryCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.MacAutoGeneratedCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.MacAutoGeneratedCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.mac.auto.generated._case.MacAutoGenerated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.mac.auto.generated._case.MacAutoGeneratedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
index 06bb2fbc2938906a838f46c61cbcbafa5e782bfc..235b5e7e69d5d915cc9abbfe40b6b8e196b46e90 100644 (file)
@@ -10,6 +10,7 @@ module bgp-labeled-unicast {
     import bgp-types { prefix bgp-t; revision-date 2018-03-29; }
     import bmp-monitor { prefix bmp-mon; revision-date 2018-03-29; }
     import network-concepts { prefix netc; revision-date 2013-11-25; }
+    import odl-uint24 { prefix uint24; }
 
     organization "Cisco Systems, Inc.";
     contact "GE QU <gequ@cisco.com>"
@@ -45,9 +46,7 @@ module bgp-labeled-unicast {
     }
 
     typedef srgb {
-        type uint32 {
-            range "0..16777215";
-        }
+        type uint24:uint24;
     }
 
     grouping label {
index 4a8b7de58d9bdc4739bb5a9d30806a0f3691df74..33e9714d1df1fccfb81675a1aa008be8b5b13136 100644 (file)
@@ -64,7 +64,7 @@ public final class SrNodeAttributesParser {
         bs.set(SR_IPV6, caps.isSrIpv6());
         bs.toByteBuf(buffer);
         buffer.writeZero(RESERVERED);
-        buffer.writeMedium(caps.getRangeSize().intValue());
+        buffer.writeMedium(caps.getRangeSize().getValue().intValue());
         TlvUtil.writeTLV(SID_TYPE, SidLabelIndexParser.serializeSidValue(caps.getSidLabelIndex()), buffer);
     }
 
index a95ca7521ef33ea424d5e85ab9324a162a1fc208..44d2a205213a1d891e0e5bcaebd6813c3517f923 100644 (file)
@@ -13,6 +13,7 @@ module bgp-linkstate {
     import bgp-segment-routing { prefix bgp-sr; revision-date 2015-10-14; }
     import bgp-epe { prefix bgp-epe; revision-date 2015-06-22; }
     import bmp-monitor { prefix bmp-mon; revision-date 2018-03-29; }
+    import odl-uint24 { prefix uint24; }
 
     organization "Cisco Systems, Inc.";
     contact "Dana Kutenicsova <dkutenic@cisco.com>";
@@ -541,9 +542,7 @@ module bgp-linkstate {
             the maximum value 16,777,215 (16.777215 sec), then the delay is at
             least that value, and it may be larger.";
         reference "https://tools.ietf.org/html/rfc7471#section-4.1.5";
-        type uint32 {
-            range "0..16777215";
-        }
+        type uint24:uint24;
         units microseconds;
     }
 
@@ -555,9 +554,7 @@ module bgp-linkstate {
             Therefore, measured values that are larger than the field maximum
             SHOULD be encoded as the maximum value.";
         reference "https://tools.ietf.org/html/rfc7471#section-4.4.5";
-        type uint32 {
-            range "0..16777215";
-        }
+        type uint24:uint24;
         units percent;
     }
 
index e3819ffa9d3a3bb4211f19184578bedbe63717f1..9d226a14baf9744c8ca052eab168eb3d6912d29e 100644 (file)
@@ -5,6 +5,7 @@ module bgp-segment-routing {
 
     import network-concepts { prefix netc; revision-date 2013-11-25; }
     import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
+    import odl-uint24 { prefix uint24; }
 
     organization "Cisco Systems, Inc.";
     contact "Iveta Halanova <ihalanov@cisco.com>";
@@ -75,9 +76,7 @@ module bgp-segment-routing {
             type boolean;
         }
         leaf range-size {
-            type uint32 {
-                range "0..16777215";
-            }
+            type uint24:uint24;
         }
         uses sid-label-index;
     }
index 1b707bff0d59389bf085baa16d0fbeba2eef71a9..50866d74c72d16f7978dc24f6edbfd47704c35cb 100644 (file)
@@ -93,6 +93,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segm
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.IsoSystemIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.MplsLabel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.TeMetric;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint8;
@@ -180,11 +181,11 @@ public class SrAttributeParserTest {
         final SrCapabilities capsIsis = new SrCapabilitiesBuilder().setMplsIpv4(Boolean.TRUE).setMplsIpv6(Boolean.TRUE)
                 .setSrIpv6(Boolean.FALSE)
                 .setSidLabelIndex(new SidCaseBuilder().setSid(Uint32.valueOf(16909060L)).build())
-                .setRangeSize(Uint32.TEN).build();
+                .setRangeSize(new Uint24(Uint32.TEN)).build();
         final SrCapabilities capsOspf = new SrCapabilitiesBuilder().setMplsIpv4(Boolean.FALSE)
                 .setMplsIpv6(Boolean.FALSE).setSrIpv6(Boolean.FALSE)
                 .setSidLabelIndex(new SidCaseBuilder().setSid(Uint32.valueOf(16909060L)).build())
-                .setRangeSize(Uint32.TEN).build();
+                .setRangeSize(new Uint24(Uint32.TEN)).build();
         assertEquals(capsIsis,
             SrNodeAttributesParser.parseSrCapabilities(Unpooled.wrappedBuffer(bytesIsis), ProtocolId.IsisLevel1));
         assertEquals(capsOspf,
index eb36ce3f79ff2c9faebc7a13e2a1c30e8ec0eb47..5855fb894f27613b91664f3f2cc60fcf8936ae1e 100644 (file)
             <groupId>org.opendaylight.mdsal.model</groupId>
             <artifactId>yang-ext</artifactId>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>concepts</artifactId>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>bgp-concepts</artifactId>
index 4de99a367fcb949f8a7a538dde6777d74eaef9fc..c16d4890d36e9124ac0839eb4f706700fb65bec6 100644 (file)
@@ -6,6 +6,7 @@ module bgp-ll-graceful-restart {
     import openconfig-network-instance { prefix netinst; }
     import bgp-openconfig-extensions { prefix bgp-op-ext; }
     import openconfig-bgp-types { prefix bgp-types; }
+    import odl-uint24 { prefix uint24; }
 
     description
             "This module contains the extensions from
@@ -45,9 +46,7 @@ module bgp-ll-graceful-restart {
                         "Value of time in second which we keep routes of given af-safi after
                         graceful restart timer expired. If zero value afi-safi wil not be advertised
                         in long-lived graceful restart capability";
-                    type uint32 {
-                        range 0..16777215;
-                    }
+                    type uint24:uint24;
                     units seconds;
                     default 0;
                 }
index 2a08d5926bcee3ad2ad5377381538e0ed64ff0c6..7cbbcb356c21b723afcb75b488d92eccf47bbaf6 100644 (file)
@@ -6,6 +6,7 @@ module bgp-multiprotocol {
     import bgp-message { prefix bgp-msg; revision-date 2018-03-29; }
     import bgp-types { prefix bgp-t; revision-date 2018-03-29; }
     import yang-ext { prefix ext; revision-date 2013-07-09; }
+    import odl-uint24 { prefix uint24; }
 
     organization "Cisco Systems, Inc.";
     contact "Dana Kutenicsova <dkutenic@cisco.com>";
@@ -132,9 +133,7 @@ module bgp-multiprotocol {
                     mandatory true;
                 }
                 leaf long-lived-stale-time {
-                    type uint32 {
-                        range 0..16777215;
-                    }
+                    type uint24:uint24;
                     units seconds;
                     default 0;
                 }
index 11a991afe49b371c10dfdfad6133fff1daac7be6..0aab83aca2586f13db634b41c80ddcbdfe7e2476 100644 (file)
@@ -29,6 +29,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.rev180329.mp.capabilities.ll.graceful.restart.capability.TablesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.SubsequentAddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -85,7 +86,7 @@ public final class LlGracefulCapabilityHandler implements CapabilityParser, Capa
                     .setAfi(afi)
                     .setSafi(safi)
                     .setAfiFlags(new Tables.AfiFlags(Boolean.valueOf(afiFlags == AFI_FLAG_FORWARDING_STATE)))
-                    .setLongLivedStaleTime(Uint32.valueOf(staleTime))
+                    .setLongLivedStaleTime(new Uint24(Uint32.valueOf(staleTime)))
                     .build();
             tables.add(table);
         }
@@ -130,8 +131,8 @@ public final class LlGracefulCapabilityHandler implements CapabilityParser, Capa
             } else {
                 buffer.writeZero(1);
             }
-            final Uint32 staleTime = table.getLongLivedStaleTime();
-            final int timeval = staleTime != null ? staleTime.intValue() : 0;
+            final Uint24 staleTime = table.getLongLivedStaleTime();
+            final int timeval = staleTime != null ? staleTime.getValue().intValue() : 0;
             checkArgument(timeval >= 0 && timeval <= MAX_STALE_TIME, "Restart time is %s", staleTime);
             buffer.writeMedium(timeval);
         }
index 85d83cd1d256adc636166e0548b342bec26714dd..2b2b2ae3ffd10e62fa9ce5b42aa6ba5fdc86aa32 100644 (file)
@@ -31,9 +31,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv6AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.SubsequentAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.UnicastSubsequentAddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
 public class LlGracefulCapabilityHandlerTest {
+    private static final Uint24 TEN = new Uint24(Uint32.TEN);
 
     private LlGracefulCapabilityHandler handler;
 
@@ -63,13 +65,13 @@ public class LlGracefulCapabilityHandlerTest {
                                 .setAfi(Ipv4AddressFamily.class)
                                 .setSafi(UnicastSubsequentAddressFamily.class)
                                 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
-                                .setLongLivedStaleTime(Uint32.TEN)
+                                .setLongLivedStaleTime(TEN)
                                 .build(),
                         new TablesBuilder()
                                 .setAfi(Ipv6AddressFamily.class)
                                 .setSafi(UnicastSubsequentAddressFamily.class)
                                 .setAfiFlags(new Tables.AfiFlags(Boolean.TRUE))
-                                .setLongLivedStaleTime(Uint32.valueOf(160))
+                                .setLongLivedStaleTime(new Uint24(Uint32.valueOf(160)))
                                 .build())
                 ).build();
 
@@ -90,7 +92,7 @@ public class LlGracefulCapabilityHandlerTest {
                                 .setAfi(AddressFamily.class)
                                 .setSafi(UnicastSubsequentAddressFamily.class)
                                 .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
-                                .setLongLivedStaleTime(Uint32.TEN)
+                                .setLongLivedStaleTime(TEN)
                                 .build())).build();
 
         final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
@@ -106,41 +108,7 @@ public class LlGracefulCapabilityHandlerTest {
                         .setAfi(Ipv4AddressFamily.class)
                         .setSafi(SubsequentAddressFamily.class)
                         .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
-                        .setLongLivedStaleTime(Uint32.TEN)
-                        .build())).build();
-
-        final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
-                new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
-        final ByteBuf buffer = Unpooled.buffer();
-        this.handler.serializeCapability(cParameters, buffer);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testMinStaleTime() {
-        final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
-                .setTables(Arrays.asList(new TablesBuilder()
-                                .setAfi(Ipv4AddressFamily.class)
-                                .setSafi(UnicastSubsequentAddressFamily.class)
-                                .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
-                                // FIXME: this is throwing IAE, why is the rest of the test even here?
-                                .setLongLivedStaleTime(Uint32.MAX_VALUE)
-                                .build())).build();
-
-        final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
-                new CParameters1Builder().setLlGracefulRestartCapability(capability).build()).build();
-        final ByteBuf buffer = Unpooled.buffer();
-        this.handler.serializeCapability(cParameters, buffer);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testMaxStaleTime() {
-
-        final LlGracefulRestartCapability capability = new LlGracefulRestartCapabilityBuilder()
-                .setTables(Arrays.asList(new TablesBuilder()
-                        .setAfi(Ipv4AddressFamily.class)
-                        .setSafi(UnicastSubsequentAddressFamily.class)
-                        .setAfiFlags(new Tables.AfiFlags(Boolean.FALSE))
-                        .setLongLivedStaleTime(Uint32.valueOf(16777216L))
+                        .setLongLivedStaleTime(TEN)
                         .build())).build();
 
         final CParameters cParameters = new CParametersBuilder().addAugmentation(CParameters1.class,
index a6f2142f85aa62ab04f800f18a2c6af7eb719ba4..2993e3fa48ad87f23112fc384ace003a03890824 100644 (file)
@@ -434,7 +434,7 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener {
             for (org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp
                     .capabilities.ll.graceful.restart.capability.Tables table : advertisedLLTables) {
                 llTablesReceived.put(new TablesKey(table.getAfi(), table.getSafi()),
-                    table.getLongLivedStaleTime().intValue());
+                    table.getLongLivedStaleTime().getValue().intValue());
             }
         } else {
             llTablesReceived = Collections.emptyMap();
index 6cca2b2ae7edd7bb4805f8b5311b11aa9df39d4f..7a33b2e3f76f4f06ee18962a1eae4f50b156ac8b 100644 (file)
@@ -41,6 +41,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.rev180329.mp.capabilities.ll.graceful.restart.capability.Tables.AfiFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.TablesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -77,7 +78,7 @@ public final class GracefulRestartUtil {
                         .setAfi(dto.getTableKey().getAfi())
                         .setSafi(dto.getTableKey().getSafi())
                         .setAfiFlags(new AfiFlags(dto.isForwarding()))
-                        .setLongLivedStaleTime(Uint32.valueOf(dto.getStaleTime()))
+                        .setLongLivedStaleTime(new Uint24(Uint32.valueOf(dto.getStaleTime())))
                         .build())
                 .collect(Collectors.toList());
         return new CParametersBuilder().addAugmentation(CParameters1.class,
@@ -132,11 +133,11 @@ public final class GracefulRestartUtil {
                                 .rev181112.afi.safi.ll.graceful.restart.ll.graceful.restart.Config config =
                                 llGracefulRestart.getConfig();
                         if (config != null) {
-                            final Uint32 staleTime = config.getLongLivedStaleTime();
-                            if (staleTime != null && staleTime.toJava() > 0) {
+                            final Uint24 staleTime = config.getLongLivedStaleTime();
+                            if (staleTime != null && staleTime.getValue().toJava() > 0) {
                                 final Optional<TablesKey> key = tableTypeRegistry.getTableKey(afiSafi.getAfiSafiName());
                                 if (key.isPresent()) {
-                                    timers.put(key.get(), staleTime.intValue());
+                                    timers.put(key.get(), staleTime.getValue().intValue());
                                 } else {
                                     LOG.debug("Skipping unsupported afi-safi {}",afiSafi.getAfiSafiName());
                                 }
index 008f84176774c26fd86ccafbef75099311a30b6c..50f940d167c74bffda18237d84ecac7784bde1da 100644 (file)
@@ -51,6 +51,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv4AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv6AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.UnicastSubsequentAddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
 public class GracefulRestartUtilTest {
@@ -175,7 +176,7 @@ public class GracefulRestartUtilTest {
                 .capabilities.ll.graceful.restart.capability.Tables> tables = llGracefulCapability.getTables();
         assertNotNull(tables);
         assertEquals(2, tables.size());
-        assertEquals(STALE_TIME, tables.get(0).getLongLivedStaleTime().intValue());
+        assertEquals(STALE_TIME, tables.get(0).getLongLivedStaleTime().getValue().intValue());
         tables.forEach(table -> {
             assertTrue(isSameKey(IPV4_KEY, table.key()) && table.getAfiFlags().isForwardingState()
                 || isSameKey(IPV6_KEY, table.key()) && !table.getAfiFlags().isForwardingState());
@@ -193,7 +194,7 @@ public class GracefulRestartUtilTest {
                         .setLlGracefulRestart(new LlGracefulRestartBuilder()
                             .setConfig(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.ll
                                 .graceful.restart.rev181112.afi.safi.ll.graceful.restart.ll.graceful.restart
-                                .ConfigBuilder().setLongLivedStaleTime(Uint32.valueOf(STALE_TIME)).build())
+                                .ConfigBuilder().setLongLivedStaleTime(new Uint24(Uint32.valueOf(STALE_TIME))).build())
                             .build())
                         .build())
                     .build())
index a4e6f28c586d4d1d710288f15011e13fe0d20554..21c59877dab71bc7989a3e73f030b40f45c68442 100644 (file)
@@ -4,6 +4,7 @@ module network-concepts {
     prefix "netc";
 
     import ieee754 { prefix ieee754; revision-date 2013-08-19; }
+    import odl-uint24 { prefix uint24; }
 
     organization "Cisco Systems, Inc.";
     contact "Dana Kutenicsova <dkutenic@cisco.com>";
@@ -38,9 +39,7 @@ module network-concepts {
 
     typedef igp-metric {
         reference "http://tools.ietf.org/html/draft-ietf-idr-ls-distribution-03#section-3.3.2.3";
-        type uint32 {
-            range "0..16777215";
-        }
+        type uint24:uint24;
     }
 
     typedef te-metric {
diff --git a/concepts/src/main/yang/uint24.yang b/concepts/src/main/yang/uint24.yang
new file mode 100644 (file)
index 0000000..24cf836
--- /dev/null
@@ -0,0 +1,30 @@
+module odl-uint24 {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:uint24";
+    prefix "uint24";
+
+    organization "OpenDaylight";
+    contact "Robert Varga <robert.varga@pantheon.tech>";
+
+    description
+        "This module contains the definition of uint24, an uint32 restricted
+         to 24 bits.
+
+         Copyright (c)2019 PANTHEON.tech, s.r.o 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";
+
+    revision "2020-01-04" {
+        description "Initial revision.";
+    }
+
+    typedef uint24 {
+        type uint32 {
+            range "0..16777215";
+        }
+        description "24-bit unsigned integer.";
+    }
+}
index 8b6dbcf4136e4316263b89e6170ecac3122e5438..915b53f24755e514d27f493ef875164e1d360c0d 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.protocol.util;
 import io.netty.buffer.ByteBuf;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint64;
@@ -32,9 +33,8 @@ public final class ByteBufUtils {
         return Uint16.fromShortBits(buf.readShort());
     }
 
-    // TODO: this probably wants a dedicated concept
-    public static @NonNull Uint32 readUint24(final ByteBuf buf) {
-        return Uint32.fromIntBits(buf.readMedium());
+    public static @NonNull Uint24 readUint24(final ByteBuf buf) {
+        return new Uint24(Uint32.fromIntBits(buf.readMedium()));
     }
 
     public static @NonNull Uint32 readUint32(final ByteBuf buf) {