FlowForwarding/of_protocol

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.

rpt commented

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 signi cant 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.

rpt commented

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.