@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 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(); }