Bump upstreams to 2022.09
[bgpcep.git] / bgp / parser-impl / src / main / java / org / opendaylight / protocol / bgp / parser / impl / message / open / LlGracefulCapabilityHandler.java
index fb32858b744c850557b6cbf1ec4f03ec9a2789d1..0f230c74d268fe8d57da60e56b13d814d21fba26 100644 (file)
@@ -12,23 +12,26 @@ import static java.util.Objects.requireNonNull;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Map;
 import org.opendaylight.protocol.bgp.parser.spi.AddressFamilyRegistry;
 import org.opendaylight.protocol.bgp.parser.spi.CapabilityParser;
 import org.opendaylight.protocol.bgp.parser.spi.CapabilitySerializer;
 import org.opendaylight.protocol.bgp.parser.spi.CapabilityUtil;
 import org.opendaylight.protocol.bgp.parser.spi.SubsequentAddressFamilyRegistry;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.optional.capabilities.CParameters;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.types.rev171204.Uint24;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParameters;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.LlGracefulRestartCapability;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.LlGracefulRestartCapabilityBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.Tables;
 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.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.TablesKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
+import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,11 +62,11 @@ public final class LlGracefulCapabilityHandler implements CapabilityParser, Capa
 
     @Override
     public CParameters parseCapability(final ByteBuf buffer) {
-        final List<Tables> tables = new ArrayList<>();
+        final BindingMap.Builder<TablesKey, Tables> tables = BindingMap.builder();
 
         while (buffer.isReadable()) {
             final short afival = buffer.readShort();
-            final Class<? extends AddressFamily> afi = this.afiReg.classForFamily(afival);
+            final AddressFamily afi = this.afiReg.classForFamily(afival);
             if (afi == null) {
                 LOG.debug("Ignoring GR capability for unknown address family {}", afival);
                 buffer.skipBytes(PER_TABLE_SIZE - 2);
@@ -71,10 +74,10 @@ public final class LlGracefulCapabilityHandler implements CapabilityParser, Capa
             }
 
             final byte safival = buffer.readByte();
-            final Class<? extends SubsequentAddressFamily> safi = this.safiReg.classForFamily(safival);
+            final SubsequentAddressFamily safi = this.safiReg.classForFamily(safival);
             if (safi == null) {
                 LOG.debug("Ignoring GR capability for unknown subsequent address family {}", safival);
-                buffer.skipBytes(1);
+                buffer.skipBytes(PER_TABLE_SIZE - 3);
                 continue;
             }
 
@@ -83,17 +86,17 @@ public final class LlGracefulCapabilityHandler implements CapabilityParser, Capa
             final Tables table = new TablesBuilder()
                     .setAfi(afi)
                     .setSafi(safi)
-                    .setAfiFlags(new Tables.AfiFlags(Boolean.valueOf(afiFlags == AFI_FLAG_FORWARDING_STATE)))
-                    .setLongLiveStaleTime(Long.valueOf(staleTime))
+                    .setAfiFlags(new Tables.AfiFlags(afiFlags == AFI_FLAG_FORWARDING_STATE))
+                    .setLongLivedStaleTime(new Uint24(Uint32.valueOf(staleTime)))
                     .build();
             tables.add(table);
         }
         return new CParametersBuilder()
-                .addAugmentation(CParameters1.class, new CParameters1Builder()
-                        .setLlGracefulRestartCapability(new LlGracefulRestartCapabilityBuilder()
-                                .setTables(tables)
-                                .build())
+                .addAugmentation(new CParameters1Builder()
+                    .setLlGracefulRestartCapability(new LlGracefulRestartCapabilityBuilder()
+                        .setTables(tables.build())
                         .build())
+                    .build())
                 .build();
     }
 
@@ -109,28 +112,28 @@ public final class LlGracefulCapabilityHandler implements CapabilityParser, Capa
     }
 
     private ByteBuf serializeCapability(final LlGracefulRestartCapability cap) {
-        final List<Tables> tables = cap.getTables();
+        final Map<TablesKey, Tables> tables = cap.getTables();
         if (tables == null || tables.isEmpty()) {
             return Unpooled.EMPTY_BUFFER;
         }
 
         final ByteBuf buffer = Unpooled.buffer(PER_TABLE_SIZE * tables.size());
-        for (Tables table : tables) {
-            final Class<? extends AddressFamily> afi = table.getAfi();
-            final Class<? extends SubsequentAddressFamily> safi = table.getSafi();
+        for (Tables table : tables.values()) {
+            final AddressFamily afi = table.getAfi();
             final Integer afival = this.afiReg.numberForClass(afi);
             checkArgument(afival != null, "Unhandled address family %s", afi);
             buffer.writeShort(afival);
+            final SubsequentAddressFamily safi = table.getSafi();
             final Integer safival = this.safiReg.numberForClass(safi);
             checkArgument(safival != null, "Unhandled subsequent address family %s", safi);
             buffer.writeByte(safival);
-            if (table.getAfiFlags() != null && table.getAfiFlags().isForwardingState()) {
+            if (table.getAfiFlags() != null && table.getAfiFlags().getForwardingState()) {
                 buffer.writeByte(AFI_FLAG_FORWARDING_STATE);
             } else {
-                buffer.writeZero(1);
+                buffer.writeByte(0);
             }
-            final Long staleTime = table.getLongLiveStaleTime();
-            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);
         }