adding mac timeout as a configurable parameter to EVC 78/50278/2
authorShai Haim <shai.haim@hpe.com>
Wed, 4 Jan 2017 08:39:36 +0000 (10:39 +0200)
committerDavid Goldberg <gdavid@hpe.com>
Wed, 11 Jan 2017 10:20:02 +0000 (12:20 +0200)
Change-Id: Ie9ee971b8204ff9a94591098d40233a5b8cda0a2
Signed-off-by: Shai Haim <shai.haim@hpe.com>
legato-api/src/main/yang/mef-services.yang
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcListener.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtUtils.java

index b77ae3ab08e2c321d609fb90b7ad62aa5ed8c129..d362556aacabcb0793472948ddf5a040c1f90afc 100644 (file)
@@ -1600,6 +1600,11 @@ module mef-services {
                             "[MEF6.2] Section 8.2.2 and MEF 22.1: [D2]. " +
                             "[MEF7.3] Section 12.2.2.";
             }
+            leaf mac-timeout {
+                type uint32;
+                description
+                            "EVC: Expiration time (in seconds) of a learned MAC address";
+            }
           }
         }
       }
index 66002adc9a3fc3c43b67544293713842a4ef526e..ee5dcab5a94fd803e9791f24f712729ad2c5cc87 100644 (file)
@@ -191,7 +191,7 @@ public class EvcListener extends UnimgrDataTreeChangeListener<Evc> implements IU
             InstanceIdentifier<Evc> evcId = newDataObject.getRootPath().getRootIdentifier();
 
             synchronized (instanceName.intern()) {
-                NetvirtUtils.createElanInstance(dataBroker, instanceName, isEtree, data.getSegmentationId());
+                NetvirtUtils.createElanInstance(dataBroker, instanceName, isEtree, data.getSegmentationId(), data.getMacTimeout());
 
                 // Create interfaces
                 if (data.getUnis() == null) {
index 1decac41f1eff0eed6dee81e4426695de66ce3d1..3f2fd7a16e98e34f5ba9898e8670c51521eb1193 100644 (file)
@@ -50,7 +50,11 @@ public class NetvirtUtils {
     private static final long DEFAULT_MAC_TIMEOUT = 300;
 
     public static void createElanInstance(DataBroker dataBroker, String instanceName, boolean isEtree, Long segmentationId) {
-        ElanInstanceBuilder einstBuilder = createElanInstance(instanceName, segmentationId);
+        createElanInstance(dataBroker, instanceName, isEtree, segmentationId, DEFAULT_MAC_TIMEOUT);
+    }
+
+    public static void createElanInstance(DataBroker dataBroker, String instanceName, boolean isEtree, Long segmentationId, Long macTimeout) {
+        ElanInstanceBuilder einstBuilder = createElanInstanceBuilder(instanceName, segmentationId, macTimeout);
 
         if (isEtree) {
             EtreeInstance etreeInstance = new EtreeInstanceBuilder().build();
@@ -68,15 +72,21 @@ public class NetvirtUtils {
     }
 
     public static void updateElanInstance(String instanceName, WriteTransaction tx) {
-        ElanInstanceBuilder einstBuilder = createElanInstance(instanceName);
-
-        tx.merge(LogicalDatastoreType.CONFIGURATION, getElanInstanceInstanceIdentifier(instanceName),
-                einstBuilder.build());
+        ElanInstanceBuilder einstBuilder = createElanInstanceBuilder(instanceName);
+        saveElanInstance(instanceName, tx, einstBuilder);
     }
 
     public static void updateElanInstance(String instanceName, WriteTransaction tx, Long segmentationId) {
-        ElanInstanceBuilder einstBuilder = createElanInstance(instanceName, segmentationId);
+        ElanInstanceBuilder einstBuilder = createElanInstanceBuilder(instanceName, segmentationId);
+        saveElanInstance(instanceName, tx, einstBuilder);
+    }
+
+    public static void updateElanInstance(String instanceName, WriteTransaction tx, Long segmentationId, Long macTimeout) {
+        ElanInstanceBuilder einstBuilder = createElanInstanceBuilder(instanceName, segmentationId, macTimeout);
+        saveElanInstance(instanceName, tx, einstBuilder);
+    }
 
+    private static void saveElanInstance(String instanceName, WriteTransaction tx, ElanInstanceBuilder einstBuilder) {
         tx.merge(LogicalDatastoreType.CONFIGURATION, getElanInstanceInstanceIdentifier(instanceName),
                 einstBuilder.build());
     }
@@ -129,18 +139,22 @@ public class NetvirtUtils {
         return interfaceBuilder.build();
     }
 
-    private static ElanInstanceBuilder createElanInstance(String instanceName) {
-        return createElanInstance(instanceName, Long.valueOf(Math.abs((short) instanceName.hashCode())));
+    private static ElanInstanceBuilder createElanInstanceBuilder(String instanceName) {
+        return createElanInstanceBuilder(instanceName, Long.valueOf(Math.abs((short) instanceName.hashCode())));
+    }
+
+    private static ElanInstanceBuilder createElanInstanceBuilder(String instanceName, Long segmentationId) {
+        return createElanInstanceBuilder(instanceName, segmentationId, DEFAULT_MAC_TIMEOUT);
     }
 
-    private static ElanInstanceBuilder createElanInstance(String instanceName, Long segmentationId) {
+    private static ElanInstanceBuilder createElanInstanceBuilder(String instanceName, Long segmentationId, Long macTimeout) {
         if (segmentationId == null) {
             segmentationId = Long.valueOf(Math.abs((short) instanceName.hashCode()));
         }
         ElanInstanceBuilder einstBuilder = new ElanInstanceBuilder();
         einstBuilder.setElanInstanceName(instanceName);
         einstBuilder.setKey(new ElanInstanceKey(instanceName));
-        einstBuilder.setMacTimeout(DEFAULT_MAC_TIMEOUT);
+        einstBuilder.setMacTimeout(macTimeout);
         einstBuilder.setSegmentationId(segmentationId);
         einstBuilder.setSegmentType(SegmentTypeVxlan.class);
         return einstBuilder;