Merge into master from pull request #396:
add isMulticast() in IPAddress (https://github.com/floodlight/loxigen/pull/396)
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java
index e1f739d..ad21e06 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java
@@ -40,6 +40,13 @@
      */
     public abstract boolean isBroadcast();
 
+
+    /**
+     * Checks if the IPAddress is the multicast address
+     * @return boolean true or false
+     */
+    public abstract boolean isMulticast();
+
     /**
      * Perform a low level AND operation on the bits of two IPAddress objects
      * @param   other IPAddress
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java
index 1530629..53e8071 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java
@@ -90,6 +90,14 @@
         return this.equals(NO_MASK);
     }
 
+    /**
+     * IPv4 multicast addresses are defined by the leading address bits of 1110 
+     */
+    @Override
+    public boolean isMulticast() {
+        return ((rawValue >>> 24) & 0xF0) == 0xE0;
+    }
+    
     @Override
     public IPv4Address and(IPv4Address other) {
         Preconditions.checkNotNull(other, "other must not be null");
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6Address.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6Address.java
index 4660fc5..63a0087 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6Address.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6Address.java
@@ -115,6 +115,14 @@
         return this.equals(NO_MASK);
     }
 
+    /**
+     * IPv6 multicast addresses are defined by the prefix ff00::/8 
+     */
+    @Override
+    public boolean isMulticast() {
+        return (raw1 >>> 56) == 0xFFL;
+    }
+    
     @Override
     public IPv6Address and(IPv6Address other) {
         Preconditions.checkNotNull(other, "other must not be null");
diff --git a/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/IPAddressTest.java b/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/IPAddressTest.java
index 2ba4528..6e9d047 100644
--- a/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/IPAddressTest.java
+++ b/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/IPAddressTest.java
@@ -130,4 +130,17 @@
         }
     }
 
+    @Test
+    public void testMulticastIp() {
+        IPAddress<?> ip0 = IPAddress.of("240.2.3.4");
+        IPAddress<?> ip1 = IPAddress.of("224.0.1.1");
+        IPAddress<?> ip2 = IPAddress.of("239.0.0.0");
+        IPAddress<?> ip3 = IPAddress.of("feff::1");
+        IPAddress<?> ip4 = IPAddress.of("ff00::1");
+        assertTrue(!ip0.isMulticast());
+        assertTrue(ip1.isMulticast());
+        assertTrue(ip2.isMulticast());
+        assertTrue(!ip3.isMulticast());
+        assertTrue(ip4.isMulticast());
+    }
 }