java_gen: separate VlanVid and OFVlanVidMatch + push version to 0.3.1
OF1.3 specifies the concept of a 'PRESENT' bit (0x1000) that gets
added to the 12 bit VlanVid to indicate presence of a tagged vlan.
While the standard is unclear, our reading is that this is only
relevant for use in match fields/oxms (not in actions).
This commit accordingly splits up VlanVid into
- a new VlanVid class (which just represents the concept of a 12-bit
VLAN tag, as specified by 802.1Q), and
- OFVlanVidMatch (which represents the concepts of an OF1.3 VlanTag
+ Presence Bit, as spec'ed in OF1.3 for matches).
As this is an API-incompatible change, the artifact version has
been pushed to 0.3.1
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanVid.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanVid.java
index d370711..b63e4dc 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanVid.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanVid.java
@@ -6,45 +6,23 @@
import com.google.common.hash.PrimitiveSink;
import com.google.common.primitives.Shorts;
-/** Represents an OpenFlow Vlan VID, as specified by the OpenFlow 1.3 spec.
- *
- * <b> Note: this is not just the 12-bit vlan tag. OpenFlow defines
- * the additional mask bits 0x1000 to represent the presence of a vlan
- * tag. This additional bit will be stripped when writing a OF1.0 value
- * tag.
- * </b>
- *
+/** Represents an 802.1Q Vlan VID (12 bits).
*
* @author Andreas Wundsam <andreas.wundsam@bigswitch.com>
*
*/
public class VlanVid implements OFValueType<VlanVid> {
- private static final short VALIDATION_MASK = 0x1FFF;
- private static final short PRESENT_VAL = 0x1000;
- private static final short VLAN_MASK = 0x0FFF;
- private static final short NONE_VAL = 0x0000;
- private static final short UNTAGGED_VAL_OF13 = (short) 0x0000;
- private static final short UNTAGGED_VAL_OF10 = (short) 0xFFFF;
+ private static final short VALIDATION_MASK = 0x0FFF;
+ private static final short ZERO_VAL = 0x0000;
final static int LENGTH = 2;
- /** presence of a VLAN tag is idicated by the presence of bit 0x1000 */
- public static final VlanVid PRESENT = new VlanVid(PRESENT_VAL);
-
/** this value means 'not set' in OF1.0 (e.g., in a match). not used elsewhere */
- public static final VlanVid NONE = new VlanVid(NONE_VAL);
+ public static final VlanVid ZERO = new VlanVid(ZERO_VAL);
/** for use with masking operations */
public static final VlanVid NO_MASK = new VlanVid((short)0xFFFF);
- public static final VlanVid FULL_MASK = NONE;
-
- /** an untagged packet is specified as 0000 in OF 1.0, but 0xFFFF in OF1.0. Special case that. */
- public static final VlanVid UNTAGGED = new VlanVid(NONE_VAL) {
- @Override
- public void write2BytesOF10(ChannelBuffer c) {
- c.writeShort(UNTAGGED_VAL_OF10);
- }
- };
+ public static final VlanVid FULL_MASK = ZERO;
private final short vid;
@@ -52,40 +30,15 @@
this.vid = vid;
}
- public static VlanVid ofRawVid(short vid) {
- if(vid == UNTAGGED_VAL_OF13)
- return UNTAGGED;
- else if(vid == PRESENT_VAL)
- return PRESENT;
- else if ((vid & VALIDATION_MASK) != vid)
+ public static VlanVid ofVlan(short vid) {
+ if ((vid & VALIDATION_MASK) != vid)
throw new IllegalArgumentException(String.format("Illegal VLAN value: %x", vid));
return new VlanVid(vid);
}
- public static VlanVid ofVlan(int vlan) {
- if( (vlan & VLAN_MASK) != vlan)
- throw new IllegalArgumentException(String.format("Illegal VLAN value: %x", vlan));
- return ofRawVid( (short) (vlan | PRESENT_VAL));
- }
-
- public static VlanVid ofVlanOF10(short of10vlan) {
- if(of10vlan == NONE_VAL) {
- return NONE;
- } else if(of10vlan == UNTAGGED_VAL_OF10) {
- return UNTAGGED;
- } else {
- return ofVlan(of10vlan);
- }
- }
-
- /** @return whether or not this VlanId has the present (0x1000) bit set */
- public boolean isPresentBitSet() {
- return (vid & PRESENT_VAL) != 0;
- }
-
/** @return the actual VLAN tag this vid identifies */
public short getVlan() {
- return (short) (vid & VLAN_MASK);
+ return vid;
}
@Override
@@ -109,17 +62,11 @@
return "0x" + Integer.toHexString(vid);
}
- public short getRawVid() {
- return vid;
- }
-
-
@Override
public int getLength() {
return LENGTH;
}
-
volatile byte[] bytesCache = null;
public byte[] getBytes() {
@@ -144,22 +91,19 @@
}
public static VlanVid read2Bytes(ChannelBuffer c) throws OFParseError {
- return VlanVid.ofRawVid(c.readShort());
- }
-
- public static VlanVid read2BytesOF10(ChannelBuffer c) throws OFParseError {
- return VlanVid.ofVlanOF10(c.readShort());
+ return VlanVid.ofVlan(c.readShort());
}
@Override
public VlanVid applyMask(VlanVid mask) {
- return VlanVid.ofRawVid((short)(this.vid & mask.vid));
+ return VlanVid.ofVlan((short)(this.vid & mask.vid));
}
@Override
public int compareTo(VlanVid o) {
return Shorts.compare(vid, o.vid);
}
+
@Override
public void putTo(PrimitiveSink sink) {
sink.putShort(vid);