Experimenter bit is misunderstood
ZoltanLajosKis opened this issue · 3 comments
The convention so far was that experimenter versions (i.e., those before 1.0) were marked with MSB set (e.g., 0x81, 0x99), whereas regular versions (i.e., 1.0 - 1.3) has the MSB set to 0 (e.g. 0x00, 0x01).
For example when using OpenFlow 1.2, the wire protocol will always be set to 0x03. (The MSB has nothing to do with experimenter message types, etc.) So the 'experimenter' field in #ofp_message record is not needed.
Also there is no experimenter bit in actions or instructions: those experimenters always have the type 0xffff. So defining and checking the OFP[I|A]T_EXPERIMENTER_BIT is unnecessary.
To quote the 1.2 specification:
During the current draft phase of the OpenFlow Protocol, the most significant bit will be set to indicate an experimental version and the lower bits will indicate a revision number.
...and 1.3:
During the earlier draft phase of the OpenFlow Protocol, the most signicant bit was set to indicate an experimental version.
That's why we still wanted to have this boolean value in the header, even if it's not used by newer versions.
The OTP[I|A]T_EXPERIMENTER_BITS
are used when encoding a bitmap of supported actions and instructions in ofp_table_stats_reply
in 1.2, so if I didn't miss something we need them.
My point is that 0x03 and 0x83 are two completely separate protocol versions, just as 0x03 and 0x04 are. It is not valid to call 0x83 an experimental 0x03. You would use ofp_v3 to decode/encode the former, and ofp_v83 to decode/encode the latter.
I'm not aware of experimenter bits in ofp_table_stats_reply. In OF 1.1, and 1.2 only non-experimenter actions and instructions are reported (see: "Experimenter actions should not be reported via this bitmask"). In OF 1.3 this has been redesigned to return an explicit list of all supported types instead of a bitmask.
Ok, thanks for your clarifications. Let's make a bug out of it then ;) The specification is not always very clear on things, but what you're saying is absolutely right.