*/
Object getMapping(Eid srcKey, Eid dstKey);
+ /**
+ * Retrieves mapping for the provided srcKey, dstKey and a XtrId. In case the IMapCache is not a
+ * Simple Map Cache i.e. Flat Map Cache or Multi Table Map Cache, this method returns null.
+ *
+ * @param srcKey
+ * Source Key to be looked up
+ * @param dstKey
+ * Destination Key to be looked up
+ * @param xtrId
+ * xtr id for which look up to be done
+ * @return Returns the object found in the cache or null if nothing is found or IMapCache is not a Simple
+ * Map Cache.
+ */
+ Object getMapping(Eid srcKey, Eid dstKey, byte[] xtrId);
+
/**
* Retrieves widest negative prefix.
*
package org.opendaylight.lispflowmapping.interfaces.mapcache;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
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.mapping.authkey.container.MappingAuthkey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
*/
Object getMapping(Eid dst);
+ /**
+ * Retrieves mapping for the provided dst key for a particular xtr id.
+ * @param src
+ * Source Key to be looked up.
+ * @param dst
+ * Destination Key to be looked up.
+ * @param xtrId
+ * Xtr Id for which this look to be done. If null, this method works like
+ * regular getMapping(src, dst)
+ * @return Returns the object found in the simple map cache or null if nothing is found.
+ */
+ Object getMapping(Eid src, Eid dst, XtrId xtrId);
+
/**
* Retrieves mapping from table for provided key.
*
}
}
+ rpc get-mapping-with-xtr-id {
+ input {
+ uses lisp-proto:eid-container;
+ leaf xtr-id {
+ type lisp-proto:xtr-id;
+ }
+ }
+ output {
+ uses lisp-proto:mapping-record-container;
+ }
+ }
+
rpc update-mapping {
input {
uses lisp-proto:mapping-record-container;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingWithXtrIdInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingWithXtrIdOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingWithXtrIdOutputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingsInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingsOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
return mappingSystem.getMapping(srcKey, dstKey);
}
+ @Override
+ public Future<RpcResult<GetMappingWithXtrIdOutput>> getMappingWithXtrId(GetMappingWithXtrIdInput input) {
+ Preconditions.checkNotNull(input, "get-mapping RPC input must be not null!");
+ LOG.trace("RPC received to get the following mapping: " + input.toString());
+
+ RpcResultBuilder<GetMappingWithXtrIdOutput> rpcResultBuilder;
+
+ MappingRecord reply = (MappingRecord) mappingSystem.getMapping(null, convertToBinaryIfNecessary(input.getEid()),
+ input.getXtrId());
+
+ if (reply == null) {
+ String message = "No mapping was found in the mapping database";
+ rpcResultBuilder = RpcResultBuilder.<GetMappingWithXtrIdOutput>failed()
+ .withError(RpcError.ErrorType.APPLICATION, NOT_FOUND_TAG, message);
+ } else {
+ final MappingRecord convertedReply = convertFromBinaryIfNecessary(reply);
+ rpcResultBuilder = RpcResultBuilder.success(new GetMappingWithXtrIdOutputBuilder()
+ .setMappingRecord(convertedReply));
+ }
+
+ return Futures.immediateFuture(rpcResultBuilder.build());
+ }
+
@Override
public Future<RpcResult<Void>> removeKey(RemoveKeyInput input) {
Preconditions.checkNotNull(input, "remove-key RPC input must be not null!");
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePath;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
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.locatorrecords.LocatorRecordBuilder;
return getMapping((Eid)null, dst);
}
+ @Override
+ public Object getMapping(Eid src, Eid dst, XtrId xtrId) {
+ // Note: If xtrId is null, we need to go through regular policy checking else Policy doesn't matter
+
+ if (xtrId == null) {
+ return getMapping(src, dst);
+ }
+
+ return smc.getMapping(src, dst, xtrId.getValue());
+ }
+
@Override
public Object getMapping(MappingOrigin origin, Eid key) {
if (origin.equals(MappingOrigin.Southbound)) {
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.HopBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4Binary;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
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.eid.container.EidBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
private static final Date EXPIRED_DATE = new Date(System.currentTimeMillis() - (REGISTRATION_VALIDITY + 1L));
private static final Object DUMMY_OBJECT = "dummy-object";
private static final SiteId SITE_ID = new SiteId(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});
+ private static final XtrId XTR_ID = new XtrId(new byte[]{0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15});
@Before
public void init() throws Exception {
assertEquals(mappingRecord, mappingSystem.getMapping(EID_IPV4_DST));
}
+ /**
+ * Tests {@link MappingSystem#getMapping(Eid src, Eid dst, XtrId xtrId)} method.
+ */
+ @Test
+ public void getMappingTest_withXtrId() {
+ final MappingRecord mappingRecord = getDefaultMappingRecordBuilder()
+ .setXtrId(XTR_ID).build();
+
+ Mockito.when(smcMock.getMapping(null, EID_IPV4_DST, XTR_ID.getValue()))
+ .thenReturn(mappingRecord);
+
+ assertEquals(mappingRecord, mappingSystem.getMapping(null, EID_IPV4_DST, XTR_ID));
+ }
+
/**
* Tests {@link MappingSystem#getMapping(MappingOrigin, Eid)} method.
*/
return dao.getSpecific(key, SubKeys.RECORD);
}
+ @Override
+ public Object getMapping(Eid srcKey, Eid dstKey, byte[] xtrId) {
+ return null;
+ }
+
@Override
public Eid getWidestNegativeMapping(Eid key) {
return null;
return getMappingLpmSD(srcEid, dstEid, table);
}
+ @Override
+ public Object getMapping(Eid srcEid, Eid dstEid, byte[] xtrId) {
+ return null;
+ }
+
@Override
public Eid getWidestNegativeMapping(Eid key) {
ILispDAO table = getVniTable(key);