Support to learn external gateway MAC at controller
Change-Id: I72c13133708de1ac86e26160397233518489d46b
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
index 7be1e9a5..87e1f1d 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
@@ -60,6 +60,7 @@
private final IpAddress managementIp;
private final IpAddress dataIp;
private final K8sNodeState state;
+ private final MacAddress extGatewayMac;
private static final String NOT_NULL_MSG = "Node % cannot be null";
@@ -75,10 +76,12 @@
* @param managementIp management IP address
* @param dataIp data IP address
* @param state node state
+ * @param extGatewayMac external gateway MAC address
*/
protected DefaultK8sNode(String hostname, Type type, DeviceId intgBridge,
DeviceId extBridge, IpAddress managementIp,
- IpAddress dataIp, K8sNodeState state) {
+ IpAddress dataIp, K8sNodeState state,
+ MacAddress extGatewayMac) {
this.hostname = hostname;
this.type = type;
this.intgBridge = intgBridge;
@@ -86,6 +89,7 @@
this.managementIp = managementIp;
this.dataIp = dataIp;
this.state = state;
+ this.extGatewayMac = extGatewayMac;
}
@Override
@@ -123,6 +127,7 @@
.managementIp(managementIp)
.dataIp(dataIp)
.state(state)
+ .extGatewayMac(extGatewayMac)
.build();
}
@@ -136,6 +141,7 @@
.managementIp(managementIp)
.dataIp(dataIp)
.state(state)
+ .extGatewayMac(extGatewayMac)
.build();
}
@@ -163,10 +169,25 @@
.managementIp(managementIp)
.dataIp(dataIp)
.state(newState)
+ .extGatewayMac(extGatewayMac)
.build();
}
@Override
+ public K8sNode updateExtGatewayMac(MacAddress newMac) {
+ return new Builder()
+ .hostname(hostname)
+ .type(type)
+ .intgBridge(intgBridge)
+ .managementIp(managementIp)
+ .dataIp(dataIp)
+ .state(state)
+ .extGatewayMac(newMac)
+ .build();
+
+ }
+
+ @Override
public PortNumber grePortNum() {
return tunnelPortNum(GRE_TUNNEL);
}
@@ -245,15 +266,7 @@
@Override
public MacAddress extGatewayMac() {
- OvsdbClientService client = getOvsClient();
-
- if (client == null) {
- return null;
- }
-
- Interface iface = getOvsClient().getInterface(EXTERNAL_BRIDGE);
- OvsdbMap data = (OvsdbMap) iface.getExternalIdsColumn().data();
- return MacAddress.valueOf((String) data.map().get(EXT_GW_MAC));
+ return extGatewayMac;
}
@Override
@@ -308,7 +321,7 @@
@Override
public int hashCode() {
return Objects.hash(hostname, type, intgBridge, extBridge,
- managementIp, dataIp, state);
+ managementIp, dataIp, state, extGatewayMac);
}
@Override
@@ -321,6 +334,7 @@
.add("managementIp", managementIp)
.add("dataIp", dataIp)
.add("state", state)
+ .add("extGatewayMac", extGatewayMac)
.toString();
}
@@ -376,7 +390,8 @@
.extBridge(node.extBridge())
.managementIp(node.managementIp())
.dataIp(node.dataIp())
- .state(node.state());
+ .state(node.state())
+ .extGatewayMac(node.extGatewayMac());
}
public static final class Builder implements K8sNode.Builder {
@@ -389,6 +404,7 @@
private IpAddress dataIp;
private K8sNodeState state;
private K8sApiConfig apiConfig;
+ private MacAddress extGatewayMac;
// private constructor not intended to use from external
private Builder() {
@@ -407,7 +423,8 @@
extBridge,
managementIp,
dataIp,
- state);
+ state,
+ extGatewayMac);
}
@Override
@@ -451,5 +468,11 @@
this.state = state;
return this;
}
+
+ @Override
+ public Builder extGatewayMac(MacAddress extGatewayMac) {
+ this.extGatewayMac = extGatewayMac;
+ return this;
+ }
}
}
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
index 30449ff..065f2dd 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
@@ -121,6 +121,14 @@
K8sNode updateState(K8sNodeState newState);
/**
+ * Returns new kubernetes node instance with given external gateway MAC address.
+ *
+ * @param macAddress updated MAC address
+ * @return updated kubernetes node
+ */
+ K8sNode updateExtGatewayMac(MacAddress macAddress);
+
+ /**
* Returns the GRE tunnel port number.
*
* @return GRE port number; null if the GRE tunnel port does not exist
@@ -271,5 +279,13 @@
* @return kubernetes node builder
*/
Builder state(K8sNodeState state);
+
+ /**
+ * Returns kubernetes node builder with supplied external gateway MAC.
+ *
+ * @param extGatewayMac external gateway MAC address
+ * @return kubernetes node builder
+ */
+ Builder extGatewayMac(MacAddress extGatewayMac);
}
}