+ protected HashSet<MappingServiceSubscriberRLOC> getSubscribers(LispAddressContainer prefix, int maskLength) {
+ // For SrcDst we merge the subscriber set from the parent DAO with the source specific DAO
+ if (prefix.getAddress() instanceof LcafSourceDest) {
+ HashSet<MappingServiceSubscriberRLOC> resultSet = new HashSet<MappingServiceSubscriberRLOC>();
+ boolean haveResult = false;
+
+ LispAddressContainer srcAddr = LispAFIConvertor.toContainer(getSrcForLcafSrcDst(prefix));
+ short srcMask = getSrcMaskForLcafSrcDst(prefix);
+ ILispDAO srcDstDao = getSrcDstInnerDao(prefix, maskLength);
+ HashSet<MappingServiceSubscriberRLOC> srcDstSubscribers = getSubscribers(srcAddr, srcMask, srcDstDao);
+ if (srcDstSubscribers != null) {
+ resultSet.addAll(srcDstSubscribers);
+ haveResult = true;
+ }
+
+ LispAddressContainer dstAddr = LispAFIConvertor.toContainer(getDstForLcafSrcDst(prefix));
+ short dstMask = getDstMaskForLcafSrcDst(prefix);
+ HashSet<MappingServiceSubscriberRLOC> subscribers = getSubscribers(dstAddr, dstMask, dao);
+ if (subscribers != null) {
+ resultSet.addAll(subscribers);
+ haveResult = true;
+ }
+
+ if (haveResult) {
+ return resultSet;
+ }
+ } else {
+ return getSubscribers(prefix, maskLength, dao);
+ }
+ return null;
+ }
+
+ protected static LispAFIAddress getSrcForLcafSrcDst(LispAddressContainer container) {