BGP flow spec configuration system test issue fix.
Change-Id: Ia912fdb15f584b477ead748aed87e3c4fa003d29
diff --git a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java
index dac1ee8..8bb05df 100755
--- a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java
+++ b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java
@@ -44,6 +44,29 @@
IP_AS_CONFIGURED
}
+ enum FlowSpec {
+
+ /**
+ * Signifies that peer support IPV4 flow specification.
+ */
+ IPV4,
+
+ /**
+ * Signifies that peer support VPNV4 flow specification.
+ */
+ VPNV4,
+
+ /**
+ * Signifies that peer support IPV4 and VPNV4 flow specification.
+ */
+ IPV4_VPNV4,
+
+ /**
+ * Signifies that peer flow specification capability disabled.
+ */
+ NONE
+ }
+
/**
* Returns the status of the configuration based on this state certain operations like connection is handled.
*
@@ -294,4 +317,18 @@
* @return state information
*/
BgpPeerCfg.State getPeerConnState(String routerid);
+
+ /**
+ * Gets the flow specification capability.
+ *
+ * @return flow specification capability
+ */
+ FlowSpec flowSpecCapability();
+
+ /**
+ * Sets the flow specification capability.
+ *
+ * @param flowSpec flow specification capability
+ */
+ void setFlowSpecCapability(FlowSpec flowSpec);
}
diff --git a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java
index e519404..2fb970f 100755
--- a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java
+++ b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java
@@ -58,24 +58,6 @@
INVALID
}
- enum FlowSpec {
-
- /**
- * Signifies that peer support IPV4 flow specification.
- */
- IPV4,
-
- /**
- * Signifies that peer support VPNV4 flow specification.
- */
- VPNV4,
-
- /**
- * Signifies that peer flow specification support disabled.
- */
- NONE
- }
-
/**
* Returns the connection State information of the peer.
*
@@ -195,18 +177,4 @@
* @return peer connect instance
*/
BgpConnectPeer connectPeer();
-
- /**
- * Gets the flow specification capability.
- *
- * @return flow specification status
- */
- public FlowSpec flowSpecStatus();
-
- /**
- * sets the flow specification capability.
- *
- * @param flowSpecStatus flow specification status
- */
- public void setFlowSpecStatus(FlowSpec flowSpecStatus);
}
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java
index d2c8098..af229a5 100755
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java
@@ -665,14 +665,18 @@
*/
private void sendHandshakeOpenMessage() throws IOException, BgpParseException {
int bgpId;
+ BgpCfg.FlowSpec flowSpec = bgpconfig.flowSpecCapability();
boolean flowSpecStatus = false;
boolean vpnFlowSpecStatus = false;
bgpId = Ip4Address.valueOf(bgpconfig.getRouterId()).toInt();
- BgpPeerConfig peerConfig = (BgpPeerConfig) bgpconfig.displayPeers(peerAddr);
- if (peerConfig.flowSpecStatus() == BgpPeerCfg.FlowSpec.IPV4) {
+
+ if (flowSpec == BgpCfg.FlowSpec.IPV4) {
flowSpecStatus = true;
- } else if (peerConfig.flowSpecStatus() == BgpPeerCfg.FlowSpec.VPNV4) {
+ } else if (flowSpec == BgpCfg.FlowSpec.VPNV4) {
+ vpnFlowSpecStatus = true;
+ } else if (flowSpec == BgpCfg.FlowSpec.IPV4_VPNV4) {
+ flowSpecStatus = true;
vpnFlowSpecStatus = true;
}
@@ -792,9 +796,9 @@
boolean isMultiProtocolLsCapability = false;
boolean isMultiProtocolFlowSpecCapability = false;
boolean isMultiProtocolVpnFlowSpecCapability = false;
+ BgpCfg.FlowSpec flowSpec = h.bgpconfig.flowSpecCapability();
- BgpPeerConfig peerConfig = (BgpPeerConfig) h.bgpconfig.displayPeers(peerAddr);
- if (peerConfig.flowSpecStatus() != BgpPeerCfg.FlowSpec.NONE) {
+ if (flowSpec != BgpCfg.FlowSpec.NONE) {
isFlowSpecCapabilityCfg = true;
}
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java
index 1c846eb..5b367a7 100755
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java
@@ -51,7 +51,7 @@
private boolean largeAs = false;
private int maxConnRetryTime;
private int maxConnRetryCount;
-
+ private FlowSpec flowSpec = FlowSpec.NONE;
private Ip4Address routerId = null;
private TreeMap<String, BgpPeerCfg> bgpPeerTree = new TreeMap<>();
private BgpConnectPeer connectPeer;
@@ -119,6 +119,16 @@
}
@Override
+ public FlowSpec flowSpecCapability() {
+ return this.flowSpec;
+ }
+
+ @Override
+ public void setFlowSpecCapability(FlowSpec flowSpec) {
+ this.flowSpec = flowSpec;
+ }
+
+ @Override
public String getRouterId() {
if (this.routerId != null) {
return this.routerId.toString();
@@ -222,7 +232,7 @@
if (disconnPeer != null) {
// TODO: send notification peer deconfigured
disconnPeer.disconnectPeer();
- } else {
+ } else if (lspeer.connectPeer() != null) {
lspeer.connectPeer().disconnectPeer();
}
lspeer.setState(BgpPeerCfg.State.IDLE);
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java
index 65cd485..a8eaee3 100755
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java
@@ -30,7 +30,6 @@
private State state;
private boolean selfInitiated;
private BgpConnectPeer connectPeer;
- private FlowSpec flowSpecStatus = FlowSpec.NONE;
/**
* Constructor to initialize the values.
@@ -119,14 +118,4 @@
public void setConnectPeer(BgpConnectPeer connectPeer) {
this.connectPeer = connectPeer;
}
-
- @Override
- public FlowSpec flowSpecStatus() {
- return flowSpecStatus;
- }
-
- @Override
- public void setFlowSpecStatus(FlowSpec flowSpecStatus) {
- this.flowSpecStatus = flowSpecStatus;
- }
}
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 ba205bc..8853e04 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
@@ -47,6 +47,7 @@
public static final String LS_CAPABILITY = "lsCapability";
public static final String HOLD_TIME = "holdTime";
public static final String LARGE_AS_CAPABILITY = "largeAsCapability";
+ public static final String FLOW_SPEC_CAPABILITY = "flowSpecCapability";
public static final String BGP_PEER = "bgpPeer";
public static final String PEER_IP = "peerIp";
@@ -67,10 +68,11 @@
bgpConfig = bgpController.getConfig();
fields = hasOnlyFields(ROUTER_ID, LOCAL_AS, MAX_SESSION, LS_CAPABILITY,
- HOLD_TIME, LARGE_AS_CAPABILITY, BGP_PEER) &&
+ HOLD_TIME, LARGE_AS_CAPABILITY, FLOW_SPEC_CAPABILITY, BGP_PEER) &&
isIpAddress(ROUTER_ID, MANDATORY) && isNumber(LOCAL_AS, MANDATORY) &&
isNumber(MAX_SESSION, OPTIONAL, 20) && isNumber(HOLD_TIME, OPTIONAL, 180) &&
- isBoolean(LS_CAPABILITY, OPTIONAL) && isBoolean(LARGE_AS_CAPABILITY, OPTIONAL);
+ isBoolean(LS_CAPABILITY, OPTIONAL) && isBoolean(LARGE_AS_CAPABILITY, OPTIONAL) &&
+ isString(FLOW_SPEC_CAPABILITY, OPTIONAL);
if (!fields) {
return fields;
@@ -125,6 +127,15 @@
}
/**
+ * Returns flow specification capability support from the configuration.
+ *
+ * @return flow specification capability
+ */
+ public String flowSpecCapability() {
+ return get(FLOW_SPEC_CAPABILITY, null);
+ }
+
+ /**
* Returns holdTime of the local node from the configuration.
*
* @return holdTime
@@ -134,6 +145,22 @@
}
/**
+ * Validates the flow specification capability.
+ *
+ * @return true if valid else false
+ */
+ public boolean validateFlowSpec() {
+ if (flowSpecCapability() != null) {
+ String flowSpec = flowSpecCapability();
+ if ((flowSpec.equals("IPV4")) || (flowSpec.equals("VPNV4")) || (flowSpec.equals("IPV4_VPNV4"))) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
* Validates the Bgp local and peer configuration.
*
* @return true if valid else false
@@ -152,6 +179,9 @@
return false;
}
+ if (!validateFlowSpec()) {
+ return false;
+ }
return true;
}
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 2ceb4c7..7629da7 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
@@ -128,6 +128,16 @@
bgpConfig.setMaxSession(config.maxSession());
bgpConfig.setLargeASCapability(config.largeAsCapability());
+ if (config.flowSpecCapability().equals("IPV4")) {
+ bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.IPV4);
+ } else if (config.flowSpecCapability().equals("VPNV4")) {
+ bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.VPNV4);
+ } else if (config.flowSpecCapability().equals("IPV4_VPNV4")) {
+ bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.IPV4_VPNV4);
+ } else {
+ bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.NONE);
+ }
+
nodes = config.bgpPeer();
for (int i = 0; i < nodes.size(); i++) {
String connectMode = nodes.get(i).connectMode();
@@ -163,6 +173,16 @@
bgpConfig.setHoldTime(config.holdTime());
bgpConfig.setMaxSession(config.maxSession());
bgpConfig.setLargeASCapability(config.largeAsCapability());
+
+ if (config.flowSpecCapability().equals("IPV4")) {
+ bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.IPV4);
+ } else if (config.flowSpecCapability().equals("VPNV4")) {
+ bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.VPNV4);
+ } else if (config.flowSpecCapability().equals("IPV4_VPNV4")) {
+ bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.IPV4_VPNV4);
+ } else {
+ bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.NONE);
+ }
} else {
log.info(" Self configuration cannot be modified as there is existing connections ");
}