adding isBroadcast and isMulticast functions to Ethernet 71/571/2
authorColin Dixon <ckd@us.ibm.com>
Fri, 5 Jul 2013 22:50:23 +0000 (17:50 -0500)
committerColin Dixon <ckd@us.ibm.com>
Fri, 5 Jul 2013 23:26:13 +0000 (18:26 -0500)
Change-Id: I8777ed281261d062b57cbeae00317c955c4b6385
Signed-off-by: Colin Dixon <ckd@us.ibm.com>
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/packet/Ethernet.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/utils/NetUtils.java

index 7f151c9..d006856 100644 (file)
@@ -16,6 +16,7 @@ import java.util.Map;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.opendaylight.controller.sal.utils.EtherTypes;
+import org.opendaylight.controller.sal.utils.NetUtils;
 
 /**
  * Class that represents the Ethernet frame objects
@@ -102,6 +103,14 @@ public class Ethernet extends Packet {
         return BitBufferHelper.getShort(fieldValues.get(ETHT));
     }
 
+    public boolean isBroadcast(){
+        return NetUtils.isBroadcastMACAddr(getDestinationMACAddress());
+    }
+
+    public boolean isMulticast(){
+        return NetUtils.isMulticastMACAddr(getDestinationMACAddress());
+    }
+
     /**
      * Sets the destination MAC address for the current Ethernet object instance
      * @param byte[] - the destinationMACAddress to set
index 8aee1cc..4b42cb7 100644 (file)
@@ -38,6 +38,11 @@ public abstract class NetUtils {
      */
     public static final int MACAddrLengthInWords = 3;
 
+    /**
+     * Constant holding the broadcast MAC address
+     */
+    public static byte[] BroadcastMACAddr = {-1, -1, -1, -1, -1, -1};
+
     /**
      * Converts a 4 bytes array into an integer number
      *
@@ -275,6 +280,43 @@ public abstract class NetUtils {
         return true;
     }
 
+    /**
+     * Returns true if the MAC address is the broadcast MAC address and false
+     * otherwise.
+     *
+     * @param MACAddress
+     * @return
+     */
+    public static boolean isBroadcastMACAddr(byte[] MACAddress) {
+        if (MACAddress.length == MACAddrLengthInBytes) {
+            for (int i = 0; i < 6; i++) {
+                if (MACAddress[i] != BroadcastMACAddr[i]) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns true if the MAC address is a multicast MAC address and false
+     * otherwise. Note that this explicitly returns false for the broadcast MAC
+     * address.
+     *
+     * @param MACAddress
+     * @return
+     */
+    public static boolean isMulticastMACAddr(byte[] MACAddress) {
+        if (MACAddress.length == MACAddrLengthInBytes && !isBroadcastMACAddr(MACAddress)) {
+            if (MACAddress[0] % 2 == 1) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Returns true if the passed InetAddress contains all zero
      *