Bugfix: Acknowledge to ETR only if want-map-notify is set to true

Change-Id: I684bc1f1a7958b9777f90fe512980523490598ac
This commit is contained in:
Jian Li 2016-11-24 02:51:03 +09:00 committed by Thomas Vachuska
parent 70222adec1
commit 2c8a2a4f84
3 changed files with 26 additions and 18 deletions

View File

@ -61,7 +61,9 @@ public class LispChannelHandler extends ChannelInboundHandlerAdapter {
LispMapNotify mapNotify =
mapServer.processMapRegister((LispMapRegister) msg);
ctx.writeAndFlush(mapNotify);
if (mapNotify != null) {
ctx.writeAndFlush(mapNotify);
}
}
if (msg instanceof LispInfoRequest) {

View File

@ -54,7 +54,7 @@ public class LispMapResolver {
LispEncapsulatedControl ecm = (LispEncapsulatedControl) message;
LispMapRequest request = (LispMapRequest) ecm.getControlMessage();
// TODO: for now we always generate map-notify message and send to ITR
// TODO: for now we always generate map-reply message and send to ITR
// no matter proxy bit is set or not
// build map-reply message

View File

@ -83,26 +83,32 @@ public final class LispMapServer {
return null;
}
NotifyBuilder notifyBuilder = new DefaultNotifyBuilder();
notifyBuilder.withKeyId(authConfig.lispAuthKeyId());
notifyBuilder.withAuthDataLength(valueOf(authConfig.lispAuthKeyId()).getHashLength());
notifyBuilder.withAuthKey(authConfig.lispAuthKey());
notifyBuilder.withNonce(register.getNonce());
notifyBuilder.withMapRecords(register.getMapRecords());
// we only acknowledge back to ETR when want-map-notify bit is set to true
// otherwise, we do not acknowledge back to ETR
if (register.isWantMapNotify()) {
NotifyBuilder notifyBuilder = new DefaultNotifyBuilder();
notifyBuilder.withKeyId(authConfig.lispAuthKeyId());
notifyBuilder.withAuthDataLength(valueOf(authConfig.lispAuthKeyId()).getHashLength());
notifyBuilder.withAuthKey(authConfig.lispAuthKey());
notifyBuilder.withNonce(register.getNonce());
notifyBuilder.withMapRecords(register.getMapRecords());
LispMapNotify notify = notifyBuilder.build();
LispMapNotify notify = notifyBuilder.build();
InetSocketAddress address =
new InetSocketAddress(register.getSender().getAddress(), MAP_NOTIFY_PORT);
notify.configSender(address);
InetSocketAddress address =
new InetSocketAddress(register.getSender().getAddress(), MAP_NOTIFY_PORT);
notify.configSender(address);
register.getMapRecords().forEach(record -> {
LispEidRecord eidRecord =
new LispEidRecord(record.getMaskLength(), record.getEidPrefixAfi());
eidRlocMap.insertMapRecord(eidRecord, record);
});
register.getMapRecords().forEach(record -> {
LispEidRecord eidRecord =
new LispEidRecord(record.getMaskLength(), record.getEidPrefixAfi());
eidRlocMap.insertMapRecord(eidRecord, record);
});
return notify;
return notify;
}
return null;
}
/**