import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequestBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.authkey.container.MappingAuthkey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.authkey.container.MappingAuthkeyBuilder;
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.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
public static final String YANG = "org.opendaylight.yangtools";
public static final String JERSEY = "com.sun.jersey";
private static final int MAX_NOTIFICATION_RETRYS = 20;
+ private static final MappingAuthkey NULL_AUTH_KEY = new MappingAuthkeyBuilder().setKeyType(0).build();
+ private static final MappingAuthkey AUTH_KEY =
+ new MappingAuthkeyBuilder().setKeyType(1).setKeyString("password").build();
@Override
public String getModuleName() {
public void mapRegisterWithMapNotify() throws SocketTimeoutException {
cleanUP();
+ mapService.addAuthenticationKey(LispAddressUtil.asIpv4PrefixEid("153.16.254.1/32"), NULL_AUTH_KEY);
+ sleepForSeconds(1);
sendPacket(mapRegisterPacketWithNotify);
MapNotify reply = receiveMapNotify();
assertEquals(7, reply.getNonce().longValue());
public void mapRequestMapRegisterAndMapRequest() throws SocketTimeoutException {
cleanUP();
Eid eid = LispAddressUtil.asIpv4PrefixEid("1.2.3.4/32");
+ mapService.addAuthenticationKey(eid, NULL_AUTH_KEY);
+ sleepForSeconds(1);
+
MapRequestBuilder mapRequestBuilder = new MapRequestBuilder();
mapRequestBuilder.setNonce((long) 4);
mapRequestBuilder.setSourceEid(new SourceEidBuilder().setEid(LispAddressUtil.getNoAddressEid()).build());
private MapReply sendMapRegisterTwiceWithDiffrentValues(Eid eid, Rloc rloc1, Rloc rloc2)
throws SocketTimeoutException {
+ mapService.addAuthenticationKey(eid, NULL_AUTH_KEY);
+ sleepForSeconds(1);
MapRegister mb = createMapRegister(eid, rloc1);
MapNotify mapNotify = lms.handleMapRegister(mb).getLeft();
MapRequest mr = createMapRequest(eid);
public void registerQueryRegisterWithSmr() throws SocketTimeoutException {
cleanUP();
lms.setShouldUseSmr(true);
+ mapService.addAuthenticationKey(LispAddressUtil.asIpv4PrefixEid("153.16.254.1/32"), NULL_AUTH_KEY);
+ sleepForSeconds(1);
sendPacket(mapRegisterPacketWithNotify);
receiveMapNotify();
private void runPrefixTest(Eid registerEID, Eid matchedAddress, Eid unMatchedAddress)
throws SocketTimeoutException {
+ mapService.addAuthenticationKey(registerEID, NULL_AUTH_KEY);
+ sleepForSeconds(1);
MapRegisterBuilder mapRegister = new MapRegisterBuilder();
mapRegister.setWantMapNotify(true);
sendMapRegister(mapRegister.build());
- assertMapNotifyRecieved();
+ assertMapNotifyReceived();
}
public void testPasswordMaskMatch() throws Exception {
sendMapRegister(mapRegister.build());
- assertMapNotifyRecieved();
+ assertMapNotifyReceived();
etlr.setLispAddressContainer(LispAddressUtil.toContainer(addressOutOfRange));
mapRegister
*/
// takes an address, packs it in a MapRegister and sends it
private void registerAddress(Eid eid) throws SocketTimeoutException {
+ mapService.addAuthenticationKey(eid, NULL_AUTH_KEY);
+ sleepForSeconds(1);
MapRegisterBuilder mapRegisterBuilder = new MapRegisterBuilder();
mapRegisterBuilder.setWantMapNotify(true);
mapRegisterBuilder.setKeyId((short) 0);
// takes an address, packs it in a MapRegister, sends it, returns the
// MapReply
private MapReply registerAddressAndQuery(Eid eid) throws SocketTimeoutException {
+ mapService.addAuthenticationKey(eid, NULL_AUTH_KEY);
+ sleepForSeconds(1);
MapRegisterBuilder mapRegisterBuilder = new MapRegisterBuilder();
mapRegisterBuilder.setWantMapNotify(true);
mapRegisterBuilder.setKeyId((short) 0);
assertEquals(AfiListLcaf.class, receivedAddress.getAddressType());
AfiList listAddrFromNetwork = (AfiList) receivedAddress.getAddress();
- SimpleAddress receivedAddr1 = listAddrFromNetwork.getAfiList().getAddressList().get(0);
- SimpleAddress receivedAddr2 = listAddrFromNetwork.getAfiList().getAddressList().get(1);
+ SimpleAddress receivedAddr1 = (SimpleAddress) listAddrFromNetwork.getAfiList().getAddressList().get(0);
+ SimpleAddress receivedAddr2 = (SimpleAddress) listAddrFromNetwork.getAfiList().getAddressList().get(1);
assertNotNull(receivedAddr1.getIpAddress().getIpv4Address());
assertNotNull(receivedAddr2.getMacAddress());
ExplicitLocatorPath receivedAddress = (ExplicitLocatorPath) reply.getMappingRecordItem().get(0).getMappingRecord().getEid().getAddress();
- Hop receivedHop1 = receivedAddress.getExplicitLocatorPath().getHop().get(0);
- Hop receivedHop2 = receivedAddress.getExplicitLocatorPath().getHop().get(1);
+ Hop receivedHop1 = (Hop) receivedAddress.getExplicitLocatorPath().getHop().get(0);
+ Hop receivedHop2 = (Hop) receivedAddress.getExplicitLocatorPath().getHop().get(1);
assertEquals(true, receivedHop1.getLrsBits().isLookup());
assertEquals(false, receivedHop1.getLrsBits().isRlocProbe());
public void mapRequestMapRegisterAndMapRequestTestTimeout() throws SocketTimeoutException {
cleanUP();
Eid eid = LispAddressUtil.asIpv4PrefixEid("1.2.3.4/32");
+ mapService.addAuthenticationKey(eid, NULL_AUTH_KEY);
+ sleepForSeconds(1);
MapRequestBuilder mapRequestBuilder = new MapRequestBuilder();
mapRequestBuilder.setNonce((long) 4);
mapRequestBuilder.setSourceEid(new SourceEidBuilder().setEid(LispAddressUtil.getNoAddressEid()).build());
private void registerForTTL(Eid eid) throws SocketTimeoutException {
MapRegister mapRegister = createMapRegister(eid);
sendMapRegister(mapRegister);
- assertMapNotifyRecieved();
+ assertMapNotifyReceived();
}
private void testTTLBeforeRegister(MapRequest mapRequest) throws SocketTimeoutException {
MapRequest mapRequest = createNonProxyMapRequest(eid, adLcaf);
sendMapRequest(mapRequest);
DatagramSocket nonProxySocket = new DatagramSocket(new InetSocketAddress(rloc, port));
- MapRequest recievedMapRequest = receiveMapRequest(nonProxySocket);
- assertEquals(mapRequest.getNonce(), recievedMapRequest.getNonce());
- assertEquals(mapRequest.getSourceEid(), recievedMapRequest.getSourceEid());
- assertEquals(mapRequest.getItrRloc(), recievedMapRequest.getItrRloc());
- assertEquals(mapRequest.getEidItem(), recievedMapRequest.getEidItem());
+ MapRequest receivedMapRequest = receiveMapRequest(nonProxySocket);
+ assertEquals(mapRequest.getNonce(), receivedMapRequest.getNonce());
+ assertEquals(mapRequest.getSourceEid(), receivedMapRequest.getSourceEid());
+ assertEquals(mapRequest.getItrRloc(), receivedMapRequest.getItrRloc());
+ assertEquals(mapRequest.getEidItem(), receivedMapRequest.getEidItem());
nonProxySocket.close();
}
.getLocatorRecord().get(0)).setRloc(adLcaf).build();
mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().set(0, record);
sendMapRegister(mr);
- assertMapNotifyRecieved();
+ assertMapNotifyReceived();
MapRequest mapRequest = createMapRequest(LispAddressUtil.asIpv4PrefixEid(eid));
MapRequestBuilder builder = new MapRequestBuilder(mapRequest);
builder.setPitr(true);
return mapRequest;
}
- private void assertMapNotifyRecieved() throws SocketTimeoutException {
+ private void assertMapNotifyReceived() throws SocketTimeoutException {
receiveMapNotify();
}
LOG.trace("Waiting for packet from socket...");
receivedSocket.setSoTimeout(timeout);
receivedSocket.receive(receivePacket);
- LOG.trace("Recieved packet from socket!");
+ LOG.trace("Received packet from socket!");
return receivePacket;
} catch (SocketTimeoutException ste) {
throw ste;
}
}
-
private void sleepForSeconds(int seconds) {
try {
Thread.sleep(seconds*1000);
} catch (InterruptedException e) {
- LOG.warn("Interrupted while sleeping");
- e.printStackTrace();
+ LOG.warn("Interrupted while sleeping", e);
}
}
}
private void areWeReady() throws InvalidSyntaxException {
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- }
+ sleepForSeconds(5);
assertNotNull(bc);
boolean debugit = false;
}
*/
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
+ sleepForSeconds(1);
}
private void cleanUP() {
package org.opendaylight.lispflowmapping.implementation.authentication;
import org.opendaylight.lispflowmapping.interfaces.lisp.ILispAuthentication;
+import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapNotify;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.authkey.container.MappingAuthkey;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public final class LispAuthenticationUtil {
+ protected static final Logger LOG = LoggerFactory.getLogger(LispAuthenticationUtil.class);
+
// Utility class, should not be instantiated
private LispAuthenticationUtil() {
}
- public static boolean validate(MapRegister mapRegister, String key) {
+ public static boolean validate(MapRegister mapRegister, Eid eid, MappingAuthkey key) {
+ if (key == null) {
+ LOG.warn("Authentication failed: mapping authentication key is null");
+ return false;
+ }
short keyId = 0;
if (mapRegister.getKeyId() != null) {
keyId = mapRegister.getKeyId();
}
+ if (keyId != key.getKeyType().shortValue()) {
+ LOG.warn("Authentication failed: key-ID in Map-Register is different from the one on file for {}",
+ LispAddressStringifier.getString(eid));
+ return false;
+ }
ILispAuthentication authentication = LispAuthenticationFactory.getAuthentication(LispKeyIDEnum.valueOf(keyId));
- return authentication.validate(mapRegister, key);
+ return authentication.validate(mapRegister, key.getKeyString());
}
public static byte[] createAuthenticationData(MapNotify mapNotify, String key) {
+ // We assume that the key-ID is correctly set in the Map-Notify message
ILispAuthentication authentication = LispAuthenticationFactory.getAuthentication(LispKeyIDEnum.valueOf(mapNotify.getKeyId()));
return authentication.getAuthenticationData(mapNotify, key);
}
import org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer;
import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotifyBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.authkey.container.MappingAuthkey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.authkey.container.MappingAuthkeyBuilder;
public class LispAuthenticationTest extends BaseTestCase {
+ private static final MappingAuthkey PASSWORD =
+ new MappingAuthkeyBuilder().setKeyType(1).setKeyString("password").build();
+ private static final MappingAuthkey WRONG_PASSWORD =
+ new MappingAuthkeyBuilder().setKeyType(1).setKeyString("wrongPassword").build();
+ private static final Eid EID = LispAddressUtil.asIpv4PrefixEid("153.16.254.1/32");
@Test
public void validate_WrongAuthentication() throws Exception {
+ "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
+ "ff 00 00 05 00 01 c0 a8 88 0a"), null);
- assertFalse(LispAuthenticationUtil.validate(mapRegister, "password"));
+ assertFalse(LispAuthenticationUtil.validate(mapRegister, EID, PASSWORD));
}
@Test
+ "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
+ "ff 00 00 05 00 01 c0 a8 88 0a"), null);
- assertTrue(LispAuthenticationUtil.validate(mapRegister, "password"));
- assertFalse(LispAuthenticationUtil.validate(mapRegister, "wrongPassword"));
+ assertTrue(LispAuthenticationUtil.validate(mapRegister, EID, PASSWORD));
+ assertFalse(LispAuthenticationUtil.validate(mapRegister, EID, WRONG_PASSWORD));
}
@Test
+ "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
+ "ff 00 00 05 00 01 c0 a8 88 0a"), null);
- assertTrue(LispAuthenticationUtil.validate(mapRegister, "password"));
- assertFalse(LispAuthenticationUtil.validate(mapRegister, "wrongPassword"));
+ assertTrue(LispAuthenticationUtil.validate(mapRegister, EID, PASSWORD));
+ assertFalse(LispAuthenticationUtil.validate(mapRegister, EID, WRONG_PASSWORD));
}
@Test
+ "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
+ "ff 00 00 05 00 01 c0 a8 88 0a"), null);
- assertTrue(LispAuthenticationUtil.validate(mapRegister, "password"));
- assertTrue(LispAuthenticationUtil.validate(mapRegister, "wrongPassword"));
+ assertTrue(LispAuthenticationUtil.validate(mapRegister, EID, PASSWORD));
+ assertTrue(LispAuthenticationUtil.validate(mapRegister, EID, WRONG_PASSWORD));
}
// @Test