From 079d8556f420bf307db38d77769e44b21eee72ab Mon Sep 17 00:00:00 2001 From: Shai Haim Date: Wed, 4 Jan 2017 10:39:36 +0200 Subject: [PATCH] adding mac timeout as a configurable parameter to EVC Change-Id: Ie9ee971b8204ff9a94591098d40233a5b8cda0a2 Signed-off-by: Shai Haim --- legato-api/src/main/yang/mef-services.yang | 5 +++ .../unimgr/mef/netvirt/EvcListener.java | 2 +- .../unimgr/mef/netvirt/NetvirtUtils.java | 34 +++++++++++++------ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/legato-api/src/main/yang/mef-services.yang b/legato-api/src/main/yang/mef-services.yang index b77ae3ab..d362556a 100644 --- a/legato-api/src/main/yang/mef-services.yang +++ b/legato-api/src/main/yang/mef-services.yang @@ -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"; + } } } } diff --git a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcListener.java b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcListener.java index 66002adc..ee5dcab5 100644 --- a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcListener.java +++ b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcListener.java @@ -191,7 +191,7 @@ public class EvcListener extends UnimgrDataTreeChangeListener implements IU InstanceIdentifier 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) { diff --git a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtUtils.java b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtUtils.java index 1decac41..3f2fd7a1 100644 --- a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtUtils.java +++ b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtUtils.java @@ -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; -- 2.36.6