From d330e2868ce25b2b6cd00163c5b2b5d202afccd3 Mon Sep 17 00:00:00 2001 From: "Claudio D. Gasparini" Date: Wed, 6 May 2015 14:42:07 +0200 Subject: [PATCH] Bug 3117 - Capability Parameter Parse Issue Change-Id: Iaa4e142b3387dc89778aba80fe8af34d72338bb7 Signed-off-by: Claudio D. Gasparini --- .../protocol/bgp/linkstate/ParserTest.java | 11 ++- .../protocol/bgp/parser/AsNumberUtil.java | 11 +-- bgp/parser-api/src/main/yang/bgp-message.yang | 12 ++- .../src/main/yang/bgp-multiprotocol.yang | 54 ++++++------- .../protocol/bgp/parser/APITest.java | 16 ++-- .../bgp/parser/impl/BGPActivator.java | 12 +-- .../message/open/As4CapabilityHandler.java | 23 +++--- .../open/GracefulCapabilityHandler.java | 41 +++++----- .../open/MultiProtocolCapabilityHandler.java | 27 ++++--- .../bgp/parser/impl/ComplementaryTest.java | 42 +++++----- .../impl/GracefulCapabilityHandlerTest.java | 79 +++++++++++-------- .../protocol/bgp/parser/impl/OpenTest.java | 54 ++++++++----- .../parser/mock/BGPMessageParserMockTest.java | 26 +++--- .../spi/BGPExtensionProviderContext.java | 3 +- .../SimpleBGPExtensionProviderContext.java | 3 +- .../spi/pojo/SimpleCapabilityRegistry.java | 10 +-- .../parser/spi/pojo/SimpleRegistryTest.java | 6 -- .../yang/bgp/rib/impl/BGPPeerModule.java | 26 +++--- .../rib/impl/BGPClientSessionValidator.java | 18 +++-- .../protocol/bgp/rib/impl/BGPSessionImpl.java | 19 +++-- .../bgp/rib/impl/BGPSessionProposalImpl.java | 31 ++++---- .../bgp/rib/impl/BGPSessionStats.java | 40 ++++------ .../bgp/rib/impl/BGPDispatcherImplTest.java | 18 ++--- .../bgp/rib/impl/BGPSessionImplTest.java | 32 ++++---- .../protocol/bgp/rib/impl/FSMTest.java | 44 ++++++----- .../protocol/bgp/rib/impl/PeerTest.java | 15 ++-- .../bgp/rib/mock/EventBusRegistration.java | 12 ++- 27 files changed, 366 insertions(+), 319 deletions(-) diff --git a/bgp/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/ParserTest.java b/bgp/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/ParserTest.java index 82f67d396a..215153a156 100644 --- a/bgp/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/ParserTest.java +++ b/bgp/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/ParserTest.java @@ -76,7 +76,8 @@ 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.rev130919.Attributes1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.Attributes2; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCase; +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.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapability; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlri; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlriBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.mp.reach.nlri.AdvertizedRoutesBuilder; @@ -637,9 +638,11 @@ public class ParserTest { final Set types = Sets.newHashSet(); for (final BgpParameters param : open.getBgpParameters()) { for (final OptionalCapabilities optCapa : param.getOptionalCapabilities()) { - final CParameters p = optCapa.getCParameters(); - if (p instanceof MultiprotocolCase) { - final BgpTableType type = new BgpTableTypeImpl(((MultiprotocolCase) p).getMultiprotocolCapability().getAfi(), ((MultiprotocolCase) p).getMultiprotocolCapability().getSafi()); + final CParameters cParam = optCapa.getCParameters(); + if(cParam != null && cParam.getAugmentation(CParameters1.class) != null && cParam.getAugmentation + (CParameters1.class).getMultiprotocolCapability() != null) { + final MultiprotocolCapability mp = cParam.getAugmentation(CParameters1.class).getMultiprotocolCapability(); + final BgpTableType type = new BgpTableTypeImpl(mp.getAfi(), mp.getSafi()); types.add(type); } } diff --git a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java index f1be584b74..b11ede36d9 100644 --- a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java +++ b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java @@ -12,9 +12,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.Open; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapability; public final class AsNumberUtil { @@ -34,12 +31,8 @@ public final class AsNumberUtil { if (params != null) { for (final BgpParameters p : params) { for (final OptionalCapabilities oc : p.getOptionalCapabilities()) { - final CParameters cp = oc.getCParameters(); - if (cp instanceof As4BytesCase) { - final As4BytesCapability capa = ((As4BytesCase) cp).getAs4BytesCapability(); - if (capa != null) { - return capa.getAsNumber(); - } + if (oc.getCParameters() != null && oc.getCParameters().getAs4BytesCapability() != null) { + return oc.getCParameters().getAs4BytesCapability().getAsNumber(); } } } diff --git a/bgp/parser-api/src/main/yang/bgp-message.yang b/bgp/parser-api/src/main/yang/bgp-message.yang index a1f51de81f..7856f4248b 100644 --- a/bgp/parser-api/src/main/yang/bgp-message.yang +++ b/bgp/parser-api/src/main/yang/bgp-message.yang @@ -72,13 +72,11 @@ module bgp-message { list bgp-parameters { list optional-capabilities { reference "http://tools.ietf.org/html/rfc5492#section-4"; - choice c-parameters { - case as4-bytes-case { - container as4-bytes-capability { - reference "http://tools.ietf.org/html/rfc6793"; - leaf as-number { - type inet:as-number; - } + container c-parameters { + container as4-bytes-capability { + reference "http://tools.ietf.org/html/rfc6793"; + leaf as-number { + type inet:as-number; } } } diff --git a/bgp/parser-api/src/main/yang/bgp-multiprotocol.yang b/bgp/parser-api/src/main/yang/bgp-multiprotocol.yang index 920d87159e..c4673f1553 100644 --- a/bgp/parser-api/src/main/yang/bgp-multiprotocol.yang +++ b/bgp/parser-api/src/main/yang/bgp-multiprotocol.yang @@ -53,45 +53,41 @@ module bgp-multiprotocol { } augment "/bgp-msg:open/bgp-msg:bgp-parameters/bgp-msg:optional-capabilities/bgp-msg:c-parameters" { - case multiprotocol-case { - container multiprotocol-capability { - reference "http://tools.ietf.org/html/rfc4760#section-8"; - uses bgp-table-type; - } + container multiprotocol-capability { + reference "http://tools.ietf.org/html/rfc4760#section-8"; + uses bgp-table-type; } - case graceful-restart-case { - container graceful-restart-capability { - reference "http://tools.ietf.org/html/rfc4724#section-3"; + container graceful-restart-capability { + reference "http://tools.ietf.org/html/rfc4724#section-3"; - leaf restart-flags { - type bits { - bit restart-state { - position 0; + leaf restart-flags { + type bits { + bit restart-state { + position 0; } } - mandatory true; - } + mandatory true; + } - leaf restart-time { - type uint16 { - range 0..4095; - } - units seconds; - mandatory true; + leaf restart-time { + type uint16 { + range 0..4095; } + units seconds; + mandatory true; + } - list tables { - uses bgp-table-type; - key "afi safi"; + list tables { + uses bgp-table-type; + key "afi safi"; - leaf afi-flags { - type bits { - bit forwarding-state { - position 0; - } + leaf afi-flags { + type bits { + bit forwarding-state { + position 0; } - mandatory true; } + mandatory true; } } } diff --git a/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java b/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java index be70dae7ed..3a1e9d7044 100644 --- a/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java +++ b/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java @@ -22,9 +22,11 @@ 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.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; +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.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapabilityBuilder; public class APITest { @@ -57,8 +59,12 @@ public class APITest { public void testAsNumberUtil() { final List params = new ArrayList<>(); final List capas = new ArrayList<>(); - capas.add(new OptionalCapabilitiesBuilder().setCParameters(new MultiprotocolCaseBuilder().setMultiprotocolCapability(null).build()).build()); - capas.add(new OptionalCapabilitiesBuilder().setCParameters(new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber(35L)).build()).build()).build()); + capas.add(new OptionalCapabilitiesBuilder().setCParameters( new CParametersBuilder().addAugmentation( + CParameters1.class, new CParameters1Builder().setMultiprotocolCapability( new MultiprotocolCapabilityBuilder() + .build()).build()).build()).build()); + capas.add(new OptionalCapabilitiesBuilder().setCParameters( + new CParametersBuilder().setAs4BytesCapability( new As4BytesCapabilityBuilder().setAsNumber( + new AsNumber(35L)).build()).build()).build()); params.add(new BgpParametersBuilder().setOptionalCapabilities(capas).build()); final Open open1 = new OpenBuilder().setBgpParameters(params).build(); assertEquals(35L, AsNumberUtil.advertizedAsNumber(open1).getValue().longValue()); diff --git a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/BGPActivator.java b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/BGPActivator.java index 17a49d1204..5ed41bced2 100644 --- a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/BGPActivator.java +++ b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/BGPActivator.java @@ -47,7 +47,7 @@ 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; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.Update; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapability; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.Aggregator; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.Aigp; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.AsPath; @@ -60,8 +60,8 @@ 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.path.attributes.attributes.Origin; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.OriginatorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.WithdrawnRoutes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapability; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlri; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpUnreachNlri; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.mp.reach.nlri.AdvertizedRoutes; @@ -107,14 +107,14 @@ public final class BGPActivator extends AbstractBGPExtensionProviderActivator { final MultiProtocolCapabilityHandler multi = new MultiProtocolCapabilityHandler(afiReg, safiReg); regs.add(context.registerCapabilityParser(MultiProtocolCapabilityHandler.CODE, multi)); - regs.add(context.registerCapabilitySerializer(MultiprotocolCase.class, multi)); + regs.add(context.registerCapabilitySerializer(MultiprotocolCapability.class, multi)); final As4CapabilityHandler as4 = new As4CapabilityHandler(); regs.add(context.registerCapabilityParser(As4CapabilityHandler.CODE, as4)); - regs.add(context.registerCapabilitySerializer(As4BytesCase.class, as4)); + regs.add(context.registerCapabilitySerializer(As4BytesCapability.class, as4)); final GracefulCapabilityHandler grace = new GracefulCapabilityHandler(afiReg, safiReg); - regs.add(context.registerCapabilitySerializer(GracefulRestartCase.class, grace)); + regs.add(context.registerCapabilitySerializer(GracefulRestartCapability.class, grace)); regs.add(context.registerCapabilityParser(GracefulCapabilityHandler.CODE, grace)); final CapabilityParameterParser cpp = new CapabilityParameterParser(context.getCapabilityRegistry()); diff --git a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/As4CapabilityHandler.java b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/As4CapabilityHandler.java index da1fc3bd4c..9ed39d24e4 100644 --- a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/As4CapabilityHandler.java +++ b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/As4CapabilityHandler.java @@ -7,7 +7,6 @@ */ package org.opendaylight.protocol.bgp.parser.impl.message.open; -import com.google.common.base.Preconditions; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import org.opendaylight.protocol.bgp.parser.BGPDocumentedException; @@ -17,26 +16,26 @@ import org.opendaylight.protocol.bgp.parser.spi.CapabilitySerializer; import org.opendaylight.protocol.bgp.parser.spi.CapabilityUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; public final class As4CapabilityHandler implements CapabilityParser, CapabilitySerializer { public static final int CODE = 65; - @Override public CParameters parseCapability(final ByteBuf buffer) throws BGPDocumentedException, BGPParsingException { - return new As4BytesCaseBuilder().setAs4BytesCapability( - new As4BytesCapabilityBuilder().setAsNumber(new AsNumber(buffer.readUnsignedInt())).build()).build(); + return new CParametersBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber(buffer.readUnsignedInt())).build()).build(); } @Override - public void serializeCapability(final CParameters capability, final ByteBuf bytes) { - Preconditions.checkArgument(capability instanceof As4BytesCase); - CapabilityUtil.formatCapability(CODE, putAS4BytesParameterValue((As4BytesCase) capability),bytes); + public void serializeCapability(final CParameters capability, final ByteBuf byteAggregator) { + final As4BytesCapability as4 = capability.getAs4BytesCapability(); + if (as4 != null) { + CapabilityUtil.formatCapability(CODE, putAS4BytesParameterValue(as4), byteAggregator); + } } - private static ByteBuf putAS4BytesParameterValue(final As4BytesCase param) { - return Unpooled.copyInt(param.getAs4BytesCapability().getAsNumber().getValue().intValue()); + private static ByteBuf putAS4BytesParameterValue(final As4BytesCapability param) { + return Unpooled.copyInt(param.getAsNumber().getValue().intValue()); } } \ No newline at end of file diff --git a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/GracefulCapabilityHandler.java b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/GracefulCapabilityHandler.java index 6a0e550cac..496d00ad83 100644 --- a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/GracefulCapabilityHandler.java +++ b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/GracefulCapabilityHandler.java @@ -8,12 +8,12 @@ package org.opendaylight.protocol.bgp.parser.impl.message.open; import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedShort; - import com.google.common.base.Preconditions; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import java.util.ArrayList; import java.util.List; + import org.opendaylight.protocol.bgp.parser.BGPDocumentedException; import org.opendaylight.protocol.bgp.parser.BGPParsingException; import org.opendaylight.protocol.bgp.parser.spi.AddressFamilyRegistry; @@ -22,14 +22,15 @@ 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.rev130919.open.bgp.parameters.optional.capabilities.CParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapability; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapability.RestartFlags; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.Tables; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.Tables.AfiFlags; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.TablesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.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.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapability.RestartFlags; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart.capability.Tables; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart.capability.Tables.AfiFlags; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart.capability.TablesBuilder; 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; import org.slf4j.Logger; @@ -68,27 +69,30 @@ public final class GracefulCapabilityHandler implements CapabilityParser, Capabi @Override public void serializeCapability(final CParameters capability, final ByteBuf byteAggregator) { - Preconditions.checkArgument(capability instanceof GracefulRestartCase); - final GracefulRestartCapability grace = ((GracefulRestartCase) capability).getGracefulRestartCapability(); + if (capability.getAugmentation(CParameters1.class) == null + || capability.getAugmentation(CParameters1.class).getGracefulRestartCapability() == null ) { + return; + } + final GracefulRestartCapability grace = capability.getAugmentation(CParameters1.class).getGracefulRestartCapability(); final List tables = grace.getTables(); - final int tablesSize = (tables != null) ? tables.size() : 0; + final int tablesSize = (tables != null) ? tables.size() : 0; final ByteBuf bytes = Unpooled.buffer(HEADER_SIZE + (PER_AFI_SAFI_SIZE * tablesSize)); int timeval = 0; Integer time = grace.getRestartTime(); - if (time == null) { + if ( time == null ) { time = 0; } Preconditions.checkArgument(time >= 0 && time <= MAX_RESTART_TIME, "Restart time is " + time); timeval = time; - final RestartFlags flags = grace.getRestartFlags(); - if (flags != null && flags.isRestartState()) { + final GracefulRestartCapability.RestartFlags flags = grace.getRestartFlags(); + if ( flags != null && flags.isRestartState() ) { writeUnsignedShort(RESTART_FLAG_STATE | timeval, bytes); } else { writeUnsignedShort(timeval, bytes); } - if (tables != null) { + if ( tables != null ) { for (final Tables t : tables) { final Class afi = t.getAfi(); final Integer afival = this.afiReg.numberForClass(afi); @@ -100,7 +104,7 @@ public final class GracefulCapabilityHandler implements CapabilityParser, Capabi Preconditions.checkArgument(safival != null, "Unhandled subsequent address family " + safi); bytes.writeByte(safival); - if (t.getAfiFlags() != null && t.getAfiFlags().isForwardingState()) { + if ( t.getAfiFlags() != null && t.getAfiFlags().isForwardingState() ) { bytes.writeByte(AFI_FLAG_FORWARDING_STATE); } else { bytes.writeZero(1); @@ -140,6 +144,7 @@ public final class GracefulCapabilityHandler implements CapabilityParser, Capabi 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(); + return new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder() + .setGracefulRestartCapability(cb.build()).build()).build(); } } diff --git a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/MultiProtocolCapabilityHandler.java b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/MultiProtocolCapabilityHandler.java index 486d0c5788..9f59aaf988 100644 --- a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/MultiProtocolCapabilityHandler.java +++ b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/MultiProtocolCapabilityHandler.java @@ -18,9 +18,11 @@ 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.rev130919.open.bgp.parameters.optional.capabilities.CParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.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.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapabilityBuilder; 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; @@ -38,7 +40,7 @@ public final class MultiProtocolCapabilityHandler implements CapabilityParser, C } @Override - public MultiprotocolCase parseCapability(final ByteBuf buffer) throws BGPDocumentedException, BGPParsingException { + public CParameters parseCapability(final ByteBuf buffer) throws BGPDocumentedException, BGPParsingException { final int afiVal = buffer.readUnsignedShort(); final Class afi = this.afiReg.classForFamily(afiVal); if (afi == null) { @@ -51,21 +53,26 @@ public final class MultiProtocolCapabilityHandler implements CapabilityParser, C if (safi == null) { throw new BGPParsingException("Subsequent Address Family Identifier: '" + safiVal + "' not supported."); } - return new MultiprotocolCaseBuilder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().setAfi(afi).setSafi(safi).build()).build(); + + return new CParametersBuilder().addAugmentation(CParameters1.class,new CParameters1Builder().setMultiprotocolCapability( + new MultiprotocolCapabilityBuilder().setAfi(afi).setSafi(safi).build()).build()).build(); } @Override public void serializeCapability(final CParameters capability, final ByteBuf byteAggregator) { - Preconditions.checkArgument(capability instanceof MultiprotocolCase); - final MultiprotocolCase mp = (MultiprotocolCase) capability; + if ( capability.getAugmentation(CParameters1.class) == null + || capability.getAugmentation(CParameters1.class).getMultiprotocolCapability() == null ) { + return; + } + final MultiprotocolCapability mp = capability.getAugmentation(CParameters1.class).getMultiprotocolCapability(); + final ByteBuf capBuffer = Unpooled.buffer(); - final Class afi = mp.getMultiprotocolCapability().getAfi(); + final Class afi = mp.getAfi(); final Integer afival = this.afiReg.numberForClass(afi); Preconditions.checkArgument(afival != null, "Unhandled address family " + afi); capBuffer.writeShort(afival); - final Class safi = mp.getMultiprotocolCapability().getSafi(); + final Class safi = mp.getSafi(); final Integer safival = this.safiReg.numberForClass(safi); Preconditions.checkArgument(safival != null, "Unhandled subsequent address family " + safi); capBuffer.writeZero(RESERVED); diff --git a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java index 55a50958c1..4d4c372ea5 100644 --- a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java +++ b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java @@ -27,20 +27,20 @@ import org.opendaylight.protocol.util.NoopReferenceCache; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AttributesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.AggregatorBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.ExtendedCommunities; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapability; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapability.RestartFlags; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.Tables; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.TablesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapability; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; +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.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapability.RestartFlags; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart.capability.Tables; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart.capability.TablesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpAggregator; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv6AddressFamily; @@ -68,12 +68,13 @@ public class ComplementaryTest { public void testBGPParameter() { final MultiprotocolCapability cap = new MultiprotocolCapabilityBuilder().setAfi(Ipv6AddressFamily.class).setSafi( - UnicastSubsequentAddressFamily.class).build(); - final CParameters tlv1 = new MultiprotocolCaseBuilder().setMultiprotocolCapability(cap).build(); - + UnicastSubsequentAddressFamily.class).build(); + final CParameters tlv1 = new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder() + .setMultiprotocolCapability(cap).build()).build(); final MultiprotocolCapability cap1 = new MultiprotocolCapabilityBuilder().setAfi(Ipv4AddressFamily.class).setSafi( - UnicastSubsequentAddressFamily.class).build(); - final CParameters tlv2 = new MultiprotocolCaseBuilder().setMultiprotocolCapability(cap1).build(); + UnicastSubsequentAddressFamily.class).build(); + final CParameters tlv2 = new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder() + .setMultiprotocolCapability(cap1).build()).build(); final List tt = new ArrayList<>(); tt.add(new TablesBuilder().setAfi(Ipv6AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).build()); @@ -81,8 +82,8 @@ public class ComplementaryTest { final GracefulRestartCapability tlv3 = new GracefulRestartCapabilityBuilder().setRestartFlags(new RestartFlags(Boolean.FALSE)).setRestartTime(0).setTables(tt).build(); - final CParameters tlv4 = new As4BytesCaseBuilder().setAs4BytesCapability( - new As4BytesCapabilityBuilder().setAsNumber(new AsNumber((long) 40)).build()).build(); + final CParameters tlv4 = new CParametersBuilder().setAs4BytesCapability( + new As4BytesCapabilityBuilder().setAsNumber(new AsNumber((long) 40)).build()).build(); assertFalse(tlv3.getRestartFlags().isRestartState()); @@ -100,10 +101,9 @@ public class ComplementaryTest { assertNotSame(cap.getAfi(), cap1.getAfi()); - assertEquals(40, ((As4BytesCase) tlv4).getAs4BytesCapability().getAsNumber().getValue().longValue()); + assertEquals(40, tlv4.getAs4BytesCapability().getAsNumber().getValue().longValue()); - assertEquals(new As4BytesCaseBuilder().setAs4BytesCapability( - new As4BytesCapabilityBuilder().setAsNumber(new AsNumber((long) 40)).build()).build(), tlv4); + assertEquals(new CParametersBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber((long) 40)).build()).build(), tlv4); } @Test diff --git a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/GracefulCapabilityHandlerTest.java b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/GracefulCapabilityHandlerTest.java index 941042ff43..aa5491cdc8 100644 --- a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/GracefulCapabilityHandlerTest.java +++ b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/GracefulCapabilityHandlerTest.java @@ -20,12 +20,14 @@ import org.opendaylight.protocol.bgp.parser.BGPParsingException; import org.opendaylight.protocol.bgp.parser.impl.message.open.GracefulCapabilityHandler; import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext; import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapability.RestartFlags; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.Tables; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.Tables.AfiFlags; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.TablesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.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.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapability.RestartFlags; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart.capability.Tables; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart.capability.Tables.AfiFlags; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart.capability.TablesBuilder; 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.Ipv4AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.SubsequentAddressFamily; @@ -42,8 +44,8 @@ public class GracefulCapabilityHandlerTest { @Test public void testGracefulCapabilityHandler() throws BGPDocumentedException, BGPParsingException { - final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(), - this.ctx.getSubsequentAddressFamilyRegistry()); + final GracefulCapabilityHandler handler = new GracefulCapabilityHandler( + this.ctx.getAddressFamilyRegistry(),this.ctx.getSubsequentAddressFamilyRegistry()); final byte[] capaBytes = { (byte) 0x40, (byte) 0x06, (byte) 0x80, (byte) 0x32, @@ -60,11 +62,13 @@ public class GracefulCapabilityHandlerTest { capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build())); final ByteBuf buffer = Unpooled.buffer(capaBytes.length); - handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer); + handler.serializeCapability( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer); Assert.assertArrayEquals(capaBytes, buffer.array()); - Assert.assertEquals(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), - handler.parseCapability(Unpooled.wrappedBuffer(capaBytes).slice(2, capaBytes.length - 2))); + Assert.assertEquals( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), + handler.parseCapability(Unpooled.wrappedBuffer(capaBytes).slice(2, capaBytes.length - 2))); final byte[] capaBytes2 = { (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00, @@ -75,17 +79,20 @@ public class GracefulCapabilityHandlerTest { tablesBuilder.setAfiFlags(new AfiFlags(false)); capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build())); buffer.clear(); - handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer); + handler.serializeCapability( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer); Assert.assertArrayEquals(capaBytes2, buffer.array()); - Assert.assertEquals(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), - handler.parseCapability(Unpooled.wrappedBuffer(capaBytes2).slice(2, capaBytes2.length - 2))); + Assert.assertEquals( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), + handler.parseCapability(Unpooled.wrappedBuffer(capaBytes2).slice(2, capaBytes2.length - 2))); capaBuilder.setRestartFlags(null); tablesBuilder.setAfiFlags(null); capaBuilder.setRestartTime(null); capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build())); buffer.clear(); - handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer); + handler.serializeCapability( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer); Assert.assertArrayEquals(capaBytes2, buffer.array()); final byte[] capaBytes3 = { @@ -95,48 +102,55 @@ public class GracefulCapabilityHandlerTest { capaBuilder.setRestartFlags(new RestartFlags(false)); capaBuilder.setRestartTime(0); capaBuilder.setTables(Collections.emptyList()); - Assert.assertEquals(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), - handler.parseCapability(Unpooled.wrappedBuffer(capaBytes3).slice(2, capaBytes3.length - 2))); + Assert.assertEquals( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), + handler.parseCapability(Unpooled.wrappedBuffer(capaBytes3).slice(2, capaBytes3.length - 2))); final byte[] capaBytes4 = { (byte) 0x40, (byte) 0x06, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00 }; - Assert.assertEquals(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), - handler.parseCapability(Unpooled.wrappedBuffer(capaBytes4).slice(2, capaBytes4.length - 2))); + Assert.assertEquals( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), + handler.parseCapability(Unpooled.wrappedBuffer(capaBytes4).slice(2, capaBytes4.length - 2))); final byte[] capaBytes5 = { (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0x00 }; final ByteBuf b = Unpooled.buffer(capaBytes5.length); - handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().build()).build(), b); + + handler.serializeCapability( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().build()).build()).build(), b); Assert.assertArrayEquals(capaBytes5, b.array()); - Assert.assertEquals(new GracefulRestartCaseBuilder().setGracefulRestartCapability( - new GracefulRestartCapabilityBuilder().setRestartFlags(new RestartFlags(Boolean.FALSE)).setRestartTime(0).setTables(Collections. emptyList()).build()).build(), - handler.parseCapability(Unpooled.wrappedBuffer(capaBytes5).slice(2, capaBytes5.length - 2))); + Assert.assertEquals(new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder() + .setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().setRestartFlags(new RestartFlags(Boolean.FALSE)) + .setRestartTime(0).setTables(Collections.emptyList()).build()).build()).build(), + handler.parseCapability(Unpooled.wrappedBuffer(capaBytes5).slice(2, capaBytes5.length - 2))); } @Test(expected=IllegalArgumentException.class) public void testUnhandledAfi() { final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(), - this.ctx.getSubsequentAddressFamilyRegistry()); + this.ctx.getSubsequentAddressFamilyRegistry()); final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder(); capaBuilder.setRestartFlags(new RestartFlags(true)); capaBuilder.setRestartTime(50); final TablesBuilder tablesBuilder = new TablesBuilder(); tablesBuilder.setAfiFlags(new AfiFlags(true)); + tablesBuilder.setAfi(AddressFamily.class); tablesBuilder.setSafi(UnicastSubsequentAddressFamily.class); capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build())); final ByteBuf buffer = Unpooled.buffer(); - handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer); + handler.serializeCapability( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer); } @Test(expected=IllegalArgumentException.class) public void testUnhandledSafi() { final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(), - this.ctx.getSubsequentAddressFamilyRegistry()); + this.ctx.getSubsequentAddressFamilyRegistry()); final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder(); capaBuilder.setRestartFlags(new RestartFlags(true)); @@ -148,13 +162,14 @@ public class GracefulCapabilityHandlerTest { capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build())); final ByteBuf buffer = Unpooled.buffer(); - handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer); + handler.serializeCapability( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer); } @Test(expected=IllegalArgumentException.class) public void testRestartTimeMinValue() { final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(), - this.ctx.getSubsequentAddressFamilyRegistry()); + this.ctx.getSubsequentAddressFamilyRegistry()); final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder(); capaBuilder.setRestartFlags(new RestartFlags(true)); @@ -166,13 +181,14 @@ public class GracefulCapabilityHandlerTest { capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build())); final ByteBuf buffer = Unpooled.buffer(); - handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer); + handler.serializeCapability( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer); } @Test(expected=IllegalArgumentException.class) public void testRestartTimeMaxValue() { final GracefulCapabilityHandler handler = new GracefulCapabilityHandler(this.ctx.getAddressFamilyRegistry(), - this.ctx.getSubsequentAddressFamilyRegistry()); + this.ctx.getSubsequentAddressFamilyRegistry()); final GracefulRestartCapabilityBuilder capaBuilder = new GracefulRestartCapabilityBuilder(); capaBuilder.setRestartFlags(new RestartFlags(true)); @@ -184,7 +200,8 @@ public class GracefulCapabilityHandlerTest { capaBuilder.setTables(Lists.newArrayList(tablesBuilder.build())); final ByteBuf buffer = Unpooled.buffer(); - handler.serializeCapability(new GracefulRestartCaseBuilder().setGracefulRestartCapability(capaBuilder.build()).build(), buffer); + handler.serializeCapability( new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(capaBuilder.build()).build()).build(), buffer); } } diff --git a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/OpenTest.java b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/OpenTest.java index e2c6ca87b0..e1b305efae 100644 --- a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/OpenTest.java +++ b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/OpenTest.java @@ -7,11 +7,13 @@ */ package org.opendaylight.protocol.bgp.parser.impl; -import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; import com.google.common.collect.Lists; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; + +import java.util.Collections; import java.util.List; import org.junit.Test; import org.opendaylight.protocol.bgp.parser.impl.message.BGPOpenMessageParser; @@ -26,32 +28,46 @@ 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.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; +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.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapabilityBuilder; public class OpenTest { - private final byte[] result = new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, - (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00, - (byte) 0x29, (byte) 0x01, (byte) 0x04, (byte) 0x00, (byte) 0x1e, (byte) 0x00, (byte) 0x03, (byte) 0x7f, (byte) 0x00, (byte) 0x00, - (byte) 0x01, (byte) 0x0c, (byte) 0x02, (byte) 0x0a, (byte) 0x41, (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x03, (byte) 0xe8, - (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0x00}; - @Test public void testSerializeOpen() throws Exception { final List optionalCapas = Lists.newArrayList(); - optionalCapas.add(new OptionalCapabilitiesBuilder().setCParameters( - new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber(1000L)).build()).build()).build()); - optionalCapas.add(new OptionalCapabilitiesBuilder().setCParameters( - new GracefulRestartCaseBuilder().setGracefulRestartCapability( - new GracefulRestartCapabilityBuilder().build()).build()).build()); + OptionalCapabilities optionalCapabilitiesBuilder= new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder() + .setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber(1000L)).build()).addAugmentation( + CParameters1.class, new CParameters1Builder().setGracefulRestartCapability(new GracefulRestartCapabilityBuilder() + .setRestartFlags(new GracefulRestartCapability.RestartFlags(false)).setRestartTime(0).setTables + (Collections.EMPTY_LIST).build()).build()).build()).build(); + optionalCapas.add(optionalCapabilitiesBuilder); final List tlvs = Lists.newArrayList(new BgpParametersBuilder().setOptionalCapabilities(optionalCapas).build()); final Open open = new OpenBuilder().setBgpIdentifier(new Ipv4Address("127.0.0.1")).setMyAsNumber(30).setHoldTimer(3).setVersion( - new ProtocolVersion((short) 4)).setBgpParameters(tlvs).build(); + new ProtocolVersion((short) 4)).setBgpParameters(tlvs).build(); final ByteBuf msg = Unpooled.buffer(); - new BGPOpenMessageParser(ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getParameterRegistry()).serializeMessage(open,msg); - assertArrayEquals(this.result, ByteArray.getAllBytes(msg)); + new BGPOpenMessageParser(ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getParameterRegistry()).serializeMessage(open, msg); + final byte[] temp = ByteArray.cutBytes(ByteArray.getAllBytes(msg), 19); + final Open openResult = new BGPOpenMessageParser(ServiceLoaderBGPExtensionProviderContext.getSingletonInstance() + .getParameterRegistry()).parseMessageBody(Unpooled.copiedBuffer(temp), temp.length); + + assertEquals(open.getBgpIdentifier(),openResult.getBgpIdentifier()); + assertEquals(open.getHoldTimer(), openResult.getHoldTimer()); + assertEquals(open.getMyAsNumber(), openResult.getMyAsNumber()); + boolean grace = false; + if(openResult.getBgpParameters().get(0).getOptionalCapabilities().get(0).getCParameters().getAs4BytesCapability() != null ) { + grace = true; + } + assertEquals(open.getBgpParameters().get(0).getOptionalCapabilities().get(0).getCParameters().getAs4BytesCapability(), + openResult.getBgpParameters().get(0).getOptionalCapabilities().get((!grace) ? 1 : 0).getCParameters().getAs4BytesCapability()); + assertEquals(open.getBgpParameters().get(0).getOptionalCapabilities().get(0).getCParameters() + .getAugmentation(CParameters1.class) + .getGracefulRestartCapability(), openResult.getBgpParameters().get(0).getOptionalCapabilities().get((grace) ? 1 : 0).getCParameters() + .getAugmentation(CParameters1.class).getGracefulRestartCapability()); + } } diff --git a/bgp/parser-mock/src/test/java/org/opendaylight/protocol/bgp/parser/mock/BGPMessageParserMockTest.java b/bgp/parser-mock/src/test/java/org/opendaylight/protocol/bgp/parser/mock/BGPMessageParserMockTest.java index 8eb4c9f3e2..a803688a9b 100644 --- a/bgp/parser-mock/src/test/java/org/opendaylight/protocol/bgp/parser/mock/BGPMessageParserMockTest.java +++ b/bgp/parser-mock/src/test/java/org/opendaylight/protocol/bgp/parser/mock/BGPMessageParserMockTest.java @@ -43,6 +43,7 @@ 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.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AttributesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.AsPathBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.OriginBuilder; @@ -51,9 +52,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.multiprotocol.rev130919.Attributes1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.Attributes1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; +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.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlriBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.mp.reach.nlri.AdvertizedRoutesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpOrigin; @@ -171,7 +172,9 @@ public class BGPMessageParserMockTest { mpReachBuilder.setCNextHop(nextHop); mpReachBuilder.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType( new DestinationIpv6CaseBuilder().setDestinationIpv6( - new DestinationIpv6Builder().setIpv6Prefixes(Lists.newArrayList(new Ipv6PrefixesBuilder().setPrefix(pref1).build(), new Ipv6PrefixesBuilder().setPrefix(pref2).build(), new Ipv6PrefixesBuilder().setPrefix(pref3).build())).build()).build()).build()); + new DestinationIpv6Builder().setIpv6Prefixes(Lists.newArrayList( + new Ipv6PrefixesBuilder().setPrefix(pref1).build(),new Ipv6PrefixesBuilder().setPrefix(pref2).build(), + new Ipv6PrefixesBuilder().setPrefix(pref3).build())).build()).build()).build()); paBuilder.addAugmentation(Attributes1.class, new Attributes1Builder().setMpReachNlri(mpReachBuilder.build()).build()); @@ -189,9 +192,11 @@ public class BGPMessageParserMockTest { final List params = Lists.newArrayList(); - final CParameters par = new MultiprotocolCaseBuilder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().setAfi(Ipv4AddressFamily.class).setSafi(MplsLabeledVpnSubsequentAddressFamily.class).build()).build(); - params.add(new BgpParametersBuilder().setOptionalCapabilities(Lists.newArrayList(new OptionalCapabilitiesBuilder().setCParameters(par).build())).build()); + final CParameters par = new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder() + .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder().setAfi(Ipv4AddressFamily.class) + .setSafi(MplsLabeledVpnSubsequentAddressFamily.class).build()).build()).build(); + params.add(new BgpParametersBuilder().setOptionalCapabilities(Lists.newArrayList( + new OptionalCapabilitiesBuilder().setCParameters(par).build())).build()); final byte[] input = new byte[] { 5, 8, 13, 21 }; @@ -204,8 +209,11 @@ public class BGPMessageParserMockTest { for (final BgpParameters p : ((Open) mockParser.parseMessage(Unpooled.copiedBuffer(input))).getBgpParameters()) { for (final OptionalCapabilities capa : p.getOptionalCapabilities()) { final CParameters cp = capa.getCParameters(); - final BgpTableType t = new BgpTableTypeImpl(((MultiprotocolCase) cp).getMultiprotocolCapability().getAfi(), ((MultiprotocolCase) cp).getMultiprotocolCapability().getSafi()); - result.add(t); + if (cp.getAugmentation(CParameters1.class) != null && cp.getAugmentation(CParameters1.class).getMultiprotocolCapability() != null) { + final BgpTableType t = new BgpTableTypeImpl(cp.getAugmentation(CParameters1.class).getMultiprotocolCapability().getAfi(), + cp.getAugmentation(CParameters1.class).getMultiprotocolCapability().getSafi()); + result.add(t); + } } } assertEquals(type, result); diff --git a/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/BGPExtensionProviderContext.java b/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/BGPExtensionProviderContext.java index 75d68d0b53..d7f0d5f704 100644 --- a/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/BGPExtensionProviderContext.java +++ b/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/BGPExtensionProviderContext.java @@ -9,7 +9,6 @@ package org.opendaylight.protocol.bgp.parser.spi; import org.opendaylight.protocol.util.ReferenceCache; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; 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; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -31,7 +30,7 @@ public interface BGPExtensionProviderContext extends BGPExtensionConsumerContext AutoCloseable registerCapabilityParser(int capabilityType, CapabilityParser parser); - AutoCloseable registerCapabilitySerializer(Class capabilityClass, CapabilitySerializer serializer); + AutoCloseable registerCapabilitySerializer(Class capabilityClass, CapabilitySerializer serializer); AutoCloseable registerMessageParser(int messageType, MessageParser parser); diff --git a/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleBGPExtensionProviderContext.java b/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleBGPExtensionProviderContext.java index c3425a8cdf..056fcab8db 100644 --- a/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleBGPExtensionProviderContext.java +++ b/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleBGPExtensionProviderContext.java @@ -24,7 +24,6 @@ import org.opendaylight.protocol.bgp.parser.spi.ParameterParser; import org.opendaylight.protocol.bgp.parser.spi.ParameterSerializer; import org.opendaylight.protocol.util.ReferenceCache; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; 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; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -84,7 +83,7 @@ public class SimpleBGPExtensionProviderContext extends SimpleBGPExtensionConsume } @Override - public AutoCloseable registerCapabilitySerializer(final Class capabilityClass, final CapabilitySerializer serializer) { + public AutoCloseable registerCapabilitySerializer(final Class capabilityClass, final CapabilitySerializer serializer) { return this.getCapabilityRegistry().registerCapabilitySerializer(capabilityClass, serializer); } diff --git a/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleCapabilityRegistry.java b/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleCapabilityRegistry.java index cf3041cfad..fdcf3cf280 100644 --- a/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleCapabilityRegistry.java +++ b/bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleCapabilityRegistry.java @@ -18,6 +18,7 @@ import org.opendaylight.protocol.concepts.HandlerRegistry; import org.opendaylight.protocol.util.Values; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; import org.opendaylight.yangtools.yang.binding.DataContainer; +import org.opendaylight.yangtools.yang.binding.DataObject; final class SimpleCapabilityRegistry implements CapabilityRegistry { private final HandlerRegistry handlers = new HandlerRegistry<>(); @@ -27,7 +28,7 @@ final class SimpleCapabilityRegistry implements CapabilityRegistry { return this.handlers.registerParser(messageType, parser); } - AutoCloseable registerCapabilitySerializer(final Class paramClass, final CapabilitySerializer serializer) { + AutoCloseable registerCapabilitySerializer(final Class paramClass, final CapabilitySerializer serializer) { return this.handlers.registerSerializer(paramClass, serializer); } @@ -42,11 +43,8 @@ final class SimpleCapabilityRegistry implements CapabilityRegistry { @Override public void serializeCapability(final CParameters capability, ByteBuf bytes) { - final CapabilitySerializer serializer = this.handlers.getSerializer(capability.getImplementedInterface()); - if (serializer == null) { - return; + for (CapabilitySerializer s : this.handlers.getAllSerializers()) { + s.serializeCapability(capability, bytes); } - - serializer.serializeCapability(capability, bytes); } } diff --git a/bgp/parser-spi/src/test/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleRegistryTest.java b/bgp/parser-spi/src/test/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleRegistryTest.java index a019e603ae..3fab3082a1 100644 --- a/bgp/parser-spi/src/test/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleRegistryTest.java +++ b/bgp/parser-spi/src/test/java/org/opendaylight/protocol/bgp/parser/spi/pojo/SimpleRegistryTest.java @@ -33,7 +33,6 @@ import org.opendaylight.protocol.bgp.parser.spi.ParameterRegistry; import org.opendaylight.protocol.bgp.parser.spi.SubsequentAddressFamilyRegistry; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AttributesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlri; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlriBuilder; @@ -97,13 +96,8 @@ public class SimpleRegistryTest { final byte[] capabilityBytes = { 0x0, 0x00 }; - final CParameters capa = Mockito.mock(CParameters.class); - Mockito.doReturn(CParameters.class).when(capa).getImplementedInterface(); - final ByteBuf buffer = Unpooled.buffer(capabilityBytes.length); - capaRegistry.serializeCapability(capa, buffer); capaRegistry.parseCapability(BgpTestActivator.TYPE, Unpooled.wrappedBuffer(capabilityBytes)); verify(this.activator.capaParser, times(1)).parseCapability(Mockito.any(ByteBuf.class)); - verify(this.activator.capaSerializer, times(1)).serializeCapability(Mockito.any(CParameters.class), Mockito.any(ByteBuf.class)); } @Test diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPPeerModule.java b/bgp/rib-impl/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPPeerModule.java index 9ace4ae15b..a8ffb8a49c 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPPeerModule.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPPeerModule.java @@ -35,13 +35,13 @@ 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.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; +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.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -172,18 +172,18 @@ public final class BGPPeerModule extends org.opendaylight.controller.config.yang private List getTlvs(final RIB r) { final List tlvs = new ArrayList<>(); final List caps = new ArrayList<>(); - caps.add(new OptionalCapabilitiesBuilder().setCParameters( - new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(r.getLocalAs()).build()).build()).build()); - caps.add(new OptionalCapabilitiesBuilder().setCParameters( - new GracefulRestartCaseBuilder().setGracefulRestartCapability( - new GracefulRestartCapabilityBuilder().build()).build()).build()); + caps.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().setAs4BytesCapability( + new As4BytesCapabilityBuilder().setAsNumber(r.getLocalAs()).build()).build()).build()); + caps.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().build()).build()).build()).build()); + for (final BgpTableType t : getAdvertizedTableDependency()) { if (!r.getLocalTables().contains(t)) { LOG.info("RIB instance does not list {} in its local tables. Incoming data will be dropped.", t); } - caps.add(new OptionalCapabilitiesBuilder().setCParameters( - new MultiprotocolCaseBuilder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder(t).build()).build()).build()); + caps.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder(t).build()).build()).build()).build()); } tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(caps).build()); return tlvs; diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPClientSessionValidator.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPClientSessionValidator.java index 53a6b75735..636928db86 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPClientSessionValidator.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPClientSessionValidator.java @@ -16,14 +16,15 @@ import org.opendaylight.protocol.bgp.parser.AsNumberUtil; import org.opendaylight.protocol.bgp.parser.BGPDocumentedException; import org.opendaylight.protocol.bgp.parser.BGPError; import org.opendaylight.protocol.bgp.parser.impl.message.open.As4CapabilityHandler; -import org.opendaylight.protocol.bgp.parser.spi.CapabilitySerializer; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionPreferences; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionValidator; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.Open; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapability; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -79,21 +80,22 @@ public class BGPClientSessionValidator implements BGPSessionValidator { } } - private static Optional getAs4BytesCapability(final List prefs) { + private static Optional getAs4BytesCapability(final List prefs) { for(final BgpParameters param : prefs) { for (final OptionalCapabilities capa : param.getOptionalCapabilities()) { - if(capa.getCParameters() instanceof As4BytesCase) { - return Optional.of((As4BytesCase) capa.getCParameters()); + final CParameters cParam = capa.getCParameters(); + if(cParam.getAs4BytesCapability() !=null) { + return Optional.of(cParam.getAs4BytesCapability()); } } } return Optional.absent(); } - private static byte[] serializeAs4BytesCapability(final As4BytesCase as4Capability) { + private static byte[] serializeAs4BytesCapability(final As4BytesCapability as4Capability) { final ByteBuf buffer = Unpooled.buffer(1 /*CODE*/ + 1 /*LENGTH*/ + Integer.SIZE / Byte.SIZE /*4 byte value*/); - final CapabilitySerializer serializer = new As4CapabilityHandler(); - serializer.serializeCapability(as4Capability, buffer); + final As4CapabilityHandler serializer = new As4CapabilityHandler(); + serializer.serializeCapability(new CParametersBuilder().setAs4BytesCapability(as4Capability).build(), buffer); return buffer.array(); } } diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImpl.java index b8f84c594a..cc3c7dfb6f 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImpl.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImpl.java @@ -44,7 +44,8 @@ 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.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCase; +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.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapability; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey; import org.opendaylight.yangtools.yang.binding.Notification; import org.slf4j.Logger; @@ -134,14 +135,16 @@ public class BGPSessionImpl extends AbstractProtocolSession implem if (remoteOpen.getBgpParameters() != null) { for (final BgpParameters param : remoteOpen.getBgpParameters()) { for (final OptionalCapabilities optCapa : param.getOptionalCapabilities()) { - final CParameters cp = optCapa.getCParameters(); - if (cp instanceof MultiprotocolCase) { - final TablesKey tt = new TablesKey(((MultiprotocolCase) cp).getMultiprotocolCapability().getAfi(), - ((MultiprotocolCase) cp).getMultiprotocolCapability().getSafi()); - LOG.trace("Added table type to sync {}", tt); - tts.add(tt); - tats.add(new BgpTableTypeImpl(tt.getAfi(), tt.getSafi())); + final CParameters cParam = optCapa.getCParameters(); + if ( cParam.getAugmentation(CParameters1.class) == null || + cParam.getAugmentation(CParameters1.class).getMultiprotocolCapability() == null ) { + continue; } + final MultiprotocolCapability multi = cParam.getAugmentation(CParameters1.class).getMultiprotocolCapability(); + final TablesKey tt = new TablesKey(multi.getAfi(), multi.getSafi()); + LOG.trace("Added table type to sync {}", tt); + tts.add(tt); + tats.add(new BgpTableTypeImpl(tt.getAfi(), tt.getSafi())); } } } diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionProposalImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionProposalImpl.java index cbae35b516..5eea063006 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionProposalImpl.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionProposalImpl.java @@ -19,12 +19,12 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; +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.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapabilityBuilder; 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; @@ -49,16 +49,17 @@ public final class BGPSessionProposalImpl implements BGPSessionProposal { final List caps = new ArrayList<>(); for (final Entry, Class> e : tables.entrySet()) { - caps.add(new OptionalCapabilitiesBuilder().setCParameters( - new MultiprotocolCaseBuilder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().setAfi(e.getKey()).setSafi(e.getValue()).build()).build()).build()); + caps.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation( + CParameters1.class, new CParameters1Builder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() + .setAfi(e.getKey()).setSafi(e.getValue()).build()).build()).build()).build()); } - caps.add(new OptionalCapabilitiesBuilder().setCParameters( - new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(as).build()).build()).build()); - caps.add(new OptionalCapabilitiesBuilder().setCParameters( - new GracefulRestartCaseBuilder().setGracefulRestartCapability( - new GracefulRestartCapabilityBuilder().build()).build()).build()); - this.prefs = new BGPSessionPreferences(as, holdTimer, bgpId, Lists.newArrayList(new BgpParametersBuilder().setOptionalCapabilities(caps).build())); + caps.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().setAs4BytesCapability( + new As4BytesCapabilityBuilder().setAsNumber(as).build()).build()).build()); + caps.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation( + CParameters1.class, new CParameters1Builder().setGracefulRestartCapability( + new GracefulRestartCapabilityBuilder().build()).build()).build()).build()); + this.prefs = new BGPSessionPreferences(as, holdTimer, bgpId, Lists.newArrayList( + new BgpParametersBuilder().setOptionalCapabilities(caps).build())); } @Override diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionStats.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionStats.java index 652e0a1230..8a6255223b 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionStats.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionStats.java @@ -38,11 +38,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.BgpParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapability; +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.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapability; final class BGPSessionStats { private final Stopwatch sessionStopwatch; @@ -172,19 +170,17 @@ final class BGPSessionStats { if (localPref.getParams() != null) { for (final BgpParameters param : localPref.getParams()) { for (final OptionalCapabilities capa : param.getOptionalCapabilities()) { - final CParameters cp = capa.getCParameters(); - if (cp instanceof MultiprotocolCase) { - final MultiprotocolCapability mc = ((MultiprotocolCase) cp).getMultiprotocolCapability(); - final AdvertizedTableTypes att = new AdvertizedTableTypes(); - att.setAfi(mc.getAfi().getSimpleName()); - att.setSafi(mc.getSafi().getSimpleName()); - tt.add(att); - } - if (cp instanceof As4BytesCase) { - pref.setFourOctetAsCapability(((As4BytesCase) cp).getAs4BytesCapability() != null); - } - if (capa.getCParameters() instanceof GracefulRestartCase) { - pref.setGrCapability(((GracefulRestartCase) capa.getCParameters()).getGracefulRestartCapability() != null); + final CParameters cParam = capa.getCParameters(); + if(cParam.getAugmentation(CParameters1.class) != null) { + final MultiprotocolCapability mc = cParam.getAugmentation(CParameters1.class).getMultiprotocolCapability(); + if (mc != null) { + final AdvertizedTableTypes att = new AdvertizedTableTypes(); + att.setAfi(mc.getAfi().getSimpleName()); + att.setSafi(mc.getSafi().getSimpleName()); + tt.add(att); + } + pref.setGrCapability(cParam.getAugmentation(CParameters1.class).getGracefulRestartCapability() != null); + pref.setFourOctetAsCapability(cParam.getAs4BytesCapability() != null); } } } @@ -211,12 +207,10 @@ final class BGPSessionStats { if (remoteOpen.getBgpParameters() != null) { for (final BgpParameters param : remoteOpen.getBgpParameters()) { for (final OptionalCapabilities capa : param.getOptionalCapabilities()) { - if (capa.getCParameters() instanceof As4BytesCase) { - pref.setFourOctetAsCapability(((As4BytesCase) capa.getCParameters()).getAs4BytesCapability() != null); - } - if (capa.getCParameters() instanceof GracefulRestartCase) { - pref.setGrCapability(((GracefulRestartCase) capa.getCParameters()).getGracefulRestartCapability() != null); - } + final CParameters cParam = capa.getCParameters(); + pref.setFourOctetAsCapability(cParam.getAs4BytesCapability() != null); + pref.setGrCapability(cParam.getAugmentation(CParameters1.class) != null && + cParam.getAugmentation(CParameters1.class).getGracefulRestartCapability() != null); } } diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImplTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImplTest.java index 1bbaf276f8..4ef2a1c694 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImplTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImplTest.java @@ -40,11 +40,12 @@ 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.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; +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.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily; @@ -131,11 +132,10 @@ public class BGPDispatcherImplTest { private BGPSessionPreferences createPreferences(final InetSocketAddress socketAddress) { final List tlvs = Lists.newArrayList(); final List capas = Lists.newArrayList(); - capas.add(new OptionalCapabilitiesBuilder().setCParameters( - new MultiprotocolCaseBuilder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()).build()).build()); - capas.add(new OptionalCapabilitiesBuilder().setCParameters(new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber( - new AsNumber(30L)).build()).build()).build()); + capas.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation( + CParameters1.class, new CParameters1Builder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() + .setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()).build()) + .setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber(30L)).build()).build()).build()); tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(capas).build()); return new BGPSessionPreferences(AS_NUMBER, (short) 4, new Ipv4Address(socketAddress.getAddress().getHostAddress()), tlvs); } diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImplTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImplTest.java index 0c275238c6..65b58a785c 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImplTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImplTest.java @@ -54,13 +54,13 @@ 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.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; +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.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily; import org.opendaylight.yangtools.yang.binding.Notification; @@ -96,18 +96,16 @@ public class BGPSessionImplTest { public void setUp() throws UnknownHostException { MockitoAnnotations.initMocks(this); final List tlvs = Lists.newArrayList(); - this.classicOpen = new OpenBuilder().setMyAsNumber(AS_NUMBER.getValue().intValue()).setHoldTimer(HOLD_TIMER).setVersion(new ProtocolVersion((short) 4)).setBgpParameters( - tlvs).setBgpIdentifier(BGP_ID).build(); + this.classicOpen = new OpenBuilder().setMyAsNumber(AS_NUMBER.getValue().intValue()).setHoldTimer(HOLD_TIMER) + .setVersion(new ProtocolVersion((short) 4)).setBgpParameters(tlvs).setBgpIdentifier(BGP_ID).build(); final List capa = Lists.newArrayList(); - capa.add(new OptionalCapabilitiesBuilder().setCParameters( - new MultiprotocolCaseBuilder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()).build()).build()); - capa.add(new OptionalCapabilitiesBuilder().setCParameters(new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber( - AS_NUMBER).build()).build()).build()); - capa.add(new OptionalCapabilitiesBuilder().setCParameters( - new GracefulRestartCaseBuilder().setGracefulRestartCapability( - new GracefulRestartCapabilityBuilder().build()).build()).build()); + capa.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() + .setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()) + .setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().build()).build()) + .setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(AS_NUMBER).build()).build()).build() + ); tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(capa).build()); final ChannelFuture f = mock(ChannelFuture.class); @@ -161,7 +159,7 @@ public class BGPSessionImplTest { assertEquals(BGP_ID.getValue(), state.getPeerPreferences().getBgpId()); assertEquals(1, state.getPeerPreferences().getAdvertizedTableTypes().size()); assertEquals(HOLD_TIMER, state.getPeerPreferences().getHoldtime().intValue()); - assertTrue(state.getPeerPreferences().getFourOctetAsCapability()); + assertTrue(state.getPeerPreferences().getFourOctetAsCapability().booleanValue()); assertTrue(state.getPeerPreferences().getGrCapability()); assertEquals(LOCAL_IP, state.getSpeakerPreferences().getAddress()); assertEquals(LOCAL_PORT, state.getSpeakerPreferences().getPort().intValue()); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/FSMTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/FSMTest.java index 9ecbc613f0..a0d7e81b1b 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/FSMTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/FSMTest.java @@ -55,13 +55,13 @@ 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.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; +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.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily; import org.opendaylight.yangtools.yang.binding.Notification; @@ -94,17 +94,18 @@ public class FSMTest { final List tlvs = Lists.newArrayList(); final List capas = Lists.newArrayList(); - capas.add(new OptionalCapabilitiesBuilder().setCParameters( - new MultiprotocolCaseBuilder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()).build()).build()); - capas.add(new OptionalCapabilitiesBuilder().setCParameters( - new MultiprotocolCaseBuilder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().setAfi(this.linkstatett.getAfi()).setSafi(this.linkstatett.getSafi()).build()).build()).build()); - capas.add(new OptionalCapabilitiesBuilder().setCParameters(new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber( - new AsNumber(30L)).build()).build()).build()); - capas.add(new OptionalCapabilitiesBuilder().setCParameters( - new GracefulRestartCaseBuilder().setGracefulRestartCapability( - new GracefulRestartCapabilityBuilder().build()).build()).build()); + capas.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() + .setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()).build()).build()).build()); + capas.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() + .setAfi(this.linkstatett.getAfi()).setSafi(this.linkstatett.getSafi()).build()).build()).build()).build()); + capas.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().setAs4BytesCapability( + new As4BytesCapabilityBuilder().setAsNumber(new AsNumber(30L)).build()).build()).build()); + capas.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().build()).build()).build()).build()); + + tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(capas).build()); final BGPSessionPreferences prefs = new BGPSessionPreferences(new AsNumber(30L), (short) 3, new Ipv4Address("1.1.1.1"), tlvs); @@ -179,12 +180,13 @@ public class FSMTest { final List tlvs = Lists.newArrayList(); final List capas = Lists.newArrayList(); - capas.add(new OptionalCapabilitiesBuilder().setCParameters( - new MultiprotocolCaseBuilder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()).build()).build()); + capas.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, + new CParameters1Builder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() + .setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()).build()).build()).build()); tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(capas).build()); // Open Message without advertised four-octet AS Number capability - this.clientSession.handleMessage(new OpenBuilder().setMyAsNumber(30).setHoldTimer(1).setVersion(new ProtocolVersion((short) 4)).setBgpParameters(tlvs).build()); + this.clientSession.handleMessage(new OpenBuilder().setMyAsNumber(30).setHoldTimer(1).setVersion( + new ProtocolVersion((short) 4)).setBgpParameters(tlvs).setBgpIdentifier(new Ipv4Address("1.1.1.2")).build()); assertEquals(2, this.receivedMsgs.size()); assertTrue(this.receivedMsgs.get(1) instanceof Notify); final Notification m = this.receivedMsgs.get(this.receivedMsgs.size() - 1); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/PeerTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/PeerTest.java index 71781f22d8..e7e62f7e23 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/PeerTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/PeerTest.java @@ -67,14 +67,16 @@ 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.BgpParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AttributesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.NlriBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.WithdrawnRoutesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.Attributes2; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.Attributes2Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; +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.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpUnreachNlriBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.ApplicationRibId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.RibId; @@ -287,9 +289,12 @@ public class PeerTest { Mockito.doReturn(new InetSocketAddress("localhost", 12345)).when(this.channel).remoteAddress(); Mockito.doReturn(new InetSocketAddress("localhost", 12345)).when(this.channel).localAddress(); - final List params = Lists.newArrayList(new BgpParametersBuilder().setOptionalCapabilities(Lists.newArrayList(new OptionalCapabilitiesBuilder().setCParameters(new MultiprotocolCaseBuilder() - .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder().setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).build()).build()).build())).build()); - this.session = new BGPSessionImpl(this.classic, this.channel, new OpenBuilder().setBgpIdentifier(new Ipv4Address("1.1.1.1")).setHoldTimer(50).setMyAsNumber(72).setBgpParameters(params).build(), 30, null); + final List params = Lists.newArrayList(new BgpParametersBuilder().setOptionalCapabilities( + Lists.newArrayList(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation( + CParameters1.class, new CParameters1Builder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() + .setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).build()).build()).build()).build())).build()); + this.session = new BGPSessionImpl(this.classic, this.channel, new OpenBuilder().setBgpIdentifier(new Ipv4Address("1.1.1.1")) + .setHoldTimer(50).setMyAsNumber(72).setBgpParameters(params).build(), 30, null); assertEquals("testPeer", this.classic.getName()); this.classic.onSessionUp(this.session); Assert.assertArrayEquals(new byte[] {1, 1, 1, 1}, this.classic.getRawIdentifier()); diff --git a/bgp/rib-mock/src/main/java/org/opendaylight/protocol/bgp/rib/mock/EventBusRegistration.java b/bgp/rib-mock/src/main/java/org/opendaylight/protocol/bgp/rib/mock/EventBusRegistration.java index 508a517448..3936316df5 100644 --- a/bgp/rib-mock/src/main/java/org/opendaylight/protocol/bgp/rib/mock/EventBusRegistration.java +++ b/bgp/rib-mock/src/main/java/org/opendaylight/protocol/bgp/rib/mock/EventBusRegistration.java @@ -21,8 +21,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; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCase; +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.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCapability; import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; import org.opendaylight.yangtools.yang.binding.Notification; import org.slf4j.Logger; @@ -70,10 +72,12 @@ final class EventBusRegistration extends AbstractListenerRegistration tts = Sets.newHashSet(); for (final BgpParameters param : ((Open) message).getBgpParameters()) { for (final OptionalCapabilities capa : param.getOptionalCapabilities()) { - if (capa.getCParameters() instanceof MultiprotocolCase) { - final MultiprotocolCase p = (MultiprotocolCase) capa.getCParameters(); + final CParameters cParam = capa.getCParameters(); + if (cParam.getAugmentation(CParameters1.class) != null && cParam.getAugmentation(CParameters1.class) + .getMultiprotocolCapability() != null) { + final MultiprotocolCapability p = cParam.getAugmentation(CParameters1.class).getMultiprotocolCapability(); LOG.debug("Adding open parameter {}", p); - final BgpTableType type = new BgpTableTypeImpl(p.getMultiprotocolCapability().getAfi(), p.getMultiprotocolCapability().getSafi()); + final BgpTableType type = new BgpTableTypeImpl(p.getAfi(), p.getSafi()); tts.add(type); } } -- 2.36.6