Daniel Park
Committed by Gerrit Code Review

[ONOS-5030] Fix to gateway ip address in host annotation refers appropriate ip address

- Fix to gateway ip address in host annotation refers right ip address, not host ip address

Change-Id: Ia07ed828d2f37e623dcca4ad204bfbaf4db2a45a
......@@ -191,8 +191,10 @@ public class OpenstackIcmpHandler {
icmpReq.setChecksum((short) 0);
icmpReq.setIcmpType(ICMP.TYPE_ECHO_REPLY).resetChecksum();
int destinationAddress = ipPacket.getSourceAddress();
ipPacket.setSourceAddress(ipPacket.getDestinationAddress())
.setDestinationAddress(ipPacket.getSourceAddress())
.setDestinationAddress(destinationAddress)
.resetChecksum();
ipPacket.setPayload(icmpReq);
......@@ -200,7 +202,7 @@ public class OpenstackIcmpHandler {
icmpReply.setEtherType(Ethernet.TYPE_IPV4)
.setSourceMACAddress(Constants.DEFAULT_GATEWAY_MAC)
.setDestinationMACAddress(reqHost.mac())
.setPayload(icmpReq);
.setPayload(ipPacket);
sendReply(icmpReply, reqHost);
}
......
......@@ -161,7 +161,15 @@ public final class OpenstackSwitchingHostManager extends AbstractProvider
return;
}
registerDhcpInfo(osPort);
OpenstackSubnet openstackSubnet = openstackService.subnets().stream()
.filter(n -> n.networkId().equals(osPort.networkId()))
.findFirst().orElse(null);
if (openstackSubnet == null) {
log.warn("Failed to find subnet for {}", osPort);
return;
}
registerDhcpInfo(osPort, openstackSubnet);
ConnectPoint connectPoint = new ConnectPoint(port.element().id(), port.number());
// TODO remove gateway IP from host annotation
Map.Entry<String, Ip4Address> fixedIp = osPort.fixedIps().entrySet().stream().findFirst().get();
......@@ -175,7 +183,7 @@ public final class OpenstackSwitchingHostManager extends AbstractProvider
.set(VXLAN_ID, osNet.segmentId())
.set(TENANT_ID, osNet.tenantId())
// TODO remove gateway IP from host annotation
.set(GATEWAY_IP, fixedIp.getValue().toString())
.set(GATEWAY_IP, openstackSubnet.gatewayIp())
.set(CREATE_TIME, String.valueOf(System.currentTimeMillis()));
HostDescription hostDesc = new DefaultHostDescription(
......@@ -202,18 +210,11 @@ public final class OpenstackSwitchingHostManager extends AbstractProvider
});
}
private void registerDhcpInfo(OpenstackPort openstackPort) {
private void registerDhcpInfo(OpenstackPort openstackPort, OpenstackSubnet openstackSubnet) {
checkNotNull(openstackPort);
checkNotNull(openstackSubnet);
checkArgument(!openstackPort.fixedIps().isEmpty());
OpenstackSubnet openstackSubnet = openstackService.subnets().stream()
.filter(n -> n.networkId().equals(openstackPort.networkId()))
.findFirst().orElse(null);
if (openstackSubnet == null) {
log.warn("Failed to find subnet for {}", openstackPort);
return;
}
Ip4Address ipAddress = openstackPort.fixedIps().values().stream().findFirst().get();
IpPrefix subnetPrefix = IpPrefix.valueOf(openstackSubnet.cidr());
Ip4Address broadcast = Ip4Address.makeMaskedAddress(
......