@Override public CParameters parseCapability(final ByteBuf buffer) throws BGPDocumentedException, BGPParsingException { final Optional<BgpTableType> parsedAfiSafiOptional = MultiprotocolCapabilitiesUtil.parseMPAfiSafi(buffer, this.afiReg, this.safiReg); if (!parsedAfiSafiOptional.isPresent()) { return null; } return new CParametersBuilder().addAugmentation(CParameters1.class,new CParameters1Builder().setMultiprotocolCapability( new MultiprotocolCapabilityBuilder(parsedAfiSafiOptional.get()).build()).build()).build(); }
private static List<BgpParameters> getBgpParameters(final Neighbor neighbor, final RIB rib, final BGPOpenConfigMappingService mappingService) { final List<BgpParameters> tlvs = new ArrayList<>(); final List<OptionalCapabilities> caps = new ArrayList<>(); caps.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().setAs4BytesCapability( new As4BytesCapabilityBuilder().setAsNumber(rib.getLocalAs()).build()).build()).build()); caps.add(new OptionalCapabilitiesBuilder().setCParameters(BgpExtendedMessageUtil.EXTENDED_MESSAGE_CAPABILITY).build()); caps.add(new OptionalCapabilitiesBuilder().setCParameters(MultiprotocolCapabilitiesUtil.RR_CAPABILITY).build()); final List<AddressFamilies> addPathCapability = mappingService.toAddPathCapability(neighbor.getAfiSafis().getAfiSafi()); if (!addPathCapability.isEmpty()) { caps.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder().setAddPathCapability( new AddPathCapabilityBuilder().setAddressFamilies(addPathCapability).build()).build()).build()).build()); } final List<BgpTableType> tableTypes = mappingService.toTableTypes(neighbor.getAfiSafis().getAfiSafi()); for (final BgpTableType tableType : tableTypes) { if (!rib.getLocalTables().contains(tableType)) { LOG.info("RIB instance does not list {} in its local tables. Incoming data will be dropped.", tableType); } caps.add(new OptionalCapabilitiesBuilder().setCParameters( new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder().setMultiprotocolCapability( new MultiprotocolCapabilityBuilder(tableType).build()).build()).build()).build()); } tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(caps).build()); return tlvs; }
private static OptionalCapabilities createAddPathCapability() { return new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder() .setAddPathCapability(new AddPathCapabilityBuilder().setAddressFamilies(Lists.newArrayList(new AddressFamiliesBuilder() .setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).setSendReceive(SendReceive.Both).build() )).build()).build()).build()).build(); }
return new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder() .setGracefulRestartCapability(cb.build()).build()).build();
@Override public CParameters parseCapability(final ByteBuf buffer) throws BGPDocumentedException, BGPParsingException { final List<AddressFamilies> families = new ArrayList<>(); while (buffer.isReadable()) { final int afiVal = buffer.readUnsignedShort(); final Class<? extends AddressFamily> afi = this.afiReg.classForFamily(afiVal); if (afi == null) { throw new BGPParsingException("Address Family Identifier: '" + afiVal + "' not supported."); } final int safiVal = buffer.readUnsignedByte(); final Class<? extends SubsequentAddressFamily> safi = this.safiReg.classForFamily(safiVal); if (safi == null) { throw new BGPParsingException("Subsequent Address Family Identifier: '" + safiVal + "' not supported."); } final SendReceive sendReceive = SendReceive.forValue(buffer.readUnsignedByte()); if (sendReceive != null) { families.add(new AddressFamiliesBuilder().setAfi(afi).setSafi(safi).setSendReceive(sendReceive).build()); } } return new CParametersBuilder().addAugmentation(CParameters1.class,new CParameters1Builder().setAddPathCapability( new AddPathCapabilityBuilder().setAddressFamilies(families).build()).build()).build(); }
private static OptionalCapabilities createMPCapability(final Class<? extends AddressFamily> afi, final Class<? extends SubsequentAddressFamily> safi) { return new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder() .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder().setAfi(afi).setSafi(safi).build()).build()).build()).build(); }