Adding srcMac to odl-arputil since ARP src mac is currently set to 24/44924/3
authorRavit Peretz <ravit.peretz@hpe.com>
Wed, 31 Aug 2016 12:32:41 +0000 (15:32 +0300)
committerRavit Peretz <ravit.peretz@hpe.com>
Wed, 31 Aug 2016 12:58:17 +0000 (15:58 +0300)
the OF port's mac internally and cannot be set externnaly.
(e.g. in the case of GARP for floating ip we would
want to use the floatingIp port's logical mac)

Change-Id: I44f7afba8110745e50963a9a8d0d9d89d31e59fe
Signed-off-by: Ravit Peretz <ravit.peretz@hpe.com>
arputil/arputil-api/src/main/yang/odl-arputil.yang
arputil/arputil-impl/src/main/java/org/opendaylight/genius/arputil/internal/ArpUtilImpl.java

index c637f4e8112dcafca1a3f54e9c2444586ca0b009..ee456ebdd9b146d9dabe8572a7d5792de88940df 100644 (file)
@@ -39,6 +39,9 @@ module odl-arputil {
            leaf ip-address {
                 type inet:ip-address;
            }
+           leaf macaddress {
+                type yang:phys-address;
+            }
         }
     }
 
index 2f93e7e3fca3ac1e0747e6a966cf466959779742..21bc23de3d4e8d004caf67bcd4dc71f897788e70 100644 (file)
@@ -240,6 +240,7 @@ public class ArpUtilImpl implements OdlArputilService,
         String interfaceName = null;
         byte srcIpBytes[];
         byte[] dstIpBytes = null;
+        byte[] srcMac = null;
 
         RpcResultBuilder<Void> failureBuilder = RpcResultBuilder
                 .<Void> failed();
@@ -279,9 +280,15 @@ public class ArpUtilImpl implements OdlArputilService,
                             "sendArpRequest received dpnId {} out interface {}",
                             dpnId, interfaceName);
                 }
-                byte srcMac[] = MDSALUtil.getMacAddressForNodeConnector(
-                        dataBroker,
-                        (InstanceIdentifier<NodeConnector>) ref.getValue());
+                if (interfaceAddress.getMacaddress() == null) {
+                    srcMac = MDSALUtil.getMacAddressForNodeConnector(
+                            dataBroker,
+                            (InstanceIdentifier<NodeConnector>) ref.getValue());
+                } else {
+                    String macAddr = interfaceAddress.getMacaddress().getValue();
+                    srcMac = HexEncode.bytesFromHexString(macAddr);
+                }
+
                 checkNotNull(srcMac, FAILED_TO_GET_SRC_MAC_FOR_INTERFACE,
                         interfaceName, ref.getValue());
                 checkNotNull(srcIpBytes, FAILED_TO_GET_SRC_IP_FOR_INTERFACE,