Pavlin Radoslavov

Use the correct IPv6 source address when forwarding NDP requests

on external ports.

This fixes ONOS-1021

Also, a minor optimization when forwarding the ARP or NDP request
on external ports.

Change-Id: Ic745e1af1f0a0602751977726a850f48afe84262
...@@ -176,6 +176,7 @@ public class ProxyArpManager implements ProxyArpService { ...@@ -176,6 +176,7 @@ public class ProxyArpManager implements ProxyArpService {
176 pa.vlan().equals(vlan)) { 176 pa.vlan().equals(vlan)) {
177 matched = true; 177 matched = true;
178 sendTo(eth, pa.connectPoint()); 178 sendTo(eth, pa.connectPoint());
179 + break;
179 } 180 }
180 } 181 }
181 } 182 }
...@@ -246,7 +247,7 @@ public class ProxyArpManager implements ProxyArpService { ...@@ -246,7 +247,7 @@ public class ProxyArpManager implements ProxyArpService {
246 // it could be a request from an internal host to an external 247 // it could be a request from an internal host to an external
247 // address. Forward it over to the correct ports. 248 // address. Forward it over to the correct ports.
248 Ip6Address source = 249 Ip6Address source =
249 - Ip6Address.valueOf(nsol.getTargetAddress()); 250 + Ip6Address.valueOf(ipv6.getSourceAddress());
250 Set<PortAddresses> sourceAddresses = findPortsInSubnet(source); 251 Set<PortAddresses> sourceAddresses = findPortsInSubnet(source);
251 boolean matched = false; 252 boolean matched = false;
252 for (PortAddresses pa : sourceAddresses) { 253 for (PortAddresses pa : sourceAddresses) {
...@@ -255,6 +256,7 @@ public class ProxyArpManager implements ProxyArpService { ...@@ -255,6 +256,7 @@ public class ProxyArpManager implements ProxyArpService {
255 pa.vlan().equals(vlan)) { 256 pa.vlan().equals(vlan)) {
256 matched = true; 257 matched = true;
257 sendTo(eth, pa.connectPoint()); 258 sendTo(eth, pa.connectPoint());
259 + break;
258 } 260 }
259 } 261 }
260 } 262 }
......