package org.opendaylight.protocol.bgp.openconfig.impl;
import static org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil.APPLICATION_PEER_GROUP_NAME;
+import static org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil.toPeerType;
import com.google.common.base.Optional;
import java.math.BigDecimal;
import org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil;
import org.opendaylight.protocol.bgp.openconfig.spi.BGPOpenConfigMappingService;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighborAddPathsConfig;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base.AfiSafisBuilder;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base.ConfigBuilder;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.RouteReflectorBuilder;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.NeighborsBuilder;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.PeerGroups;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.PeerGroupsBuilder;
-import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.PeerType;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.CommunityType;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.RrClusterIdType;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.ProtocolBuilder;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.ProtocolKey;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.policy.types.rev151009.BGP;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
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.SendReceive;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.mp.capabilities.add.path.capability.AddressFamiliesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.AfiSafi1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.AfiSafi2;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config2;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config2Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.GlobalConfigAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.GlobalConfigAugmentationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Protocol1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Protocol1Builder;
+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.PeerRole;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.RibId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.SimpleRoutingPolicy;
private static final PeerGroup APP_PEER_GROUP = new PeerGroupBuilder().setPeerGroupName(APPLICATION_PEER_GROUP_NAME)
.setKey(new PeerGroupKey(APPLICATION_PEER_GROUP_NAME)).build();
private static final PeerGroups PEER_GROUPS = new PeerGroupsBuilder().setPeerGroup(Collections.singletonList(APP_PEER_GROUP)).build();
+ private static final BigDecimal DEFAULT_KEEP_ALIVE = BigDecimal.valueOf(30);
+ private static final BigDecimal DEFAULT_MINIMUM_ADV_INTERVAL = BigDecimal.valueOf(30);
@Override
public List<BgpTableType> toTableTypes(final List<AfiSafi> afiSafis) {
public Map<BgpTableType, PathSelectionMode> toPathSelectionMode(final List<AfiSafi> afiSafis) {
final Map<BgpTableType, PathSelectionMode> pathSelectionModes = new HashMap<>();
for (final AfiSafi afiSafi : afiSafis) {
- final AfiSafi1 afiSafi1 = afiSafi.getAugmentation(AfiSafi1.class);
+ final BgpNeighborAddPathsConfig afiSafi2 = afiSafi.getAugmentation(AfiSafi2.class);
final Optional<BgpTableType> bgpTableType = OpenConfigUtil.toBgpTableType(afiSafi.getAfiSafiName());
- if (afiSafi1 != null && bgpTableType.isPresent()) {
- final Short sendMax = afiSafi1.getSendMax();
+ if (afiSafi2 != null && bgpTableType.isPresent()) {
+ final Short sendMax = afiSafi2.getSendMax();
final PathSelectionMode selectionMode;
if (sendMax > 1) {
selectionMode = new AddPathBestNPathSelection(sendMax.longValue());
public List<AddressFamilies> toAddPathCapability(final List<AfiSafi> afiSafis) {
final List<AddressFamilies> addPathCapability = new ArrayList<>();
for (final AfiSafi afiSafi : afiSafis) {
- final AfiSafi2 afiSafi2 = afiSafi.getAugmentation(AfiSafi2.class);
+ final BgpNeighborAddPathsConfig afiSafi1 = afiSafi.getAugmentation(AfiSafi1.class);
final Optional<BgpTableType> bgpTableType = OpenConfigUtil.toBgpTableType(afiSafi.getAfiSafiName());
- if (afiSafi2 != null && bgpTableType.isPresent()) {
+ if (afiSafi1 != null && bgpTableType.isPresent()) {
final AddressFamiliesBuilder builder = new AddressFamiliesBuilder(bgpTableType.get());
- builder.setSendReceive(toSendReceiveMode(afiSafi2));
+ builder.setSendReceive(toSendReceiveMode(afiSafi1));
addPathCapability.add(builder.build());
}
}
return addPathCapability;
}
- private static SendReceive toSendReceiveMode(final AfiSafi2 addPath) {
+ private static SendReceive toSendReceiveMode(final BgpNeighborAddPathsConfig addPath) {
if (addPath.isReceive() && addPath.getSendMax() != null) {
return SendReceive.Both;
}
final BgpBuilder bgpBuilder = new BgpBuilder();
bgpBuilder.setNeighbors(new NeighborsBuilder().build());
bgpBuilder.setPeerGroups(PEER_GROUPS);
+ final ConfigBuilder configBuilder = new ConfigBuilder();
+ configBuilder.setAs(localAs);
+ configBuilder.setRouterId(bgpId);
+ if (clusterIdentifier != null) {
+ configBuilder.addAugmentation(GlobalConfigAugmentation.class,
+ new GlobalConfigAugmentationBuilder().setRouteReflectorClusterId(new RrClusterIdType(clusterIdentifier)).build());
+ }
final Global global = new GlobalBuilder().setAfiSafis(new AfiSafisBuilder().setAfiSafi(OpenConfigUtil.toAfiSafis(localTables,
(afiSafi, tableType) -> OpenConfigUtil.toGlobalAfiSafiAddPath(afiSafi, tableType, pathSelectionStrategies))).build())
- .setConfig(new ConfigBuilder().setAs(localAs).setRouterId(bgpId).build()).build();
+ .setConfig(configBuilder.build()).build();
bgpBuilder.setGlobal(global);
return bgpBuilder.build();
}
neighborBuilder.setTransport(new TransportBuilder().setConfig(
new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport.ConfigBuilder()
.setPassiveMode(!isActive)
+ .setMtuDiscovery(Boolean.FALSE)
+ .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config1.class,
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config1Builder()
+ .setRemotePort(portNumber).build())
.build()).build());
neighborBuilder.setConfig(
new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.ConfigBuilder()
.setAuthPassword(password != null ? password.getValue() : null)
.setPeerAs(remoteAs)
- .setPeerType(toPeerTye(peerRole))
+ .setPeerType(toPeerType(peerRole))
+ .setSendCommunity(CommunityType.NONE)
+ .setRouteFlapDamping(Boolean.FALSE)
.build());
neighborBuilder.setTimers(new TimersBuilder().setConfig(
new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.timers.ConfigBuilder()
.setHoldTime(BigDecimal.valueOf(holdTimer))
.setConnectRetry(BigDecimal.valueOf(retryTimer))
+ .setKeepaliveInterval(DEFAULT_KEEP_ALIVE)
+ .setMinimumAdvertisementInterval(DEFAULT_MINIMUM_ADV_INTERVAL)
.build()).build());
neighborBuilder.setRouteReflector(new RouteReflectorBuilder().setConfig(
new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.route.reflector.ConfigBuilder()
return neighborBuilder.build();
}
- private static PeerType toPeerTye(final PeerRole peerRole) {
- switch (peerRole) {
- case Ibgp:
- case RrClient:
- return PeerType.INTERNAL;
- case Ebgp:
- return PeerType.EXTERNAL;
- case Internal:
- break;
- default:
- break;
- }
- return null;
+ @Override
+ public Neighbor fromApplicationPeer(final ApplicationRibId applicationRibId, final BgpId bgpId) {
+ final NeighborBuilder neighborBuilder = new NeighborBuilder();
+ neighborBuilder.setNeighborAddress(new IpAddress(new Ipv4Address(bgpId.getValue())));
+ neighborBuilder.setKey(new NeighborKey(neighborBuilder.getNeighborAddress()));
+ neighborBuilder.setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.ConfigBuilder()
+ .setDescription(applicationRibId.getValue())
+ .addAugmentation(Config2.class, new Config2Builder().setPeerGroup(APPLICATION_PEER_GROUP_NAME).build())
+ .build());
+
+ return neighborBuilder.build();
}
}