adding isBroadcast and isMulticast functions to Ethernet
[controller.git] / opendaylight / sal / api / src / main / java / org / opendaylight / controller / sal / utils / NetUtils.java
index 8aee1cc37f474492916894d4b121dced2066e106..4b42cb7669d5dca28b343774a9c07d841b3c1645 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
      *