mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-17 02:11:38 +02:00
Fix relay agent ip for indirect DHCPv4 packets
When only default server config is supplied The indirect traffic should be relayed to default server When both default and indirect config is supplied The indirect traffic should be relayed to indirect server When relay agent IP is not specified in either direct or indirect config For direct clients, use client interface IP as relay agent IP For indirect clients, keep original relay agent IP in the DHCP packet Change-Id: I065e1adf25c942e19240efd5192b50333a650ad1
This commit is contained in:
parent
530917c387
commit
d0d1e3360b
@ -521,12 +521,13 @@ public class Dhcp4HandlerImpl implements DhcpHandler, HostProvider {
|
||||
}
|
||||
|
||||
etherReply.setSourceMACAddress(macFacingServer);
|
||||
etherReply.setDestinationMACAddress(dhcpConnectMac);
|
||||
etherReply.setVlanID(dhcpConnectVlan.toShort());
|
||||
ipv4Packet.setSourceAddress(ipFacingServer.toInt());
|
||||
ipv4Packet.setDestinationAddress(dhcpServerIp.toInt());
|
||||
|
||||
if (isDirectlyConnected) {
|
||||
etherReply.setDestinationMACAddress(dhcpConnectMac);
|
||||
etherReply.setVlanID(dhcpConnectVlan.toShort());
|
||||
ipv4Packet.setDestinationAddress(dhcpServerIp.toInt());
|
||||
|
||||
ConnectPoint inPort = context.inPacket().receivedFrom();
|
||||
VlanId vlanId = VlanId.vlanId(ethernetPacket.getVlanID());
|
||||
// add connected in port and vlan
|
||||
@ -542,7 +543,7 @@ public class Dhcp4HandlerImpl implements DhcpHandler, HostProvider {
|
||||
newRelayAgentOpt.setCode(OptionCode_CircuitID.getValue());
|
||||
newRelayAgentOpt.addSubOption(circuitIdSubOpt);
|
||||
|
||||
// Removes END option first
|
||||
// Removes END option first
|
||||
List<DhcpOption> options = dhcpPacket.getOptions().stream()
|
||||
.filter(opt -> opt.getCode() != OptionCode_END.getValue())
|
||||
.collect(Collectors.toList());
|
||||
@ -557,23 +558,31 @@ public class Dhcp4HandlerImpl implements DhcpHandler, HostProvider {
|
||||
|
||||
dhcpPacket.setOptions(options);
|
||||
|
||||
// Sets giaddr to IP address from the Interface which facing to
|
||||
// DHCP client
|
||||
dhcpPacket.setGatewayIPAddress(clientInterfaceIp.toInt());
|
||||
// Sets relay agent IP
|
||||
int effectiveRelayAgentIp = relayAgentIp != null ?
|
||||
relayAgentIp.toInt() : clientInterfaceIp.toInt();
|
||||
dhcpPacket.setGatewayIPAddress(effectiveRelayAgentIp);
|
||||
} else {
|
||||
if (indirectDhcpServerIp != null) {
|
||||
// Use indirect server config for indirect packets if configured
|
||||
etherReply.setDestinationMACAddress(indirectDhcpConnectMac);
|
||||
etherReply.setVlanID(indirectDhcpConnectVlan.toShort());
|
||||
ipv4Packet.setDestinationAddress(indirectDhcpServerIp.toInt());
|
||||
|
||||
// replace giaddr if relay agent IP is set
|
||||
if (relayAgentIp != null) {
|
||||
dhcpPacket.setGatewayIPAddress(relayAgentIp.toInt());
|
||||
}
|
||||
} else if (indirectDhcpServerIp != null) {
|
||||
// Indirect case, replace destination to indirect dhcp server if exist
|
||||
etherReply.setDestinationMACAddress(indirectDhcpConnectMac);
|
||||
etherReply.setVlanID(indirectDhcpConnectVlan.toShort());
|
||||
ipv4Packet.setDestinationAddress(indirectDhcpServerIp.toInt());
|
||||
// Set giaddr if indirect relay agent IP is configured
|
||||
if (indirectRelayAgentIp != null) {
|
||||
dhcpPacket.setGatewayIPAddress(indirectRelayAgentIp.toInt());
|
||||
}
|
||||
} else {
|
||||
// Otherwise, use default server config for indirect packets
|
||||
etherReply.setDestinationMACAddress(dhcpConnectMac);
|
||||
etherReply.setVlanID(dhcpConnectVlan.toShort());
|
||||
ipv4Packet.setDestinationAddress(dhcpServerIp.toInt());
|
||||
|
||||
// replace giaddr if relay agent IP is set
|
||||
if (indirectRelayAgentIp != null) {
|
||||
dhcpPacket.setGatewayIPAddress(relayAgentIp.toInt());
|
||||
// Set giaddr if direct relay agent IP is configured
|
||||
if (relayAgentIp != null) {
|
||||
dhcpPacket.setGatewayIPAddress(relayAgentIp.toInt());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user