+++ /dev/null
-/*
- * Copyright (c) 2013 Contextream, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.lispflowmapping.type.sbplugin;
-
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.Notification;
-
-/**
- * A mapping service notification.
- */
-public interface LispNotification extends Notification, DataObject {
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Contextream, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.lispflowmapping.type.sbplugin;
-
-import java.net.InetAddress;
-
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-
-public class MapRegisterNotification implements LispNotification {
- private MapRegister mapRegister;
- private InetAddress address;
-
- public MapRegisterNotification(MapRegister mapRegister, InetAddress sourceAddress) {
- this.mapRegister = mapRegister;
- this.address = sourceAddress;
- }
-
- public Class<? extends DataObject> getImplementedInterface() {
- return LispNotification.class;
- }
-
- public MapRegister getMapRegister() {
- return mapRegister;
- }
-
- public InetAddress getSourceAddress() {
- return address;
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Contextream, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.lispflowmapping.type.sbplugin;
-
-import java.net.InetAddress;
-
-/**
- * A map request notification
- */
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-
-public class MapRequestNotification implements LispNotification {
- private MapRequest mapRequest;
- private InetAddress address;
-
- public MapRequestNotification(MapRequest mapRequest, InetAddress sourceAddress) {
- this.mapRequest = mapRequest;
- this.address = sourceAddress;
- }
-
- public Class<? extends DataObject> getImplementedInterface() {
- return LispNotification.class;
- }
-
- public MapRequest getMapRequest() {
- return mapRequest;
- }
-
- public InetAddress getSourceAddress() {
- return address;
- }
-}
org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest,
org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification,
org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.reencaphop,
+ org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.transportaddress,
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924,
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924,
org.opendaylight.controller.sal.core,
package org.opendaylight.lispflowmapping.implementation;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
import org.eclipse.osgi.framework.console.CommandInterpreter;
import org.eclipse.osgi.framework.console.CommandProvider;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
import org.opendaylight.lispflowmapping.implementation.lisp.MapResolver;
import org.opendaylight.lispflowmapping.implementation.lisp.MapServer;
import org.opendaylight.lispflowmapping.implementation.util.LispAFIConvertor;
+import org.opendaylight.lispflowmapping.implementation.util.LispNotificationHelper;
import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
import org.opendaylight.lispflowmapping.interfaces.dao.ILispTypeConverter;
import org.opendaylight.lispflowmapping.interfaces.dao.IQueryAll;
import org.opendaylight.lispflowmapping.interfaces.lisp.IMapResolverAsync;
import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServerAsync;
import org.opendaylight.lispflowmapping.type.sbplugin.ILispSouthboundPlugin;
-import org.opendaylight.lispflowmapping.type.sbplugin.LispNotification;
-import org.opendaylight.lispflowmapping.type.sbplugin.MapRegisterNotification;
-import org.opendaylight.lispflowmapping.type.sbplugin.MapRequestNotification;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.AddMapping;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapNotify;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapReply;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.RequestMapping;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainer;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainerBuilder;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.Address;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.net.InetAddresses;
+
public class LispMappingService implements CommandProvider, IFlowMapping, BindingAwareConsumer, //
- NotificationListener<LispNotification>, IMapReplyHandler, IMapNotifyHandler {
+ IMapReplyHandler, IMapNotifyHandler {
protected static final Logger logger = LoggerFactory.getLogger(LispMappingService.class);
private ILispDAO lispDao = null;
public void onSessionInitialized(ConsumerContext session) {
logger.debug("Lisp Consumer session initialized!");
NotificationService notificationService = session.getSALService(NotificationService.class);
- notificationService.registerNotificationListener(LispNotification.class, this);
+ // notificationService.registerNotificationListener(LispNotification.class,
+ // this);
+ notificationService.registerNotificationListener(AddMapping.class, new MapRegisterNotificationHandler());
+ notificationService.registerNotificationListener(RequestMapping.class, new MapRequestNotificationHandler());
this.session = session;
}
- public void onNotification(LispNotification notification) {
- try {
- if (notification instanceof MapRegisterNotification) {
- logger.trace("MapRegister notification recieved!");
- MapRegisterNotification mapRegisterNotification = (MapRegisterNotification) notification;
- MapNotify mapNotify = handleMapRegister(mapRegisterNotification.getMapRegister());
- getLispSB().handleMapNotify(mapNotify, mapRegisterNotification.getSourceAddress());
- } else if (notification instanceof MapRequestNotification) {
- logger.trace("MapRequest notification recieved!");
- MapRequestNotification mapRequestNotification = (MapRequestNotification) notification;
- MapReply mapReply = handleMapRequest(mapRequestNotification.getMapRequest());
- getLispSB().handleMapReply(mapReply, mapRequestNotification.getSourceAddress());
- } else {
- logger.error("Unknown notification: " + notification);
- }
- } catch (Throwable t) {
- t.printStackTrace();
+ private class MapRegisterNotificationHandler implements NotificationListener<AddMapping> {
+
+ @Override
+ public void onNotification(AddMapping mapRegisterNotification) {
+ MapNotify mapNotify = handleMapRegister(mapRegisterNotification.getMapRegister());
+ getLispSB().handleMapNotify(mapNotify,
+ LispNotificationHelper.getInetAddressFromIpAddress(mapRegisterNotification.getTransportAddress().getIpAddress()));
+
+ }
+ }
+
+ private class MapRequestNotificationHandler implements NotificationListener<RequestMapping> {
+
+ @Override
+ public void onNotification(RequestMapping mapRequestNotification) {
+ MapReply mapReply = handleMapRequest(mapRequestNotification.getMapRequest());
+ getLispSB().handleMapReply(mapReply,
+ LispNotificationHelper.getInetAddressFromIpAddress(mapRequestNotification.getTransportAddress().getIpAddress()));
}
+
}
private ILispSouthboundPlugin getLispSB() {
--- /dev/null
+package org.opendaylight.lispflowmapping.implementation.util;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification.MapRegister;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification.MapRegisterBuilder;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification.MapRequest;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification.MapRequestBuilder;
+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.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
+
+public class LispNotificationHelper {
+
+ public static MapRegister convertMapRegister(org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister mapRegister) {
+ return new MapRegisterBuilder().setAuthenticationData(mapRegister.getAuthenticationData())
+ .setEidToLocatorRecord(mapRegister.getEidToLocatorRecord()).setKeyId(mapRegister.getKeyId()).setNonce(mapRegister.getNonce())
+ .setProxyMapReply(mapRegister.isProxyMapReply()).setWantMapNotify(mapRegister.isWantMapNotify()).build();
+ }
+
+ public static MapRequest convertMapRequest(org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest mapRequest) {
+ return new MapRequestBuilder().setAuthoritative(mapRequest.isAuthoritative()).setEidRecord(mapRequest.getEidRecord())
+ .setItrRloc(mapRequest.getItrRloc()).setMapDataPresent(mapRequest.isMapDataPresent()).setMapReply(mapRequest.getMapReply())
+ .setNonce(mapRequest.getNonce()).setPitr(mapRequest.isPitr()).setProbe(mapRequest.isProbe()).setSmr(mapRequest.isSmr())
+ .setSmrInvoked(mapRequest.isSmrInvoked()).setSourceEid(mapRequest.getSourceEid()).build();
+ }
+
+ public static IpAddress getIpAddressFromInetAddress(InetAddress inetAddress) {
+ if (inetAddress == null) {
+ inetAddress = InetAddress.getLoopbackAddress();
+ }
+ if (inetAddress instanceof Inet4Address) {
+ return new IpAddress(new Ipv4Address(inetAddress.getHostAddress()));
+ } else {
+ return new IpAddress(new Ipv6Address(inetAddress.getHostAddress()));
+ }
+ }
+
+ public static InetAddress getInetAddressFromIpAddress(IpAddress ipAddress) {
+ InetAddress address = InetAddress.getLoopbackAddress();
+ if (ipAddress == null) {
+ return address;
+ }
+ if (ipAddress.getIpv4Address() != null) {
+ try {
+ address = Inet4Address.getByName(ipAddress.getIpv4Address().getValue());
+ } catch (UnknownHostException e) {
+ }
+ } else if (ipAddress.getIpv6Address() != null) {
+ try {
+ address = Inet4Address.getByName(ipAddress.getIpv6Address().getValue());
+ } catch (UnknownHostException e) {
+ }
+ }
+ return address;
+ }
+}
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>ietf-yang-types</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>config-api</artifactId>
+ <version>0.2.3-SNAPSHOT</version>
+ </dependency>
</dependencies>
<profiles>
TestHelper.mdSalCoreBundles(),
// Specific bundles
+ mavenBundle(ODL, "config-api").versionAsInProject(),
mavenBundle(ODL, "sal-binding-api").versionAsInProject(), //
mavenBundle(ODL, "sal-binding-config").versionAsInProject(),
mavenBundle(ODL, "sal-binding-broker-impl").versionAsInProject(), //
org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest,
org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress,
org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer,
+ org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.transportaddress,
+ org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification,
+ org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification,
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924,
org.opendaylight.controller.sal.core,
org.apache.felix.dm,
package org.opendaylight.lispflowmapping.southbound.lisp;
import java.net.DatagramPacket;
+import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import org.opendaylight.lispflowmapping.implementation.serializer.MapRegisterSerializer;
import org.opendaylight.lispflowmapping.implementation.serializer.MapRequestSerializer;
import org.opendaylight.lispflowmapping.implementation.util.ByteUtil;
+import org.opendaylight.lispflowmapping.implementation.util.LispNotificationHelper;
import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
import org.opendaylight.lispflowmapping.southbound.lisp.network.PacketHeader;
-import org.opendaylight.lispflowmapping.type.sbplugin.MapRegisterNotification;
-import org.opendaylight.lispflowmapping.type.sbplugin.MapRequestNotification;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.AddMappingBuilder;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispAFIAddress;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv4Address;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv6Address;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.RequestMappingBuilder;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.Address;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification.MapRegisterBuilder;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.ItrRloc;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification.MapRequestBuilder;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.transportaddress.TransportAddressBuilder;
+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.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
throw new LispMalformedPacketException("Couldn't deserialize Map-Request, no ITR Rloc found!");
}
- MapRequestNotification requestNotification = new MapRequestNotification(request, finalSourceAddress);
+ RequestMappingBuilder requestMappingBuilder = new RequestMappingBuilder();
+ requestMappingBuilder.setMapRequest(LispNotificationHelper.convertMapRequest(request));
+ TransportAddressBuilder transportAddressBuilder = new TransportAddressBuilder();
+ transportAddressBuilder.setIpAddress(LispNotificationHelper.getIpAddressFromInetAddress(finalSourceAddress));
+ requestMappingBuilder.setTransportAddress(transportAddressBuilder.build());
if (notificationProvider != null) {
- notificationProvider.publish(requestNotification);
+ notificationProvider.publish(requestMappingBuilder.build());
logger.debug("MapRequest was published!");
} else {
logger.error("Notification Provider is null!");
private void handleMapRegister(ByteBuffer inBuffer, InetAddress sourceAddress) {
try {
MapRegister mapRegister = MapRegisterSerializer.getInstance().deserialize(inBuffer);
- MapRegisterNotification registerNotification = new MapRegisterNotification(mapRegister, sourceAddress);
+ AddMappingBuilder addMappingBuilder = new AddMappingBuilder();
+ addMappingBuilder.setMapRegister(LispNotificationHelper.convertMapRegister(mapRegister));
+ TransportAddressBuilder transportAddressBuilder = new TransportAddressBuilder();
+ transportAddressBuilder.setIpAddress(LispNotificationHelper.getIpAddressFromInetAddress(sourceAddress));
+ addMappingBuilder.setTransportAddress(transportAddressBuilder.build());
if (notificationProvider != null) {
- notificationProvider.publish(registerNotification);
+ notificationProvider.publish(addMappingBuilder.build());
logger.debug("MapRegister was published!");
} else {
logger.error("Notification Provider is null!");
import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
-import org.opendaylight.lispflowmapping.type.sbplugin.LispNotification;
-import org.opendaylight.lispflowmapping.type.sbplugin.MapRegisterNotification;
-import org.opendaylight.lispflowmapping.type.sbplugin.MapRequestNotification;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.AddMapping;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispAFIAddress;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.RequestMapping;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecord;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord.Action;
import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplymessage.MapReplyBuilder;
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.yangtools.yang.binding.Notification;
public class LispSouthboundServiceTest extends BaseTestCase {
private NotificationProviderService nps;
private byte[] mapRequestPacket;
private byte[] mapRegisterPacket;
- private ValueSaverAction<LispNotification> lispNotificationSaver;
+ private ValueSaverAction<Notification> lispNotificationSaver;
// private ValueSaverAction<MapRegister> mapRegisterSaver;
// private ValueSaverAction<MapRequest> mapRequestSaver;
private MapNotifyBuilder mapNotifyBuilder;
testedLispService = new LispSouthboundService();
nps = context.mock(NotificationProviderService.class);
testedLispService.setNotificationProvider(nps);
- lispNotificationSaver = new ValueSaverAction<LispNotification>();
+ lispNotificationSaver = new ValueSaverAction<Notification>();
// mapRegisterSaver = new ValueSaverAction<MapRegister>();
// mapRequestSaver = new ValueSaverAction<MapRequest>();
// SRC: 127.0.0.1:58560 to 127.0.0.1:4342
}
private MapRegister lastMapRegister() {
- assertTrue(lispNotificationSaver.lastValue instanceof MapRegisterNotification);
- MapRegisterNotification lastValue = (MapRegisterNotification) lispNotificationSaver.lastValue;
+ assertTrue(lispNotificationSaver.lastValue instanceof AddMapping);
+ AddMapping lastValue = (AddMapping) lispNotificationSaver.lastValue;
return lastValue.getMapRegister();
}
private MapRequest lastMapRequest() {
- MapRequestNotification lastValue = (MapRequestNotification) lispNotificationSaver.lastValue;
+ RequestMapping lastValue = (RequestMapping) lispNotificationSaver.lastValue;
return lastValue.getMapRequest();
}
}
private void stubHandleRequest() {
- allowing(nps).publish(wany(LispNotification.class));
+ allowing(nps).publish(wany(Notification.class));
}
private byte[] handleMapRequestAsByteArray(byte[] inPacket) {
org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplymessage,
org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest,
org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification,
- org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.reencaphop
+ org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.reencaphop,
+ org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.transportaddress
</Export-Package>
<Import-Package>
com.google.common.collect,