Jonathan Hart
Committed by Gerrit Code Review

ProxyArpManager: Factor out common logic for handling ARP and NDP packets.

Change-Id: I0709f9cda2506f01dbc912b8c3e12443ec217fed
...@@ -82,7 +82,7 @@ public class ProxyArp { ...@@ -82,7 +82,7 @@ public class ProxyArp {
82 82
83 packetService.addProcessor(processor, PacketProcessor.director(1)); 83 packetService.addProcessor(processor, PacketProcessor.director(1));
84 readComponentConfiguration(context); 84 readComponentConfiguration(context);
85 - requestPackests(); 85 + requestPackets();
86 86
87 log.info("Started with Application ID {}", appId.id()); 87 log.info("Started with Application ID {}", appId.id());
88 } 88 }
...@@ -99,13 +99,13 @@ public class ProxyArp { ...@@ -99,13 +99,13 @@ public class ProxyArp {
99 @Modified 99 @Modified
100 public void modified(ComponentContext context) { 100 public void modified(ComponentContext context) {
101 readComponentConfiguration(context); 101 readComponentConfiguration(context);
102 - requestPackests(); 102 + requestPackets();
103 } 103 }
104 104
105 /** 105 /**
106 * Request packet in via PacketService. 106 * Request packet in via PacketService.
107 */ 107 */
108 - private void requestPackests() { 108 + private void requestPackets() {
109 TrafficSelector.Builder selectorBuilder = 109 TrafficSelector.Builder selectorBuilder =
110 DefaultTrafficSelector.builder(); 110 DefaultTrafficSelector.builder();
111 selectorBuilder.matchEthType(TYPE_ARP); 111 selectorBuilder.matchEthType(TYPE_ARP);
......
...@@ -21,7 +21,7 @@ import org.onosproject.net.ConnectPoint; ...@@ -21,7 +21,7 @@ import org.onosproject.net.ConnectPoint;
21 import org.onosproject.net.packet.PacketContext; 21 import org.onosproject.net.packet.PacketContext;
22 22
23 /** 23 /**
24 - * Service for processing arp requests on behalf of applications. 24 + * Service for processing ARP or NDP requests on behalf of applications.
25 */ 25 */
26 // TODO: move to the peer host package 26 // TODO: move to the peer host package
27 public interface ProxyArpService { 27 public interface ProxyArpService {
......
...@@ -33,8 +33,6 @@ import org.onosproject.net.ConnectPoint; ...@@ -33,8 +33,6 @@ import org.onosproject.net.ConnectPoint;
33 import org.onosproject.net.Host; 33 import org.onosproject.net.Host;
34 import org.onosproject.net.flow.DefaultTrafficTreatment; 34 import org.onosproject.net.flow.DefaultTrafficTreatment;
35 import org.onosproject.net.flow.TrafficTreatment; 35 import org.onosproject.net.flow.TrafficTreatment;
36 -import org.onosproject.net.flow.instructions.Instruction;
37 -import org.onosproject.net.flow.instructions.Instructions;
38 import org.onosproject.net.host.HostProvider; 36 import org.onosproject.net.host.HostProvider;
39 import org.onosproject.net.host.InterfaceIpAddress; 37 import org.onosproject.net.host.InterfaceIpAddress;
40 import org.onosproject.net.packet.DefaultOutboundPacket; 38 import org.onosproject.net.packet.DefaultOutboundPacket;
...@@ -43,9 +41,7 @@ import org.onosproject.net.packet.PacketService; ...@@ -43,9 +41,7 @@ import org.onosproject.net.packet.PacketService;
43 import org.onosproject.net.provider.ProviderId; 41 import org.onosproject.net.provider.ProviderId;
44 42
45 import java.nio.ByteBuffer; 43 import java.nio.ByteBuffer;
46 -import java.util.ArrayList;
47 import java.util.Collections; 44 import java.util.Collections;
48 -import java.util.List;
49 import java.util.Set; 45 import java.util.Set;
50 import java.util.concurrent.ConcurrentHashMap; 46 import java.util.concurrent.ConcurrentHashMap;
51 import java.util.concurrent.ConcurrentMap; 47 import java.util.concurrent.ConcurrentMap;
...@@ -149,7 +145,7 @@ public class HostMonitor implements TimerTask { ...@@ -149,7 +145,7 @@ public class HostMonitor implements TimerTask {
149 Set<Host> hosts = hostManager.getHostsByIp(ip); 145 Set<Host> hosts = hostManager.getHostsByIp(ip);
150 146
151 if (hosts.isEmpty()) { 147 if (hosts.isEmpty()) {
152 - sendArpNdpRequest(ip); 148 + sendRequest(ip);
153 } else { 149 } else {
154 for (Host host : hosts) { 150 for (Host host : hosts) {
155 HostProvider provider = hostProviders.get(host.providerId()); 151 HostProvider provider = hostProviders.get(host.providerId());
...@@ -166,12 +162,11 @@ public class HostMonitor implements TimerTask { ...@@ -166,12 +162,11 @@ public class HostMonitor implements TimerTask {
166 } 162 }
167 163
168 /** 164 /**
169 - * Sends an ARP or Neighbor Discovery Protocol request for the given IP 165 + * Sends an ARP or NDP request for the given IP address.
170 - * address.
171 * 166 *
172 * @param targetIp IP address to send the request for 167 * @param targetIp IP address to send the request for
173 */ 168 */
174 - private void sendArpNdpRequest(IpAddress targetIp) { 169 + private void sendRequest(IpAddress targetIp) {
175 Interface intf = interfaceService.getMatchingInterface(targetIp); 170 Interface intf = interfaceService.getMatchingInterface(targetIp);
176 171
177 if (intf == null) { 172 if (intf == null) {
...@@ -180,13 +175,13 @@ public class HostMonitor implements TimerTask { ...@@ -180,13 +175,13 @@ public class HostMonitor implements TimerTask {
180 175
181 for (InterfaceIpAddress ia : intf.ipAddresses()) { 176 for (InterfaceIpAddress ia : intf.ipAddresses()) {
182 if (ia.subnetAddress().contains(targetIp)) { 177 if (ia.subnetAddress().contains(targetIp)) {
183 - sendArpNdpProbe(intf.connectPoint(), targetIp, ia.ipAddress(), 178 + sendProbe(intf.connectPoint(), targetIp, ia.ipAddress(),
184 intf.mac(), intf.vlan()); 179 intf.mac(), intf.vlan());
185 } 180 }
186 } 181 }
187 } 182 }
188 183
189 - private void sendArpNdpProbe(ConnectPoint connectPoint, 184 + private void sendProbe(ConnectPoint connectPoint,
190 IpAddress targetIp, 185 IpAddress targetIp,
191 IpAddress sourceIp, MacAddress sourceMac, 186 IpAddress sourceIp, MacAddress sourceMac,
192 VlanId vlan) { 187 VlanId vlan) {
...@@ -194,17 +189,12 @@ public class HostMonitor implements TimerTask { ...@@ -194,17 +189,12 @@ public class HostMonitor implements TimerTask {
194 189
195 if (targetIp.isIp4()) { 190 if (targetIp.isIp4()) {
196 // IPv4: Use ARP 191 // IPv4: Use ARP
197 - probePacket = buildArpRequest(targetIp, sourceIp, sourceMac, 192 + probePacket = buildArpRequest(targetIp, sourceIp, sourceMac, vlan);
198 - vlan);
199 } else { 193 } else {
200 // IPv6: Use Neighbor Discovery 194 // IPv6: Use Neighbor Discovery
201 - probePacket = buildNdpRequest(targetIp, sourceIp, sourceMac, 195 + probePacket = buildNdpRequest(targetIp, sourceIp, sourceMac, vlan);
202 - vlan);
203 } 196 }
204 197
205 - List<Instruction> instructions = new ArrayList<>();
206 - instructions.add(Instructions.createOutput(connectPoint.port()));
207 -
208 TrafficTreatment treatment = DefaultTrafficTreatment.builder() 198 TrafficTreatment treatment = DefaultTrafficTreatment.builder()
209 .setOutput(connectPoint.port()) 199 .setOutput(connectPoint.port())
210 .build(); 200 .build();
...@@ -273,7 +263,7 @@ public class HostMonitor implements TimerTask { ...@@ -273,7 +263,7 @@ public class HostMonitor implements TimerTask {
273 icmp6.setIcmpType(ICMP6.NEIGHBOR_SOLICITATION); 263 icmp6.setIcmpType(ICMP6.NEIGHBOR_SOLICITATION);
274 icmp6.setIcmpCode((byte) 0); 264 icmp6.setIcmpCode((byte) 0);
275 265
276 - // Create the Neighbor Solication packet 266 + // Create the Neighbor Solicitation packet
277 NeighborSolicitation ns = new NeighborSolicitation(); 267 NeighborSolicitation ns = new NeighborSolicitation();
278 ns.setTargetAddress(targetIp.toOctets()); 268 ns.setTargetAddress(targetIp.toOctets());
279 ns.addOption(NeighborDiscoveryOptions.TYPE_SOURCE_LL_ADDRESS, 269 ns.addOption(NeighborDiscoveryOptions.TYPE_SOURCE_LL_ADDRESS,
......