public <T extends PeerConstraint> boolean addDecoderConstraint(final Class<T> classType, final T peerConstraint) { return this.constraints.addPeerConstraint(classType, peerConstraint); }
@Nullable protected final PathId readPathId(@Nonnull final ByteBuf nlri, final Class<? extends AddressFamily> afi, final Class<? extends SubsequentAddressFamily> safi, final PeerSpecificParserConstraint constraint) { if (MultiPathSupportUtil.isTableTypeSupported(constraint, new BgpTableTypeImpl(afi, safi))) { return PathIdUtil.readPathId(nlri); } return null; }
@Override public void serializeAttribute(final DataObject attribute, final ByteBuf byteAggregator) { Preconditions.checkArgument(attribute instanceof Attributes, "Attribute parameter is not a PathAttribute object."); final Attributes pathAttributes = (Attributes) attribute; final Attributes2 pathAttributes2 = pathAttributes.getAugmentation(Attributes2.class); if (pathAttributes2 == null) { return; } final MpUnreachNlri mpUnreachNlri = pathAttributes2.getMpUnreachNlri(); final ByteBuf unreachBuffer = Unpooled.buffer(); this.reg.serializeMpUnReach(mpUnreachNlri, unreachBuffer); for (final NlriSerializer nlriSerializer : this.reg.getSerializers()){ nlriSerializer.serializeAttribute(attribute,unreachBuffer); } AttributeUtil.formatAttribute(AttributeUtil.OPTIONAL, TYPE, unreachBuffer, byteAggregator); } }
private void registerNlriHandler(final BGPExtensionProviderContext context, final List<AutoCloseable> regs) { final NextHopParserSerializer nextHopParser = new NextHopParserSerializer() {}; final EvpnNlriParser nlriHandler = new EvpnNlriParser(); regs.add(context.registerNlriParser(L2vpnAddressFamily.class, EvpnSubsequentAddressFamily.class, nlriHandler, nextHopParser, Ipv4NextHopCase.class, Ipv6NextHopCase.class)); regs.add(context.registerNlriSerializer(EvpnRoutes.class, nlriHandler)); }
@Override public void serializeAttribute(final DataObject attribute, final ByteBuf byteAggregator) { Preconditions.checkArgument(attribute instanceof Attributes, "Attribute parameter is not a PathAttribute object."); final Attributes pathAttributes = (Attributes) attribute; final Attributes1 pathAttributes1 = pathAttributes.getAugmentation(Attributes1.class); if (pathAttributes1 == null) { return; } final MpReachNlri mpReachNlri = pathAttributes1.getMpReachNlri(); final ByteBuf reachBuffer = Unpooled.buffer(); this.reg.serializeMpReach(mpReachNlri, reachBuffer); for (final NlriSerializer nlriSerializer : this.reg.getSerializers()) { nlriSerializer.serializeAttribute(attribute, reachBuffer); } AttributeUtil.formatAttribute(AttributeUtil.OPTIONAL, TYPE, reachBuffer, byteAggregator); } }
@Nonnull @Override public final PathArgument getRouteIdAddPath(final long pathId, final PathArgument routeId) { return PathIdUtil.createNidKey(pathId, routeId, routeQName(), pathIdQName(), routeKeyQName()); }
@Override public void serializeAttribute(final DataObject attribute, final ByteBuf byteAggregator) { Preconditions.checkArgument(attribute instanceof Attributes, "Attribute parameter is not a PathAttribute object."); final Attributes pathAttributes = (Attributes) attribute; if (pathAttributes.getAtomicAggregate() == null) { return; } AttributeUtil.formatAttribute(AttributeUtil.TRANSITIVE, TYPE, Unpooled.EMPTY_BUFFER, byteAggregator); } }
/** * Serializes BGP Route Refresh message. * * @param message to be serialized * @param bytes ByteBuf where the message will be serialized */ @Override public void serializeMessage(final Notification message, final ByteBuf bytes) { Preconditions.checkArgument(message instanceof RouteRefresh, "Message is not of type RouteRefresh."); final RouteRefresh msg = (RouteRefresh) message; final ByteBuf msgBuf = Unpooled.buffer(TRIPLET_BYTE_SIZE); MultiprotocolCapabilitiesUtil.serializeMPAfiSafi(this.afiReg, this.safiReg, msg.getAfi(), msg.getSafi(), msgBuf); LOG.trace("RouteRefresh message serialized to: {}", ByteBufUtil.hexDump(msgBuf)); MessageUtil.formatMessage(TYPE, msgBuf, bytes); }
@Override public void serializeCapability(final CParameters capability, final ByteBuf byteAggregator) { 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(); MultiprotocolCapabilitiesUtil.serializeMPAfiSafi(this.afiReg, this.safiReg, mp.getAfi(), mp.getSafi(), capBuffer); CapabilityUtil.formatCapability(CODE, capBuffer, byteAggregator); }
@Override public void serializeCapability(final CParameters capability, final ByteBuf byteAggregator) { final BgpExtendedMessageCapability bgpExtendedMessageCapability = capability.getBgpExtendedMessageCapability(); if (bgpExtendedMessageCapability != null) { CapabilityUtil.formatCapability(CODE, Unpooled.EMPTY_BUFFER, byteAggregator); } } }
@Override public final Long extractPathId(final NormalizedNode<?, ?> data) { final Long pathId = PathIdUtil.extractPathId(data, this.routePathIdNid()); if(pathId == null) { return PathIdUtil.NON_PATH_ID; } return pathId; }
@Override public java.lang.AutoCloseable createInstance() { final class SimpleBGPExtensionProviderContextAutoCloseable extends SimpleBGPExtensionProviderContext implements AutoCloseable { @Override public void close() { for (final BGPExtensionProviderActivator e : getExtensionDependency()) { e.stop(); } } } final SimpleBGPExtensionProviderContextAutoCloseable ret = new SimpleBGPExtensionProviderContextAutoCloseable(); for (final BGPExtensionProviderActivator e : getExtensionDependency()) { e.start(ret); } return ret; } }
@Override protected void encode(final ChannelHandlerContext ctx, final Notification msg, final ByteBuf out) { LOG.trace("Encoding message: {}", msg); this.registry.serializeMessage(msg, out); if (LOG.isTraceEnabled()) { LOG.trace("Encoded message: {}", ByteBufUtil.hexDump(out)); } LOG.debug("Message sent to output: {}", msg); } }
@Override public final PathArgument createRouteKeyPathArgument(final PathArgument routeKey) { final ImmutableMap<QName, Object> keyValues = ImmutableMap.of(routeKeyQName(), PathIdUtil.getObjectKey(routeKey, routeKeyQName())); return new NodeIdentifierWithPredicates(routeQName(), keyValues); }
@Override public java.lang.AutoCloseable createInstance() { final BGPExtensionConsumerContext bgpExtensions = getBgpExtensionsDependency(); return new BGPDispatcherImpl(bgpExtensions.getMessageRegistry(), getBossGroupDependency(), getWorkerGroupDependency()); } }
@Override public void parseAttribute(final ByteBuf buffer, final AttributesBuilder builder, final PeerSpecificParserConstraint constraint) throws BGPDocumentedException { try { final MpReachNlri mpReachNlri = this.reg.parseMpReach(buffer, constraint); final Attributes1 a = new Attributes1Builder().setMpReachNlri(mpReachNlri).build(); builder.addAugmentation(Attributes1.class, a); } catch (final BGPParsingException e) { throw new BGPDocumentedException("Could not parse MP_REACH_NLRI", BGPError.OPT_ATTR_ERROR, e); } }
@Override public void parseAttribute(final ByteBuf buffer, final AttributesBuilder builder, final PeerSpecificParserConstraint constraint) throws BGPDocumentedException { try { final MpUnreachNlri mpUnreachNlri = this.reg.parseMpUnreach(buffer, constraint); final Attributes2 a = new Attributes2Builder().setMpUnreachNlri(mpUnreachNlri).build(); builder.addAugmentation(Attributes2.class, a); } catch (final BGPParsingException e) { throw new BGPDocumentedException("Could not parse MP_UNREACH_NLRI", BGPError.OPT_ATTR_ERROR, e); } }
@Override public void serializeCapability(final CParameters capability, final ByteBuf byteAggregator) { final As4BytesCapability as4 = capability.getAs4BytesCapability(); if (as4 != null) { CapabilityUtil.formatCapability(CODE, putAS4BytesParameterValue(as4), byteAggregator); } }
@Override public void serializeCapability(final CParameters capability, final ByteBuf byteAggregator) { if (capability == null || (capability.getAugmentation(CParameters1.class) == null) || (capability.getAugmentation(CParameters1.class).getRouteRefreshCapability() == null) ) { return; } CapabilityUtil.formatCapability(CODE, Unpooled.EMPTY_BUFFER, byteAggregator); }
@Override public void serializeCapability(final CParameters capability, final ByteBuf byteAggregator) { if (capability.getAugmentation(CParameters1.class) == null || capability.getAugmentation(CParameters1.class).getGracefulRestartCapability() == null) { return; } final GracefulRestartCapability grace = capability.getAugmentation(CParameters1.class).getGracefulRestartCapability(); final ByteBuf bytes = serializeCapability(grace); CapabilityUtil.formatCapability(CODE, bytes, byteAggregator); }