[ONOS-5710] Process Map-Request msg when proxy bit is set to false
Change-Id: I0ceef00c67ab266b01dec121fe6a4fe1f3dca3e5
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMappingDatabase.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMappingDatabase.java
index f4f421b..4545542 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMappingDatabase.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMappingDatabase.java
@@ -20,8 +20,10 @@
import org.onlab.packet.IpPrefix;
import org.onosproject.lisp.ctl.impl.map.ExpireMap;
import org.onosproject.lisp.ctl.impl.map.ExpireHashMap;
+import org.onosproject.lisp.msg.protocols.DefaultLispProxyMapRecord.DefaultMapWithProxyBuilder;
import org.onosproject.lisp.msg.protocols.LispEidRecord;
import org.onosproject.lisp.msg.protocols.LispMapRecord;
+import org.onosproject.lisp.msg.protocols.LispProxyMapRecord;
import org.onosproject.lisp.msg.types.LispAfiAddress;
import java.util.List;
@@ -34,7 +36,7 @@
private static final long MINUTE_TO_MS_UNIT = 60 * 1000;
- private ExpireMap<LispEidRecord, LispMapRecord> map = new ExpireHashMap<>();
+ private ExpireMap<LispEidRecord, LispProxyMapRecord> map = new ExpireHashMap<>();
/**
* Prevents object instantiation from external.
@@ -54,11 +56,17 @@
/**
* Inserts a new EID-RLOC mapping record.
*
- * @param eid endpoint identifier
- * @param rloc route locator record
+ * @param eid endpoint identifier
+ * @param rloc route locator record
+ * @param proxyMapReply proxy map reply flag
*/
- public void putMapRecord(LispEidRecord eid, LispMapRecord rloc) {
- map.put(eid, rloc, rloc.getRecordTtl() * MINUTE_TO_MS_UNIT);
+ public void putMapRecord(LispEidRecord eid, LispMapRecord rloc,
+ boolean proxyMapReply) {
+ LispProxyMapRecord mapWithProxy = new DefaultMapWithProxyBuilder()
+ .withMapRecord(rloc)
+ .withIsProxyMapReply(proxyMapReply)
+ .build();
+ map.put(eid, mapWithProxy, rloc.getRecordTtl() * MINUTE_TO_MS_UNIT);
}
/**
@@ -81,16 +89,19 @@
}
/**
- * Obtains an EID-RLOC mapping record with given EID record.
+ * Obtains an EID-RLOC mapping record in accordance with the proxy map reply
+ * flag bit and EID record.
*
- * @param eid endpoint identifier record
+ * @param eid endpoint identifier record
+ * @param proxyMapReply proxy map reply flag
* @return an EID-RLOC mapping record
*/
- public LispMapRecord getMapRecordByEidRecord(LispEidRecord eid) {
+ public LispMapRecord getMapRecordByEidRecord(LispEidRecord eid, boolean proxyMapReply) {
for (LispEidRecord key : map.keySet()) {
- if (isInRange(key, eid)) {
- return map.get(key);
+ if (isInRange(key, eid) && map.get(key) != null
+ && map.get(key).isProxyMapReply() == proxyMapReply) {
+ return map.get(key).getMapRecord();
}
}
@@ -98,15 +109,18 @@
}
/**
- * Obtains a collection of EID-RLOC mapping records with given EID records.
+ * Obtains a collection of EID-RLOC mapping record in accordance with the
+ * proxy map reply flag bit and EID record.
*
- * @param eids endpoint identifier records
+ * @param eids endpoint identifier records
+ * @param proxyMapReply proxy map reply flag
* @return a collection of EID-RLOC mapping records
*/
- public List<LispMapRecord> getMapRecordByEidRecords(List<LispEidRecord> eids) {
+ public List<LispMapRecord> getMapRecordByEidRecords(List<LispEidRecord> eids,
+ boolean proxyMapReply) {
List<LispMapRecord> mapRecords = Lists.newArrayList();
eids.forEach(eidRecord -> {
- LispMapRecord mapRecord = getMapRecordByEidRecord(eidRecord);
+ LispMapRecord mapRecord = getMapRecordByEidRecord(eidRecord, proxyMapReply);
if (mapRecord != null) {
mapRecords.add(mapRecord);
}
@@ -123,7 +137,8 @@
public LispMapRecord getMapRecordByEidAddress(LispAfiAddress address) {
Optional<LispEidRecord> eidRecord =
map.keySet().stream().filter(k -> k.getPrefix().equals(address)).findFirst();
- return eidRecord.map(lispEidRecord -> map.get(lispEidRecord)).orElse(null);
+ return eidRecord.map(lispEidRecord ->
+ map.get(lispEidRecord).getMapRecord()).orElse(null);
}
/**