Bug-1809: Fix GracefulCapabilityHandler. 39/11039/1
authorMilos Fabian <milfabia@cisco.com>
Thu, 11 Sep 2014 11:56:34 +0000 (13:56 +0200)
committerMilos Fabian <milfabia@cisco.com>
Thu, 11 Sep 2014 12:01:45 +0000 (14:01 +0200)
Change-Id: I2ce874d2558595db0ec0e09b530b703b8d59c13d
Signed-off-by: Milos Fabian <milfabia@cisco.com>
bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/GracefulCapabilityHandler.java

index 1c4ab7224825008e4c8aab8303abddfb30f0896d..8a5f045d3c40be9fa5d2980887fa28809869297d 100644 (file)
@@ -99,8 +99,10 @@ public final class GracefulCapabilityHandler implements CapabilityParser, Capabi
             bytes.writeByte(afival / 256);
             bytes.writeByte(afival % 256);
             bytes.writeByte(safival);
-            if (t.getAfiFlags().isForwardingState()) {
+            if (t.getAfiFlags() != null && t.getAfiFlags().isForwardingState()) {
                 bytes.writeByte(AFI_FLAG_FORWARDING_STATE);
+            } else {
+                bytes.writeZero(1);
             }
         }
         CapabilityUtil.formatCapability(CODE, bytes,byteAggregator);
@@ -122,17 +124,20 @@ public final class GracefulCapabilityHandler implements CapabilityParser, Capabi
             final Class<? extends AddressFamily> afi = this.afiReg.classForFamily(afiVal);
             if (afi == null) {
                 LOG.debug("Ignoring GR capability for unknown address family {}", afiVal);
+                buffer.skipBytes(PER_AFI_SAFI_SIZE - 2);
                 continue;
             }
             final int safiVal = UnsignedBytes.toInt(buffer.readByte());
             final Class<? extends SubsequentAddressFamily> safi = this.safiReg.classForFamily(safiVal);
             if (safi == null) {
                 LOG.debug("Ignoring GR capability for unknown subsequent address family {}", safiVal);
+                buffer.skipBytes(1);
                 continue;
             }
             final int flags = UnsignedBytes.toInt(buffer.readByte());
             tables.add(new TablesBuilder().setAfi(afi).setSafi(safi).setAfiFlags(new AfiFlags((flags & AFI_FLAG_FORWARDING_STATE) != 0)).build());
         }
+        cb.setTables(tables);
         return new GracefulRestartCaseBuilder().setGracefulRestartCapability(cb.build()).build();
     }
 }