Merge pull request #4 from yotamhc/in_ports_masked2

In ports masked2
diff --git a/java_gen/java_model.py b/java_gen/java_model.py
index f2983af..f30ab1b 100644
--- a/java_gen/java_model.py
+++ b/java_gen/java_model.py
@@ -230,8 +230,8 @@
                 "OFOxmMplsLabelMasked":     OxmMapEntry("U32", "MPLS_LABEL", True),
                 "OFOxmMplsTc":              OxmMapEntry("U8", "MPLS_TC", False),
                 "OFOxmMplsTcMasked":        OxmMapEntry("U8", "MPLS_TC", True),
-                "OFOxmBsnInPorts128":       OxmMapEntry("OFPortBitmap", "BSN_IN_PORTS_128", False),
-                "OFOxmBsnInPorts128Masked": OxmMapEntry("OFPortBitmap", "BSN_IN_PORTS_128", True)
+                "OFOxmBsnInPorts128":       OxmMapEntry("OFBitMask128", "BSN_IN_PORTS_128", False),
+                "OFOxmBsnInPorts128Masked": OxmMapEntry("OFBitMask128", "BSN_IN_PORTS_128", True)
                 }
 
     # Registry of nullable properties:
diff --git a/java_gen/java_type.py b/java_gen/java_type.py
index 16e9183..82510d2 100644
--- a/java_gen/java_type.py
+++ b/java_gen/java_type.py
@@ -380,10 +380,10 @@
 table_stats_wildcards = JType("int") \
         .op(read='bb.readInt()',
             write='bb.writeInt($name)')
-port_bitmap = JType('OFPortBitmap') \
-            .op(read='OFPortBitmap.read16Bytes(bb)',
+port_bitmap = JType('OFBitMask128') \
+            .op(read='OFBitMask128.read16Bytes(bb)',
                 write='$name.write16Bytes(bb)',
-                default='OFPortBitmap.NONE')
+                default='OFBitMask128.NONE')
 table_id = JType("TableId") \
         .op(read='TableId.readByte(bb)',
             write='$name.writeByte(bb)',
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java
index 3eaaa95..5df7012 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java
@@ -13,7 +13,7 @@
 import org.projectfloodlight.openflow.types.MacAddress;
 import org.projectfloodlight.openflow.types.OFMetadata;
 import org.projectfloodlight.openflow.types.OFPort;
-import org.projectfloodlight.openflow.types.OFPortBitmap;
+import org.projectfloodlight.openflow.types.OFBitMask128;
 import org.projectfloodlight.openflow.types.OFValueType;
 import org.projectfloodlight.openflow.types.TransportPort;
 import org.projectfloodlight.openflow.types.U32;
@@ -171,8 +171,8 @@
             new MatchField<U8>("mpls_tc", MatchFields.MPLS_TC,
                     new Prerequisite<EthType>(MatchField.ETH_TYPE, EthType.MPLS_UNICAST, EthType.MPLS_MULTICAST));
 
-    public final static MatchField<OFPortBitmap> BSN_IN_PORTS_128 =
-            new MatchField<OFPortBitmap>("bsn_in_port_masked_128", MatchFields.BSN_IN_PORTS_128);
+    public final static MatchField<OFBitMask128> BSN_IN_PORTS_128 =
+            new MatchField<OFBitMask128>("bsn_in_port_masked_128", MatchFields.BSN_IN_PORTS_128);
 
     public String getName() {
         return name;
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortBitmap.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask128.java
similarity index 64%
rename from java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortBitmap.java
rename to java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask128.java
index ecf9bc5..2827a72 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortBitmap.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask128.java
@@ -2,27 +2,27 @@
 
 import org.jboss.netty.buffer.ChannelBuffer;
 
-public class OFPortBitmap implements OFValueType<OFPortBitmap> {
+public class OFBitMask128 implements OFValueType<OFBitMask128> {
 
     static final int LENGTH = 16;
 
     private final long raw1; // MSBs (ports 64-127)
     private final long raw2; // LSBs (ports 0-63)
 
-    public static final OFPortBitmap ALL = new OFPortBitmap(-1, -1);
-    public static final OFPortBitmap NONE = new OFPortBitmap(0, 0);
+    public static final OFBitMask128 ALL = new OFBitMask128(-1, -1);
+    public static final OFBitMask128 NONE = new OFBitMask128(0, 0);
 
-    private OFPortBitmap(long raw1, long raw2) {
+    private OFBitMask128(long raw1, long raw2) {
         this.raw1 = raw1;
         this.raw2 = raw2;
     }
 
-    static OFPortBitmap of(long raw1, long raw2) {
+    static OFBitMask128 of(long raw1, long raw2) {
         if (raw1 == -1 && raw2 == -1)
             return ALL;
         if (raw1 == 0 && raw2 == 0)
             return NONE;
-        return new OFPortBitmap(raw1, raw2);
+        return new OFBitMask128(raw1, raw2);
     }
 
     @Override
@@ -31,15 +31,15 @@
     }
 
     @Override
-    public OFPortBitmap applyMask(OFPortBitmap mask) {
+    public OFBitMask128 applyMask(OFBitMask128 mask) {
         return of(this.raw1 & mask.raw1, this.raw2 & mask.raw2);
     }
 
     @Override
     public boolean equals(Object obj) {
-        if (!(obj instanceof OFPortBitmap))
+        if (!(obj instanceof OFBitMask128))
             return false;
-        OFPortBitmap other = (OFPortBitmap)obj;
+        OFBitMask128 other = (OFBitMask128)obj;
         return (other.raw1 == this.raw1 && other.raw2 == this.raw2);
     }
 
@@ -50,7 +50,7 @@
 
     protected static boolean isBitOn(long raw1, long raw2, int bit) {
         if (bit < 0 || bit >= 128)
-            throw new IndexOutOfBoundsException("Port number is out of bounds");
+            throw new IndexOutOfBoundsException();
         long word;
         if (bit < 64) {
             word = raw2; // ports 0-63
@@ -61,20 +61,19 @@
         return (word & ((long)1 << bit)) != 0;
     }
 
-
     public void write16Bytes(ChannelBuffer cb) {
         cb.writeLong(raw1);
         cb.writeLong(raw2);
     }
 
-    public static OFPortBitmap read16Bytes(ChannelBuffer cb) {
+    public static OFBitMask128 read16Bytes(ChannelBuffer cb) {
         long raw1 = cb.readLong();
         long raw2 = cb.readLong();
         return of(raw1, raw2);
     }
 
-    public boolean isOn(OFPort port) {
-        return isBitOn(raw1, raw2, port.getPortNumber());
+    public boolean isOn(int bit) {
+        return isBitOn(raw1, raw2, bit);
     }
 
     @Override
@@ -82,4 +81,12 @@
         return (String.format("%64s", Long.toBinaryString(raw2)) + String.format("%64s", Long.toBinaryString(raw1))).replaceAll(" ", "0");
     }
 
+    @Override
+    public int compareTo(OFBitMask128 o) {
+        long c = this.raw1 - o.raw1;
+        if (c != 0)
+            return Long.signum(c);
+        return Long.signum(this.raw2 - o.raw2);
+    }
+
 }
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortMap.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortMap.java
index 0454d39..8ec056e 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortMap.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPortMap.java
@@ -1,14 +1,14 @@
 package org.projectfloodlight.openflow.types;
 
 
-public class OFPortMap extends Masked<OFPortBitmap> {
+public class OFPortMap extends Masked<OFBitMask128> {
 
-    private OFPortMap(OFPortBitmap mask) {
-        super(OFPortBitmap.NONE, mask);
+    private OFPortMap(OFBitMask128 mask) {
+        super(OFBitMask128.NONE, mask);
     }
 
     public boolean isOn(OFPort port) {
-        return this.mask.isOn(port);
+        return !(this.mask.isOn(port.getPortNumber()));
     }
 
     public static OFPortMap ofPorts(OFPort... ports) {
@@ -33,19 +33,19 @@
     }
 
     public static class Builder {
-        private long raw1, raw2;
+        private long raw1 = -1, raw2 = -1;
 
         public Builder() {
 
         }
 
         public boolean isOn(OFPort port) {
-            return OFPortBitmap.isBitOn(raw1, raw2, port.getPortNumber());
+            return !(OFBitMask128.isBitOn(raw1, raw2, port.getPortNumber()));
         }
 
-        public Builder set(OFPort port) {
+        public Builder unset(OFPort port) {
             int bit = port.getPortNumber();
-            if (bit < 0 || bit >= 128)
+            if (bit < 0 || bit >= 127) // MAX PORT IS 127
                 throw new IndexOutOfBoundsException("Port number is out of bounds");
             if (bit < 64) {
                 raw2 |= ((long)1 << bit);
@@ -55,9 +55,9 @@
             return this;
         }
 
-        public Builder unset(OFPort port) {
+        public Builder set(OFPort port) {
             int bit = port.getPortNumber();
-            if (bit < 0 || bit >= 128)
+            if (bit < 0 || bit >= 127)
                 throw new IndexOutOfBoundsException("Port number is out of bounds");
             if (bit < 64) {
                 raw2 &= ~((long)1 << bit);
@@ -68,7 +68,7 @@
         }
 
         public OFPortMap build() {
-            return new OFPortMap(OFPortBitmap.of(raw1, raw2));
+            return new OFPortMap(OFBitMask128.of(raw1, raw2));
         }
     }
 
diff --git a/test_data/of13/oxm_bsn_in_ports_masked_128.data b/test_data/of13/oxm_bsn_in_ports_masked_128.data
index 8d5ec31..9ef5245 100644
--- a/test_data/of13/oxm_bsn_in_ports_masked_128.data
+++ b/test_data/of13/oxm_bsn_in_ports_masked_128.data
@@ -4,10 +4,10 @@
 20 # length
 00 00 00 00 00 00 00 00 # value
 00 00 00 00 00 00 00 00 # ...
-80 00 00 01 00 00 00 00 # mask
-00 00 00 00 00 02 00 01 # ...
+ff ff ff fe ff ff ff ff # mask - Only ports 0, 17, 96 are selected (and thus are zero)
+ff ff ff ff ff fd ff fe # ...
 -- python
-ofp.oxm.bsn_in_ports_128_masked(set(), set([0, 17, 96, 127]))
+ofp.oxm.bsn_in_ports_128_masked(set(), set(range(0,128)) - set((0, 17,96)))
 -- c
 obj = of_oxm_bsn_in_ports_128_masked_new(OF_VERSION_1_3);
 {
@@ -15,10 +15,10 @@
     of_oxm_bsn_in_ports_128_masked_value_set(obj, bmap);
 }
 {
-    of_bitmap_128_t bmap = { 0x8000000100000000, 0x00000000020001 };
+    of_bitmap_128_t bmap = { 0xfffffffeffffffff , 0xfffffffffffdfffe };
     of_oxm_bsn_in_ports_128_masked_value_mask_set(obj, bmap);
 }
 -- java
-OFPortMap portmap = OFPortMap.ofPorts(OFPort.of(0), OFPort.of(17), OFPort.of(96), OFPort.of(127));
+OFPortMap portmap = OFPortMap.ofPorts(OFPort.of(0), OFPort.of(17), OFPort.of(96));
 builder.setValue(portmap.getValue());
 builder.setMask(portmap.getMask());