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;
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;
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;
private ProviderContext session;
+ private DataStoreBackEnd dsbe;
private NotificationService notificationService;
private static LispMappingService lfmService = null;
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));
LOG.warn("got null map notify");
}
+ List<Mapping> mappings = LispNotificationHelper.getMapping(mapRegisterNotification);
+ for (Mapping mapping : mappings) {
+ dsbe.updateMapping(mapping);
+ }
}
}
LispAFIConvertor.toString(mapping.getLispAddressContainer()), mapping.getMaskLength());
InstanceIdentifier<Mapping> path = InstanceIdentifierUtil
- .createMappingIid(mapping.getLispAddressContainer());
+ .createMappingIid(mapping.getLispAddressContainer(), mapping.getOrigin());
WriteTransaction transaction = broker.newWriteOnlyTransaction();
transaction.put(LogicalDatastoreType.CONFIGURATION, path, mapping, true);
CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
LispAFIConvertor.toString(mapping.getLispAddressContainer()), mapping.getMaskLength());
InstanceIdentifier<Mapping> path = InstanceIdentifierUtil
- .createMappingIid(mapping.getLispAddressContainer());
+ .createMappingIid(mapping.getLispAddressContainer(), mapping.getOrigin());
WriteTransaction transaction = broker.newWriteOnlyTransaction();
transaction.delete(LogicalDatastoreType.CONFIGURATION, path);
CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
LispAFIConvertor.toString(mapping.getLispAddressContainer()), mapping.getMaskLength());
InstanceIdentifier<Mapping> path = InstanceIdentifierUtil
- .createMappingIid(mapping.getLispAddressContainer());
+ .createMappingIid(mapping.getLispAddressContainer(), mapping.getOrigin());
WriteTransaction transaction = broker.newWriteOnlyTransaction();
transaction.put(LogicalDatastoreType.CONFIGURATION, path, mapping, true);
CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
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;
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");
+ }
}
}
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");
+ }
}
}
.child(InstanceId.class, iidKey).child(AuthenticationKey.class, authKeyKey);
}
- public static InstanceIdentifier<Mapping> createMappingIid(LispAddressContainer eid) {
+ public static InstanceIdentifier<Mapping> 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);
}
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;
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;
return null;
}
}
+
+ public static List<Mapping> getMapping(AddMapping mapRegisterNotification) {
+ List<Mapping> mappings = new ArrayList<Mapping>();
+ for (int i=0; i<mapRegisterNotification.getMapRegister().getEidToLocatorRecord().size(); i++) {
+ EidToLocatorRecord record = mapRegisterNotification.getMapRegister().getEidToLocatorRecord().get(i);
+ MappingBuilder mb = new MappingBuilder();
+ mb.setEid(new EidUri(LispAFIConvertor.toString(record.getLispAddressContainer())));
+ mb.setOrigin(MappingOrigin.Southbound);
+ mb.setRecordTtl(record.getRecordTtl());
+ mb.setMaskLength(record.getMaskLength());
+ mb.setMapVersion(record.getMapVersion());
+ mb.setAction(record.getAction());
+ mb.setAuthoritative(record.isAuthoritative());
+ mb.setLispAddressContainer(record.getLispAddressContainer());
+ mb.setLocatorRecord(record.getLocatorRecord());
+ mappings.add(mb.build());
+ }
+ return mappings;
+ }
}