- };
- } else {
- return peerCloseable;
- }
- }
-
- private interface CloseableNoEx extends AutoCloseable {
- @Override
- void close();
- }
-
- private AsNumber getAsOrDefault(final RIB r) {
- // Remote AS number defaults to our local AS
- final AsNumber remoteAs;
- if (getRemoteAs() != null) {
- remoteAs = new AsNumber(getRemoteAs());
- } else {
- remoteAs = r.getLocalAs();
- }
- return remoteAs;
- }
-
- private List<BgpParameters> getTlvs(final RIB r) {
- final List<BgpParameters> tlvs = new ArrayList<>();
- final List<OptionalCapabilities> caps = new ArrayList<>();
- 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());
-
- if (getRouteRefresh()) {
- caps.add(new OptionalCapabilitiesBuilder().setCParameters(MultiprotocolCapabilitiesUtil.RR_CAPABILITY).build());
- }
-
- if (!getAddPathDependency().isEmpty()) {
- final List<AddressFamilies> addPathFamilies = filterAddPathDependency(getAddPathDependency());
- caps.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class,
- new CParameters1Builder().setAddPathCapability(new AddPathCapabilityBuilder().setAddressFamilies(addPathFamilies).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 CParametersBuilder().addAugmentation(CParameters1.class,
- new CParameters1Builder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder(t).build()).build()).build()).build());
- }
- tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(caps).build());
- return tlvs;
- }
-
- private List<AddressFamilies> filterAddPathDependency(final List<AddressFamilies> addPathDependency) {
- final Map<BgpTableType, AddressFamilies> filteredFamilies = new HashMap<BgpTableType, AddressFamilies>();
- for (final AddressFamilies family : addPathDependency) {
- final BgpTableType key = new BgpTableTypeImpl(family.getAfi(), family.getSafi());
- if (!filteredFamilies.containsKey(key)) {
- filteredFamilies.put(key, family);
- } else {
- LOG.info("Ignoring Add-path dependency {}", family);