CORD-1888 Use DAD to probe if interface MAC is not configured
Change-Id: I67bfdbc355e331903b4b7310e4fa9a79f962aa5c
diff --git a/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java b/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java
index 11a8425..18169bb 100644
--- a/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java
+++ b/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java
@@ -15,6 +15,9 @@
*/
package org.onosproject.segmentrouting.config;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.SetMultimap;
@@ -136,6 +139,7 @@
ConnectPoint connectPoint = networkInterface.connectPoint();
DeviceId dpid = connectPoint.deviceId();
PortNumber port = connectPoint.port();
+ MacAddress mac = networkInterface.mac();
SegmentRouterInfo info = deviceConfigMap.get(dpid);
// skip if there is no corresponding device for this ConenctPoint
@@ -158,6 +162,16 @@
info.subnets.put(port, interfaceAddress.subnetAddress());
}
});
+
+ // Override interface mac with router mac
+ if (!mac.equals(info.mac)) {
+ ArrayNode array = (ArrayNode) config.node();
+ for (JsonNode intfNode : array) {
+ ObjectNode objNode = (ObjectNode) intfNode;
+ objNode.put(InterfaceConfig.MAC, info.mac.toString());
+ }
+ srManager.cfgService.applyConfig(connectPoint, InterfaceConfig.class, array);
+ }
}
});
// We register the connect point with the NRS.