[ovs-dev] [PATCH v2 10/12] nx-match: Add support for experimenter OXM.

Ben Pfaff blp at nicira.com
Wed Oct 8 22:41:34 UTC 2014


On Tue, Oct 07, 2014 at 10:58:55AM +0900, YAMAMOTO Takashi wrote:
> > -#define NXM_HEADER(CLASS, FIELD, HASMASK, LENGTH)                       \
> > -    (((CLASS) << 16) | ((FIELD) << 9) | ((HASMASK) << 8) | (LENGTH))
> > +#define NXM_HEADER(VENDOR, CLASS, HASMASK, FIELD, LENGTH)       \
> 
> why did you swap FIELD and HASMASK?
> it's easier for me to remember if it's in the on-wire order.
> ie. CLASS, FIELD, HASMASK, LENGTH, VENDOR.

I don't know why this happened.  I agree that the on-wire order is
better.  I made that change.

> >  static void
> > -nx_put_header__(struct ofpbuf *b, uint32_t header, bool masked)
> > +nx_put_header__(struct ofpbuf *b, uint64_t header, bool masked)
> >  {
> > -    uint32_t masked_header = masked ? nxm_make_wild_header(header) : header;
> > -    ovs_be32 network_header = htonl(masked_header);
> > +    uint64_t masked_header = masked ? nxm_make_wild_header(header) : header;
> > +    ovs_be64 network_header = htonll(masked_header);
> >  
> > -    ofpbuf_put(b, &network_header, sizeof network_header);
> > +    ofpbuf_put(b, &network_header, 4 + nxm_experimenter_len(header));
> 
> better to use nxm_header_len?

I agree.  I made that change too.  Here is the incremental that I
folded in.  Because Jarno acked this, and because you did not see any
serious problems, I applied this to master.

Thanks,

ben.

diff --git a/build-aux/extract-ofp-fields b/build-aux/extract-ofp-fields
index 88eb6d2..95714ee 100755
--- a/build-aux/extract-ofp-fields
+++ b/build-aux/extract-ofp-fields
@@ -143,7 +143,7 @@ def parse_oxm(s, prefix, n_bytes):
     if oxm_class == 0xffff:
         oxm_length += 4
 
-    header = ("NXM_HEADER(0x%x,0x%x,0,%s,%d)"
+    header = ("NXM_HEADER(0x%x,0x%x,%s,0,%d)"
               % (oxm_vendor, oxm_class, oxm_type, oxm_length))
 
     if of_version:
diff --git a/lib/nx-match.c b/lib/nx-match.c
index 13e758b..82b472c 100644
--- a/lib/nx-match.c
+++ b/lib/nx-match.c
@@ -148,7 +148,7 @@ is_nxm_header(uint64_t header)
     return nxm_class(header) <= 1;
 }
 
-#define NXM_HEADER(VENDOR, CLASS, HASMASK, FIELD, LENGTH)       \
+#define NXM_HEADER(VENDOR, CLASS, FIELD, HASMASK, LENGTH)       \
     (((uint64_t) (CLASS) << 48) |                               \
      ((uint64_t) (FIELD) << 41) |                               \
      ((uint64_t) (HASMASK) << 40) |                             \
@@ -166,15 +166,15 @@ static uint64_t
 nxm_make_exact_header(uint64_t header)
 {
     int new_len = nxm_payload_len(header) / 2 + nxm_experimenter_len(header);
-    return NXM_HEADER(nxm_vendor(header), nxm_class(header), 0,
-                      nxm_field(header), new_len);
+    return NXM_HEADER(nxm_vendor(header), nxm_class(header),
+                      nxm_field(header), 0, new_len);
 }
 static uint64_t
 nxm_make_wild_header(uint64_t header)
 {
     int new_len = nxm_payload_len(header) * 2 + nxm_experimenter_len(header);
-    return NXM_HEADER(nxm_vendor(header), nxm_class(header), 1,
-                      nxm_field(header), new_len);
+    return NXM_HEADER(nxm_vendor(header), nxm_class(header),
+                      nxm_field(header), 1, new_len);
 }
 
 /* Flow cookie.
@@ -184,7 +184,7 @@ nxm_make_wild_header(uint64_t header)
  * with specific cookies.  See the "nx_flow_mod" and "nx_flow_stats_request"
  * structure definitions for more details.  This match is otherwise not
  * allowed. */
-#define NXM_NX_COOKIE     NXM_HEADER  (0, 0x0001, 0, 30, 8)
+#define NXM_NX_COOKIE     NXM_HEADER  (0, 0x0001, 30, 0, 8)
 #define NXM_NX_COOKIE_W   nxm_make_wild_header(NXM_NX_COOKIE)
 
 struct nxm_field {
@@ -1040,7 +1040,7 @@ nx_put_header__(struct ofpbuf *b, uint64_t header, bool masked)
     uint64_t masked_header = masked ? nxm_make_wild_header(header) : header;
     ovs_be64 network_header = htonll(masked_header);
 
-    ofpbuf_put(b, &network_header, 4 + nxm_experimenter_len(header));
+    ofpbuf_put(b, &network_header, nxm_header_len(header));
 }
 
 void



More information about the dev mailing list