ADD-PATH capability bug fix 54/34154/2
authorIveta Halanova <ihalanov@cisco.com>
Fri, 5 Feb 2016 13:38:11 +0000 (14:38 +0100)
committerIveta Halanova <ihalanov@cisco.com>
Fri, 5 Feb 2016 13:47:23 +0000 (13:47 +0000)
Created typedef for send-receive enumeration.
Empty add path capability is not serialized.

Change-Id: I6d57918118237118e693c2eb348c32062d99d2d3
Signed-off-by: Iveta Halanova <ihalanov@cisco.com>
bgp/parser-api/src/main/yang/bgp-multiprotocol.yang
bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/AddPathCapabilityHandler.java
bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/AddPathCapabilityHandlerTest.java

index ff816f35161d4166071ea2b50fc93febc2b0c83e..c3eacbd5b9d69e830d7be5d1be8e6caa746c6f78 100644 (file)
@@ -34,6 +34,14 @@ module bgp-multiprotocol {
         reference "RFC4760";
     }
 
+    typedef send-receive {
+        type enumeration {
+            enum receive { value 1; }
+            enum send { value 2; }
+            enum both { value 3; }
+        }
+    }
+
     grouping bgp-table-type {
         leaf afi {
             type identityref {
@@ -97,11 +105,7 @@ module bgp-multiprotocol {
             list address-families {
                 uses bgp-table-type;
                 leaf send-receive {
-                    type enumeration {
-                        enum receive { value 1; }
-                        enum send { value 2; }
-                        enum both { value 3; }
-                    }
+                    type send-receive;
                 }
             }
         }
index f1c44adfcb2105c015eb8433d730117b0493d43f..170fb7587fd8e53e19185ae39f973605fb1e8acb 100644 (file)
@@ -23,10 +23,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.CParameters1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.CParameters1Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.SendReceive;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.AddPathCapability;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.AddPathCapabilityBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.add.path.capability.AddressFamilies;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.add.path.capability.AddressFamilies.SendReceive;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.add.path.capability.AddressFamiliesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.SubsequentAddressFamily;
@@ -53,24 +53,26 @@ public class AddPathCapabilityHandler implements CapabilityParser, CapabilitySer
         final AddPathCapability addPathCap = capability.getAugmentation(CParameters1.class).getAddPathCapability();
 
         final List<AddressFamilies> families = addPathCap.getAddressFamilies();
-        final ByteBuf capBuffer = Unpooled.buffer(families.size() * TRIPLET_BYTE_SIZE);
-        for (final AddressFamilies addressFamily : families) {
-            final Class<? extends AddressFamily> afi = addressFamily.getAfi();
-            final Integer afival = this.afiReg.numberForClass(afi);
-            Preconditions.checkArgument(afival != null, "Unhandled address family " + afi);
-            capBuffer.writeShort(afival);
+        if (families != null) {
+            final ByteBuf capBuffer = Unpooled.buffer(families.size() * TRIPLET_BYTE_SIZE);
+            for (final AddressFamilies addressFamily : families) {
+                final Class<? extends AddressFamily> afi = addressFamily.getAfi();
+                final Integer afival = this.afiReg.numberForClass(afi);
+                Preconditions.checkArgument(afival != null, "Unhandled address family " + afi);
+                capBuffer.writeShort(afival);
 
-            final Class<? extends SubsequentAddressFamily> safi = addressFamily.getSafi();
-            final Integer safival = this.safiReg.numberForClass(safi);
-            Preconditions.checkArgument(safival != null, "Unhandled subsequent address family " + safi);
-            capBuffer.writeByte(safival);
+                final Class<? extends SubsequentAddressFamily> safi = addressFamily.getSafi();
+                final Integer safival = this.safiReg.numberForClass(safi);
+                Preconditions.checkArgument(safival != null, "Unhandled subsequent address family " + safi);
+                capBuffer.writeByte(safival);
 
-            final SendReceive sendReceive = addressFamily.getSendReceive();
-            Preconditions.checkArgument(sendReceive != null, "Unhandled Send/Receive value");
-            capBuffer.writeByte(sendReceive.getIntValue());
-        }
+                final SendReceive sendReceive = addressFamily.getSendReceive();
+                Preconditions.checkArgument(sendReceive != null, "Unhandled Send/Receive value");
+                capBuffer.writeByte(sendReceive.getIntValue());
+            }
 
-        CapabilityUtil.formatCapability(CODE, capBuffer, byteAggregator);
+            CapabilityUtil.formatCapability(CODE, capBuffer, byteAggregator);
+        }
     }
 
     @Override
index 71993b42b843cb562efd0e5c89d60038fd92e358..da5bdcc9500e5bb1012888f38268596a56159eb7 100644 (file)
@@ -27,9 +27,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.CParameters1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.CParameters1Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.SendReceive;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.AddPathCapabilityBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.add.path.capability.AddressFamilies;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.add.path.capability.AddressFamilies.SendReceive;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.add.path.capability.AddressFamiliesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv6AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;