Implemented a mechanism to easily add and access Neighbor Discovery protocol
packet options.
Fixes ONOS-1011
Change-Id: I94daa3f3c1297fb9a7b44901927738a29aff030a
diff --git a/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java b/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java
index c2b5b0c..7b1f2a4 100644
--- a/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java
+++ b/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java
@@ -25,7 +25,6 @@
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onlab.packet.ARP;
-import org.onlab.packet.Data;
import org.onlab.packet.Ethernet;
import org.onlab.packet.ICMP6;
import org.onlab.packet.IPv6;
@@ -35,6 +34,7 @@
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
import org.onlab.packet.ndp.NeighborAdvertisement;
+import org.onlab.packet.ndp.NeighborDiscoveryOptions;
import org.onlab.packet.ndp.NeighborSolicitation;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Device;
@@ -548,21 +548,10 @@
nadv.setTargetAddress(srcIp.toOctets());
nadv.setSolicitedFlag((byte) 1);
nadv.setOverrideFlag((byte) 1);
- byte[] nadvData =
- new byte[NeighborAdvertisement.OPTION_LENGTH_IEEE802_ADDRESS];
- ByteBuffer bbNadv = ByteBuffer.wrap(nadvData);
- byte nadvOptionType =
- NeighborAdvertisement.OPTION_TYPE_TARGET_LL_ADDRESS;
- // The Option length in 8-octets units
- byte nadvOptionLength =
- (NeighborAdvertisement.OPTION_LENGTH_IEEE802_ADDRESS + 7) / 8;
- bbNadv.put(nadvOptionType);
- bbNadv.put(nadvOptionLength);
- bbNadv.put(srcMac.toBytes());
- Data nadvPayload = new Data();
- nadv.setPayload(nadvPayload.deserialize(nadvData, 0, nadvData.length));
- icmp6.setPayload(nadv);
+ nadv.addOption(NeighborDiscoveryOptions.TYPE_TARGET_LL_ADDRESS,
+ srcMac.toBytes());
+ icmp6.setPayload(nadv);
ipv6.setPayload(icmp6);
eth.setPayload(ipv6);
return eth;