use of org.onosproject.lisp.msg.protocols.LispMapRequest in project onos by opennetworkinglab.
the class LispMapServer method sendSmrMessage.
/**
* Sends SMR (Solicit Map Request) to their subscribers.
*
* @param eidRecord the updated EID
*/
private void sendSmrMessage(LispEidRecord eidRecord) {
RequestBuilder builder = new DefaultRequestBuilder();
LispAfiAddress msAddress = null;
try {
msAddress = new LispIpv4Address(IpAddress.valueOf(InetAddress.getLocalHost()));
} catch (UnknownHostException e) {
log.warn("Source EID is not found, {}", e.getMessage());
}
LispMapRequest msg = builder.withIsSmr(true).withIsSmrInvoked(true).withIsProbe(false).withIsPitr(false).withIsAuthoritative(false).withIsMapDataPresent(false).withSourceEid(msAddress).withEidRecords(ImmutableList.of(eidRecord)).build();
LispRouterFactory routerFactory = LispRouterFactory.getInstance();
Collection<LispRouter> routers = routerFactory.getRouters();
routers.forEach(router -> {
if (isInEidRecordRange(eidRecord, router.getEidRecords())) {
router.sendMessage(msg);
}
});
}
use of org.onosproject.lisp.msg.protocols.LispMapRequest in project onos by opennetworkinglab.
the class LispMapResolver method processMapRequest.
/**
* Handles encapsulated control message and replies with map-reply message.
*
* @param message encapsulated control message
* @return map-reply message
*/
List<LispMessage> processMapRequest(LispMessage message) {
LispEncapsulatedControl ecm = (LispEncapsulatedControl) message;
LispMapRequest request = (LispMapRequest) ecm.getControlMessage();
List<LispMapRecord> mapReplyRecords = mapDb.getMapRecordByEidRecords(request.getEids(), true);
List<LispMapRecord> mapRequestRecords = mapDb.getMapRecordByEidRecords(request.getEids(), false);
if (mapReplyRecords.size() + mapRequestRecords.size() == 0) {
List<LispMessage> mapReplies = Lists.newArrayList();
// build natively-forward map reply messages based on map-request from ITR
ReplyBuilder replyBuilder = initMapReplyBuilder(request);
replyBuilder.withMapRecords(getNegativeMapRecords(request.getEids()));
LispMessage mapReply = replyBuilder.build();
mapReply.configSender(new InetSocketAddress(ecm.getSender().getAddress(), NEGATIVE_REPLY_DST_PORT));
mapReplies.add(mapReply);
log.warn(NO_MAP_INFO_MSG);
} else {
if (!mapReplyRecords.isEmpty()) {
List<LispMessage> mapReplies = Lists.newArrayList();
// build map-reply message based on map-request from ITR
ReplyBuilder replyBuilder = initMapReplyBuilder(request);
replyBuilder.withMapRecords(mapReplyRecords);
List<InetSocketAddress> addresses = getItrAddresses(request.getItrRlocs(), ecm.innerUdp().getSourcePort());
addresses.forEach(address -> {
if (address != null) {
LispMapReply reply = replyBuilder.build();
reply.configSender(address);
mapReplies.add(reply);
} else {
log.warn(NO_ITR_RLOCS_MSG);
}
});
return mapReplies;
}
if (!mapRequestRecords.isEmpty()) {
List<LispMessage> ecms = Lists.newArrayList();
// re-encapsulate encapsulated control message from ITR
List<InetSocketAddress> addresses = getEtrAddresses(mapRequestRecords, ECM_DST_PORT);
addresses.forEach(address -> {
if (address != null) {
LispEncapsulatedControl reencapEcm = cloneEcm(ecm);
reencapEcm.configSender(address);
ecms.add(reencapEcm);
} else {
log.warn(NO_ETR_RLOCS_MSG);
}
});
return ecms;
}
}
return ImmutableList.of();
}
Aggregations