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;
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;
.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();
}
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.";
}
}
- 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
mandatory true;
}
leaf local-discriminator {
- type uint24;
+ type uint24:uint24;
mandatory true;
}
}
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;
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>"
}
typedef srgb {
- type uint32 {
- range "0..16777215";
- }
+ type uint24:uint24;
}
grouping label {
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);
}
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>";
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;
}
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;
}
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>";
type boolean;
}
leaf range-size {
- type uint32 {
- range "0..16777215";
- }
+ type uint24:uint24;
}
uses sid-label-index;
}
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;
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,
<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>
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
"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;
}
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>";
mandatory true;
}
leaf long-lived-stale-time {
- type uint32 {
- range 0..16777215;
- }
+ type uint24:uint24;
units seconds;
default 0;
}
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;
.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);
}
} 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);
}
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;
.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();
.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,
.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,
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();
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;
.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,
.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());
}
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 {
.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());
.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())
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>";
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 {
--- /dev/null
+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.";
+ }
+}
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;
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) {