Committed by
Gerrit Code Review
Fix possible concurrency flaws in ArpHandler
Change-Id: I7e869453aefa580246af593c211aa98fb417f5cc
Showing
1 changed file
with
10 additions
and
9 deletions
... | @@ -88,7 +88,6 @@ public class ArpHandler { | ... | @@ -88,7 +88,6 @@ public class ArpHandler { |
88 | } | 88 | } |
89 | 89 | ||
90 | private void handleArpRequest(DeviceId deviceId, ConnectPoint inPort, Ethernet payload) { | 90 | private void handleArpRequest(DeviceId deviceId, ConnectPoint inPort, Ethernet payload) { |
91 | - | ||
92 | ARP arpRequest = (ARP) payload.getPayload(); | 91 | ARP arpRequest = (ARP) payload.getPayload(); |
93 | HostId targetHostId = HostId.hostId(MacAddress.valueOf( | 92 | HostId targetHostId = HostId.hostId(MacAddress.valueOf( |
94 | arpRequest.getTargetHardwareAddress())); | 93 | arpRequest.getTargetHardwareAddress())); |
... | @@ -98,14 +97,16 @@ public class ArpHandler { | ... | @@ -98,14 +97,16 @@ public class ArpHandler { |
98 | Ip4Address targetAddress = Ip4Address.valueOf(arpRequest.getTargetProtocolAddress()); | 97 | Ip4Address targetAddress = Ip4Address.valueOf(arpRequest.getTargetProtocolAddress()); |
99 | 98 | ||
100 | sendArpResponse(arpRequest, config.getRouterMacForAGatewayIp(targetAddress)); | 99 | sendArpResponse(arpRequest, config.getRouterMacForAGatewayIp(targetAddress)); |
101 | - // ARP request for known hosts | 100 | + } else { |
102 | - } else if (srManager.hostService.getHost(targetHostId) != null) { | 101 | + Host targetHost = srManager.hostService.getHost(targetHostId); |
103 | - MacAddress targetMac = srManager.hostService.getHost(targetHostId).mac(); | 102 | + // ARP request for known hosts |
104 | - sendArpResponse(arpRequest, targetMac); | 103 | + if (targetHost != null) { |
105 | - | 104 | + sendArpResponse(arpRequest, targetHost.mac()); |
106 | - // ARP request for unknown host in the subnet | 105 | + |
107 | - } else if (isArpReqForSubnet(deviceId, arpRequest)) { | 106 | + // ARP request for unknown host in the subnet |
108 | - flood(payload, inPort); | 107 | + } else if (isArpReqForSubnet(deviceId, arpRequest)) { |
108 | + flood(payload, inPort); | ||
109 | + } | ||
109 | } | 110 | } |
110 | } | 111 | } |
111 | 112 | ... | ... |
-
Please register or login to post a comment