Code Review
/
controller.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Merge "Integration of MDSAL into distribution"
[controller.git]
/
opendaylight
/
sal
/
api
/
src
/
main
/
java
/
org
/
opendaylight
/
controller
/
sal
/
utils
/
NetUtils.java
diff --git
a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/utils/NetUtils.java
b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/utils/NetUtils.java
index 6a3a42fbb9ba52b5414937027d53788ed5058c9e..e94021119d14f11e7581d5e68b6e096921a07725 100644
(file)
--- a/
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/utils/NetUtils.java
+++ b/
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/utils/NetUtils.java
@@
-12,6
+12,7
@@
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@
-59,20
+60,46
@@
public abstract class NetUtils {
}
/**
}
/**
- * Converts a long to 6 bytes array for mac addresses
- * @param addr
- * @return
+ * Converts a 6 bytes array into a long number MAC addresses.
+ *
+ * @param ba
+ * The 6 bytes long byte array.
+ * @return The long number.
+ * Zero is returned if {@code ba} is {@code null} or
+ * the length of it is not six.
*/
*/
+ public static long byteArray6ToLong(byte[] ba) {
+ if (ba == null || ba.length != MACAddrLengthInBytes) {
+ return 0L;
+ }
+ long num = 0L;
+ int i = 0;
+ do {
+ num <<= NumBitsInAByte;
+ num |= 0xff & ba[i];
+ i++;
+ } while (i < MACAddrLengthInBytes);
+ return num;
+ }
+ /**
+ * Converts a long number to a 6 bytes array for MAC addresses.
+ *
+ * @param addr
+ * The long number.
+ * @return The byte array.
+ */
public static byte[] longToByteArray6(long addr){
public static byte[] longToByteArray6(long addr){
- byte[] mac = new byte[6];
- for(int i = 0; i < 6; i++){
- mac[i] = (byte) (addr >> (i*8));
- }
+ byte[] mac = new byte[MACAddrLengthInBytes];
+ int i = MACAddrLengthInBytes - 1;
+ do {
+ mac[i] = (byte) addr;
+ addr >>>= NumBitsInAByte;
+ i--;
+ } while (i >= 0);
return mac;
}
return mac;
}
-
/**
* Converts an integer number into a 4 bytes array
*
/**
* Converts an integer number into a 4 bytes array
*
@@
-220,11
+247,18
@@
public abstract class NetUtils {
* Checks if the test address and mask conflicts with the filter address and
* mask
*
* Checks if the test address and mask conflicts with the filter address and
* mask
*
- * For example: testAddress: 172.28.2.23 testMask: 255.255.255.0
- * filtAddress: 172.28.1.10 testMask: 255.255.255.0 conflict
+ * For example:
+ * testAddress: 172.28.2.23
+ * testMask: 255.255.255.0
+ * filterAddress: 172.28.1.10
+ * testMask: 255.255.255.0
+ * do conflict
*
*
- * testAddress: 172.28.2.23 testMask: 255.255.255.0 filtAddress: 172.28.1.10
- * testMask: 255.255.0.0 do not conflict
+ * testAddress: 172.28.2.23
+ * testMask: 255.255.255.0
+ * filterAddress: 172.28.1.10
+ * testMask: 255.255.0.0
+ * do not conflict
*
* Null parameters are permitted
*
*
* Null parameters are permitted
*
@@
-248,7
+282,8
@@
public abstract class NetUtils {
int testMaskLen = (testMask == null) ? ((testAddress instanceof Inet4Address) ? 32 : 128) : NetUtils
.getSubnetMaskLength(testMask);
int testMaskLen = (testMask == null) ? ((testAddress instanceof Inet4Address) ? 32 : 128) : NetUtils
.getSubnetMaskLength(testMask);
- int filterMaskLen = NetUtils.getSubnetMaskLength(filterMask);
+ int filterMaskLen = (filterMask == null) ? ((testAddress instanceof Inet4Address) ? 32 : 128) : NetUtils
+ .getSubnetMaskLength(filterMask);
// Mask length check. Test mask has to be more specific than filter one
if (testMaskLen < filterMaskLen) {
// Mask length check. Test mask has to be more specific than filter one
if (testMaskLen < filterMaskLen) {
@@
-296,6
+331,19
@@
public abstract class NetUtils {
return false;
}
return false;
}
+ /**
+ * Returns true if the MAC address is a unicast MAC address and false
+ * otherwise.
+ *
+ * @param MACAddress
+ * @return
+ */
+ public static boolean isUnicastMACAddr(byte[] MACAddress) {
+ if (MACAddress.length == MACAddrLengthInBytes) {
+ return (MACAddress[0] & 1) == 0;
+ }
+ return false;
+ }
/**
* Returns true if the MAC address is a multicast MAC address and false
/**
* Returns true if the MAC address is a multicast MAC address and false
@@
-424,7
+472,7
@@
public abstract class NetUtils {
/*
* Following utilities are useful when you need to compare or bit shift java
/*
* Following utilities are useful when you need to compare or bit shift java
- * primitive type variable which are inerently signed
+ * primitive type variable which are in
h
erently signed
*/
/**
* Returns the unsigned value of the passed byte variable
*/
/**
* Returns the unsigned value of the passed byte variable
@@
-463,4
+511,14
@@
public abstract class NetUtils {
return null;
}
}
return null;
}
}
+
+ /**
+ * Returns Broadcast MAC Address
+ *
+ * @return the byte array containing broadcaset mac address
+ */
+ public static byte[] getBroadcastMACAddr() {
+ return Arrays.copyOf(BroadcastMACAddr, BroadcastMACAddr.length);
+ }
+
}
}