From: Lorand Jakab Date: Tue, 19 May 2015 07:59:39 +0000 (+0300) Subject: Bug 3112: Add SB registrations to MD-SAL datastore X-Git-Tag: release/lithium~22 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=079227f80368ce7901f5b171e197c13603fd6763;hp=06c234704180525f38ae2de0b42f4c7da90295c5;p=lispflowmapping.git Bug 3112: Add SB registrations to MD-SAL datastore Change-Id: I0dc44dd96a43fe5a104908192d7c7022d8889ffd Signed-off-by: Lorand Jakab --- diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/LispMappingService.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/LispMappingService.java index b83169c28..7305a610e 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/LispMappingService.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/LispMappingService.java @@ -8,6 +8,8 @@ package org.opendaylight.lispflowmapping.implementation; +import java.util.List; + import org.apache.commons.lang3.tuple.MutablePair; import org.apache.commons.lang3.tuple.Pair; import org.eclipse.osgi.framework.console.CommandInterpreter; @@ -26,6 +28,7 @@ import org.opendaylight.lispflowmapping.implementation.dao.MappingServiceNoMaskK import org.opendaylight.lispflowmapping.implementation.lisp.MapResolver; import org.opendaylight.lispflowmapping.implementation.lisp.MapServer; import org.opendaylight.lispflowmapping.implementation.mdsal.AuthenticationKeyDataListener; +import org.opendaylight.lispflowmapping.implementation.mdsal.DataStoreBackEnd; import org.opendaylight.lispflowmapping.implementation.mdsal.MappingDataListener; import org.opendaylight.lispflowmapping.implementation.serializer.LispMessage; import org.opendaylight.lispflowmapping.implementation.util.LispAFIConvertor; @@ -56,6 +59,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.maprequestmessage.MapRequestBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.transportaddress.TransportAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.transportaddress.TransportAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.db.instance.Mapping; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; @@ -86,6 +90,7 @@ public class LispMappingService implements CommandProvider, IFlowMapping, IFlowM private ProviderContext session; + private DataStoreBackEnd dsbe; private NotificationService notificationService; private static LispMappingService lfmService = null; @@ -315,6 +320,7 @@ public class LispMappingService implements CommandProvider, IFlowMapping, IFlowM public void onSessionInitiated(ProviderContext session) { LOG.info("Lisp Consumer session initialized!"); notificationService = session.getSALService(NotificationService.class); + dsbe = new DataStoreBackEnd(session.getSALService(DataBroker.class)); registerNotificationListener(AddMapping.class, new MapRegisterNotificationHandler()); registerNotificationListener(RequestMapping.class, new MapRequestNotificationHandler()); registerDataListeners(session.getSALService(DataBroker.class)); @@ -352,6 +358,10 @@ public class LispMappingService implements CommandProvider, IFlowMapping, IFlowM LOG.warn("got null map notify"); } + List mappings = LispNotificationHelper.getMapping(mapRegisterNotification); + for (Mapping mapping : mappings) { + dsbe.updateMapping(mapping); + } } } diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/DataStoreBackEnd.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/DataStoreBackEnd.java index 5e0aaad3e..4f68d4129 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/DataStoreBackEnd.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/DataStoreBackEnd.java @@ -56,7 +56,7 @@ public class DataStoreBackEnd { LispAFIConvertor.toString(mapping.getLispAddressContainer()), mapping.getMaskLength()); InstanceIdentifier path = InstanceIdentifierUtil - .createMappingIid(mapping.getLispAddressContainer()); + .createMappingIid(mapping.getLispAddressContainer(), mapping.getOrigin()); WriteTransaction transaction = broker.newWriteOnlyTransaction(); transaction.put(LogicalDatastoreType.CONFIGURATION, path, mapping, true); CheckedFuture future = transaction.submit(); @@ -81,7 +81,7 @@ public class DataStoreBackEnd { LispAFIConvertor.toString(mapping.getLispAddressContainer()), mapping.getMaskLength()); InstanceIdentifier path = InstanceIdentifierUtil - .createMappingIid(mapping.getLispAddressContainer()); + .createMappingIid(mapping.getLispAddressContainer(), mapping.getOrigin()); WriteTransaction transaction = broker.newWriteOnlyTransaction(); transaction.delete(LogicalDatastoreType.CONFIGURATION, path); CheckedFuture future = transaction.submit(); @@ -106,7 +106,7 @@ public class DataStoreBackEnd { LispAFIConvertor.toString(mapping.getLispAddressContainer()), mapping.getMaskLength()); InstanceIdentifier path = InstanceIdentifierUtil - .createMappingIid(mapping.getLispAddressContainer()); + .createMappingIid(mapping.getLispAddressContainer(), mapping.getOrigin()); WriteTransaction transaction = broker.newWriteOnlyTransaction(); transaction.put(LogicalDatastoreType.CONFIGURATION, path, mapping, true); CheckedFuture future = transaction.submit(); diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/MappingDataListener.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/MappingDataListener.java index 122e05b45..51a9d9a65 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/MappingDataListener.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/MappingDataListener.java @@ -16,6 +16,7 @@ import org.opendaylight.lispflowmapping.implementation.LispMappingService; import org.opendaylight.lispflowmapping.implementation.util.MapServerMapResolverUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapRegister; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.MappingDatabase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.MappingOrigin; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.db.instance.Mapping; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.mapping.database.InstanceId; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -56,8 +57,12 @@ public class MappingDataListener extends AbstractDataListener { LOG.trace("Key: {}", entry.getKey()); LOG.trace("Value: {}", mapping); - MapRegister register = MapServerMapResolverUtil.getMapRegister(mapping); - msmr.handleMapRegister(register, false); + if (mapping.getOrigin() != MappingOrigin.Southbound) { + MapRegister register = MapServerMapResolverUtil.getMapRegister(mapping); + msmr.handleMapRegister(register, false); + } else { + LOG.trace("Mapping is coming from the southbound plugin, already handled"); + } } } @@ -71,8 +76,12 @@ public class MappingDataListener extends AbstractDataListener { LOG.trace("Key: {}", entry.getKey()); LOG.trace("Value: {}", entry.getValue()); - MapRegister register = MapServerMapResolverUtil.getMapRegister(mapping); - msmr.handleMapRegister(register, false); + if (mapping.getOrigin() != MappingOrigin.Southbound) { + MapRegister register = MapServerMapResolverUtil.getMapRegister(mapping); + msmr.handleMapRegister(register, false); + } else { + LOG.trace("Mapping is coming from the southbound plugin, already handled"); + } } } diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/InstanceIdentifierUtil.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/InstanceIdentifierUtil.java index 560948404..a6419f57c 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/InstanceIdentifierUtil.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/InstanceIdentifierUtil.java @@ -41,11 +41,11 @@ public class InstanceIdentifierUtil { .child(InstanceId.class, iidKey).child(AuthenticationKey.class, authKeyKey); } - public static InstanceIdentifier createMappingIid(LispAddressContainer eid) { + public static InstanceIdentifier createMappingIid(LispAddressContainer eid, MappingOrigin orig) { Preconditions.checkNotNull(eid, "Mapping needs an EID entry!"); InstanceIdKey iidKey = new InstanceIdKey(new IidUri(Long.toString(getLispInstanceId(eid)))); - MappingKey eidKey = new MappingKey(new EidUri(getAddressString(eid)),MappingOrigin.Northbound); + MappingKey eidKey = new MappingKey(new EidUri(getAddressString(eid)), orig); return InstanceIdentifier.create(MappingDatabase.class) .child(InstanceId.class, iidKey).child(Mapping.class, eidKey); } diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/LispNotificationHelper.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/LispNotificationHelper.java index 367fae028..9cee420e4 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/LispNotificationHelper.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/LispNotificationHelper.java @@ -10,8 +10,12 @@ package org.opendaylight.lispflowmapping.implementation.util; import java.net.Inet4Address; import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; import org.opendaylight.lispflowmapping.implementation.serializer.LispMessage; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.AddMapping; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.EidToLocatorRecord; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafApplicationDataAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispAFIAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispDistinguishedNameAddress; @@ -27,6 +31,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.maprequestnotification.MapRequestBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.transportaddress.TransportAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.transportaddress.TransportAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.EidUri; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.MappingOrigin; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.db.instance.Mapping; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.db.instance.MappingBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddressBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; @@ -120,4 +128,23 @@ public class LispNotificationHelper { return null; } } + + public static List getMapping(AddMapping mapRegisterNotification) { + List mappings = new ArrayList(); + for (int i=0; i