Committed by
Gerrit Code Review
ProxyArpManager: Factor out common logic for handling ARP and NDP packets.
Change-Id: I0709f9cda2506f01dbc912b8c3e12443ec217fed
Showing
4 changed files
with
15 additions
and
25 deletions
... | @@ -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,31 +175,26 @@ public class HostMonitor implements TimerTask { | ... | @@ -180,31 +175,26 @@ 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) { |
193 | Ethernet probePacket = null; | 188 | Ethernet probePacket = null; |
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, | ... | ... |
This diff is collapsed. Click to expand it.
-
Please register or login to post a comment