diff --git a/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpAppConfig.java b/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpAppConfig.java index 4bf916ce7e..4bd6e70176 100644 --- a/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpAppConfig.java +++ b/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpAppConfig.java @@ -52,6 +52,9 @@ public class BgpAppConfig extends Config { public static final String PEER_IP = "peerIp"; public static final String REMOTE_AS = "remoteAs"; public static final String PEER_HOLD_TIME = "peerHoldTime"; + public static final String PEER_CONNECT_MODE = "connectMode"; + public static final String PEER_CONNECT_PASSIVE = "passive"; + public static final String PEER_CONNECT_ACTIVE = "active"; static final int MAX_SHORT_AS_NUMBER = 65535; static final long MAX_LONG_AS_NUMBER = 4294967295L; @@ -229,12 +232,15 @@ public class BgpAppConfig extends Config { */ public boolean validateBgpPeers() { List nodes; + String connectMode; nodes = bgpPeer(); for (int i = 0; i < nodes.size(); i++) { + connectMode = nodes.get(i).connectMode(); if ((IpAddress.valueOf(nodes.get(i).hostname()) == null) || !validateRemoteAs(nodes.get(i).asNumber()) || - !validatePeerHoldTime(nodes.get(i).holdTime())) { + !validatePeerHoldTime(nodes.get(i).holdTime()) || + !(connectMode.equals(PEER_CONNECT_ACTIVE) || connectMode.equals(PEER_CONNECT_PASSIVE))) { return false; } } @@ -258,7 +264,8 @@ public class BgpAppConfig extends Config { jsonNodes.forEach(jsonNode -> nodes.add(new BgpPeerConfig( jsonNode.path(PEER_IP).asText(), jsonNode.path(REMOTE_AS).asInt(), - jsonNode.path(PEER_HOLD_TIME).asInt()))); + jsonNode.path(PEER_HOLD_TIME).asInt(), + jsonNode.path(PEER_CONNECT_MODE).asText()))); return nodes; } @@ -271,11 +278,13 @@ public class BgpAppConfig extends Config { private final String hostname; private final int asNumber; private final short holdTime; + private final String connectMode; - public BgpPeerConfig(String hostname, int asNumber, int holdTime) { + public BgpPeerConfig(String hostname, int asNumber, int holdTime, String connectMode) { this.hostname = checkNotNull(hostname); this.asNumber = asNumber; this.holdTime = (short) holdTime; + this.connectMode = connectMode; } /** @@ -304,5 +313,14 @@ public class BgpAppConfig extends Config { public short holdTime() { return this.holdTime; } + + /** + * Returns connection mode for the peer node. + * + * @return active or passive connection + */ + public String connectMode() { + return this.connectMode; + } } } diff --git a/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpCfgProvider.java b/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpCfgProvider.java index 523a38b8d5..d79c4b87cd 100755 --- a/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpCfgProvider.java +++ b/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpCfgProvider.java @@ -20,7 +20,6 @@ import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Deactivate; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.ReferenceCardinality; -import org.apache.felix.scr.annotations.Service; import org.onosproject.bgp.controller.BgpCfg; import org.onosproject.core.ApplicationId; @@ -45,7 +44,6 @@ import static org.slf4j.LoggerFactory.getLogger; * BGP config provider to validate and populate the configuration. */ @Component(immediate = true) -@Service public class BgpCfgProvider extends AbstractProvider { private static final Logger log = getLogger(BgpCfgProvider.class); @@ -127,7 +125,11 @@ public class BgpCfgProvider extends AbstractProvider { nodes = config.bgpPeer(); for (int i = 0; i < nodes.size(); i++) { + String connectMode = nodes.get(i).connectMode(); bgpConfig.addPeer(nodes.get(i).hostname(), nodes.get(i).asNumber(), nodes.get(i).holdTime()); + if (connectMode.equals(BgpAppConfig.PEER_CONNECT_ACTIVE)) { + bgpConfig.connectPeer(nodes.get(i).hostname()); + } } }