[ovs-dev] [of1.1 07/11] Break OFPT_* constants into common value and 1.0- and 1.1-specific values.

Ben Pfaff blp at nicira.com
Thu Feb 16 00:37:50 UTC 2012


---
 include/openflow/openflow-1.0.h    |   41 ++++++++++------------------------
 include/openflow/openflow-1.1.h    |   25 ++++++++++++++++++++-
 include/openflow/openflow-common.h |   22 ++++++++++++++++++
 lib/ofp-util.c                     |   42 ++++++++++++++++++------------------
 ofproto/ofproto.c                  |   11 ++++-----
 utilities/ovs-ofctl.c              |    7 +++--
 6 files changed, 88 insertions(+), 60 deletions(-)

diff --git a/include/openflow/openflow-1.0.h b/include/openflow/openflow-1.0.h
index 111c67a..0a535a7 100644
--- a/include/openflow/openflow-1.0.h
+++ b/include/openflow/openflow-1.0.h
@@ -43,42 +43,25 @@ enum ofp_port {
     OFPP_NONE       = 0xffff   /* Not associated with a physical port. */
 };
 
-enum ofp_type {
-    /* Immutable messages. */
-    OFPT_HELLO,               /* Symmetric message */
-    OFPT_ERROR,               /* Symmetric message */
-    OFPT_ECHO_REQUEST,        /* Symmetric message */
-    OFPT_ECHO_REPLY,          /* Symmetric message */
-    OFPT_VENDOR,              /* Symmetric message */
-
-    /* Switch configuration messages. */
-    OFPT_FEATURES_REQUEST,    /* Controller/switch message */
-    OFPT_FEATURES_REPLY,      /* Controller/switch message */
-    OFPT_GET_CONFIG_REQUEST,  /* Controller/switch message */
-    OFPT_GET_CONFIG_REPLY,    /* Controller/switch message */
-    OFPT_SET_CONFIG,          /* Controller/switch message */
-
-    /* Asynchronous messages. */
-    OFPT_PACKET_IN,           /* Async message */
-    OFPT_FLOW_REMOVED,        /* Async message */
-    OFPT_PORT_STATUS,         /* Async message */
-
+/* OpenFlow 1.0 specific message types, in addition to the common message
+ * types. */
+enum ofp10_type {
     /* Controller command messages. */
-    OFPT_PACKET_OUT,          /* Controller/switch message */
-    OFPT_FLOW_MOD,            /* Controller/switch message */
-    OFPT_PORT_MOD,            /* Controller/switch message */
+    OFPT10_PACKET_OUT = 13,     /* Controller/switch message */
+    OFPT10_FLOW_MOD,            /* Controller/switch message */
+    OFPT10_PORT_MOD,            /* Controller/switch message */
 
     /* Statistics messages. */
-    OFPT_STATS_REQUEST,       /* Controller/switch message */
-    OFPT_STATS_REPLY,         /* Controller/switch message */
+    OFPT10_STATS_REQUEST,       /* Controller/switch message */
+    OFPT10_STATS_REPLY,         /* Controller/switch message */
 
     /* Barrier messages. */
-    OFPT_BARRIER_REQUEST,     /* Controller/switch message */
-    OFPT_BARRIER_REPLY,       /* Controller/switch message */
+    OFPT10_BARRIER_REQUEST,     /* Controller/switch message */
+    OFPT10_BARRIER_REPLY,       /* Controller/switch message */
 
     /* Queue Configuration messages. */
-    OFPT_QUEUE_GET_CONFIG_REQUEST,  /* Controller/switch message */
-    OFPT_QUEUE_GET_CONFIG_REPLY     /* Controller/switch message */
+    OFPT10_QUEUE_GET_CONFIG_REQUEST,  /* Controller/switch message */
+    OFPT10_QUEUE_GET_CONFIG_REPLY     /* Controller/switch message */
 };
 
 /* Header on all OpenFlow packets. */
diff --git a/include/openflow/openflow-1.1.h b/include/openflow/openflow-1.1.h
index 93002af..02120a5 100644
--- a/include/openflow/openflow-1.1.h
+++ b/include/openflow/openflow-1.1.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008, 2011 The Board of Trustees of The Leland Stanford
+/* Copyright (c) 2008, 2011, 2012 The Board of Trustees of The Leland Stanford
  * Junior University
  *
  * We are making the OpenFlow specification and associated documentation
@@ -70,4 +70,27 @@
 #define OFPP11_MAX    0xffffff00
 #define OFPP11_OFFSET (OFPP11_MAX - OFPP_MAX)
 
+/* OpenFlow 1.1 specific message types, in addition to the common message
+ * types. */
+enum ofp11_type {
+    /* Controller command messages. */
+    OFPT11_PACKET_OUT = 13,     /* Controller/switch message */
+    OFPT11_FLOW_MOD,            /* Controller/switch message */
+    OFPT11_GROUP_MOD,           /* Controller/switch message */
+    OFPT11_PORT_MOD,            /* Controller/switch message */
+    OFPT11_TABLE_MOD,           /* Controller/switch message */
+
+    /* Statistics messages. */
+    OFPT11_STATS_REQUEST,       /* Controller/switch message */
+    OFPT11_STATS_REPLY,         /* Controller/switch message */
+
+    /* Barrier messages. */
+    OFPT11_BARRIER_REQUEST,     /* Controller/switch message */
+    OFPT11_BARRIER_REPLY,       /* Controller/switch message */
+
+    /* Queue Configuration messages. */
+    OFPT11_QUEUE_GET_CONFIG_REQUEST,  /* Controller/switch message */
+    OFPT11_QUEUE_GET_CONFIG_REPLY,    /* Controller/switch message */
+};
+
 #endif /* openflow/openflow-1.1.h */
diff --git a/include/openflow/openflow-common.h b/include/openflow/openflow-common.h
index 9163efd..d0f4b18 100644
--- a/include/openflow/openflow-common.h
+++ b/include/openflow/openflow-common.h
@@ -82,4 +82,26 @@
 
 #define OFP_ETH_ALEN 6          /* Bytes in an Ethernet address. */
 
+/* Common OpenFlow message types. */
+enum ofp_type {
+    /* Immutable messages. */
+    OFPT_HELLO,               /* Symmetric message */
+    OFPT_ERROR,               /* Symmetric message */
+    OFPT_ECHO_REQUEST,        /* Symmetric message */
+    OFPT_ECHO_REPLY,          /* Symmetric message */
+    OFPT_VENDOR,              /* Symmetric message */
+
+    /* Switch configuration messages. */
+    OFPT_FEATURES_REQUEST,    /* Controller/switch message */
+    OFPT_FEATURES_REPLY,      /* Controller/switch message */
+    OFPT_GET_CONFIG_REQUEST,  /* Controller/switch message */
+    OFPT_GET_CONFIG_REPLY,    /* Controller/switch message */
+    OFPT_SET_CONFIG,          /* Controller/switch message */
+
+    /* Asynchronous messages. */
+    OFPT_PACKET_IN,           /* Async message */
+    OFPT_FLOW_REMOVED,        /* Async message */
+    OFPT_PORT_STATUS,         /* Async message */
+};
+
 #endif /* openflow/openflow-common.h */
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index 5c80868..95aa558 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -720,31 +720,31 @@ ofputil_decode_msg_type__(const struct ofp_header *oh, size_t length,
           sizeof(struct ofp_port_status), 0 },
 
         { OFPUTIL_OFPT_PACKET_OUT, OFP10_VERSION,
-          OFPT_PACKET_OUT, "OFPT_PACKET_OUT",
+          OFPT10_PACKET_OUT, "OFPT_PACKET_OUT",
           sizeof(struct ofp_packet_out), 1 },
 
         { OFPUTIL_OFPT_FLOW_MOD, OFP10_VERSION,
-          OFPT_FLOW_MOD, "OFPT_FLOW_MOD",
+          OFPT10_FLOW_MOD, "OFPT_FLOW_MOD",
           sizeof(struct ofp_flow_mod), 1 },
 
         { OFPUTIL_OFPT_PORT_MOD, OFP10_VERSION,
-          OFPT_PORT_MOD, "OFPT_PORT_MOD",
+          OFPT10_PORT_MOD, "OFPT_PORT_MOD",
           sizeof(struct ofp_port_mod), 0 },
 
         { 0, OFP10_VERSION,
-          OFPT_STATS_REQUEST, "OFPT_STATS_REQUEST",
+          OFPT10_STATS_REQUEST, "OFPT_STATS_REQUEST",
           sizeof(struct ofp_stats_msg), 1 },
 
         { 0, OFP10_VERSION,
-          OFPT_STATS_REPLY, "OFPT_STATS_REPLY",
+          OFPT10_STATS_REPLY, "OFPT_STATS_REPLY",
           sizeof(struct ofp_stats_msg), 1 },
 
         { OFPUTIL_OFPT_BARRIER_REQUEST, OFP10_VERSION,
-          OFPT_BARRIER_REQUEST, "OFPT_BARRIER_REQUEST",
+          OFPT10_BARRIER_REQUEST, "OFPT_BARRIER_REQUEST",
           sizeof(struct ofp_header), 0 },
 
         { OFPUTIL_OFPT_BARRIER_REPLY, OFP10_VERSION,
-          OFPT_BARRIER_REPLY, "OFPT_BARRIER_REPLY",
+          OFPT10_BARRIER_REPLY, "OFPT_BARRIER_REPLY",
           sizeof(struct ofp_header), 0 },
 
         { 0, 0,
@@ -768,11 +768,11 @@ ofputil_decode_msg_type__(const struct ofp_header *oh, size_t length,
             error = ofputil_decode_vendor(oh, length, typep);
             break;
 
-        case OFPT_STATS_REQUEST:
+        case OFPT10_STATS_REQUEST:
             error = ofputil_decode_ofpst_request(oh, length, typep);
             break;
 
-        case OFPT_STATS_REPLY:
+        case OFPT10_STATS_REPLY:
             error = ofputil_decode_ofpst_reply(oh, length, typep);
 
         default:
@@ -1443,7 +1443,7 @@ ofputil_encode_flow_mod(const struct ofputil_flow_mod *fm,
     case OFPUTIL_P_OF10:
     case OFPUTIL_P_OF10_TID:
         msg = ofpbuf_new(sizeof *ofm + actions_len);
-        ofm = put_openflow(sizeof *ofm, OFPT_FLOW_MOD, msg);
+        ofm = put_openflow(sizeof *ofm, OFPT10_FLOW_MOD, msg);
         ofputil_cls_rule_to_match(&fm->cr, &ofm->match);
         ofm->cookie = fm->cookie;
         ofm->command = htons(command);
@@ -2197,7 +2197,7 @@ ofputil_encode_packet_out(const struct ofputil_packet_out *po)
     }
 
     msg = ofpbuf_new(size);
-    opo = put_openflow(sizeof *opo, OFPT_PACKET_OUT, msg);
+    opo = put_openflow(sizeof *opo, OFPT10_PACKET_OUT, msg);
     opo->buffer_id = htonl(po->buffer_id);
     opo->in_port = htons(po->in_port);
     opo->actions_len = htons(actions_len);
@@ -2388,7 +2388,7 @@ ofputil_make_stats_request(size_t openflow_len, uint16_t ofpst_type,
     struct ofpbuf *msg;
 
     msg = *bufferp = ofpbuf_new(openflow_len);
-    put_stats__(alloc_xid(), OFPT_STATS_REQUEST,
+    put_stats__(alloc_xid(), OFPT10_STATS_REQUEST,
                 htons(ofpst_type), htonl(nxst_subtype), msg);
     ofpbuf_padto(msg, openflow_len);
 
@@ -2398,9 +2398,9 @@ ofputil_make_stats_request(size_t openflow_len, uint16_t ofpst_type,
 static void
 put_stats_reply__(const struct ofp_stats_msg *request, struct ofpbuf *msg)
 {
-    assert(request->header.type == OFPT_STATS_REQUEST ||
-           request->header.type == OFPT_STATS_REPLY);
-    put_stats__(request->header.xid, OFPT_STATS_REPLY, request->type,
+    assert(request->header.type == OFPT10_STATS_REQUEST ||
+           request->header.type == OFPT10_STATS_REPLY);
+    put_stats__(request->header.xid, OFPT10_STATS_REPLY, request->type,
                 (request->type != htons(OFPST_VENDOR)
                  ? htonl(0)
                  : ((const struct nicira_stats_msg *) request)->subtype),
@@ -2482,7 +2482,7 @@ ofputil_append_stats_reply(size_t len, struct list *replies)
 const void *
 ofputil_stats_body(const struct ofp_header *oh)
 {
-    assert(oh->type == OFPT_STATS_REQUEST || oh->type == OFPT_STATS_REPLY);
+    assert(oh->type == OFPT10_STATS_REQUEST || oh->type == OFPT10_STATS_REPLY);
     return (const struct ofp_stats_msg *) oh + 1;
 }
 
@@ -2490,7 +2490,7 @@ ofputil_stats_body(const struct ofp_header *oh)
 size_t
 ofputil_stats_body_len(const struct ofp_header *oh)
 {
-    assert(oh->type == OFPT_STATS_REQUEST || oh->type == OFPT_STATS_REPLY);
+    assert(oh->type == OFPT10_STATS_REQUEST || oh->type == OFPT10_STATS_REPLY);
     return ntohs(oh->length) - sizeof(struct ofp_stats_msg);
 }
 
@@ -2498,7 +2498,7 @@ ofputil_stats_body_len(const struct ofp_header *oh)
 const void *
 ofputil_nxstats_body(const struct ofp_header *oh)
 {
-    assert(oh->type == OFPT_STATS_REQUEST || oh->type == OFPT_STATS_REPLY);
+    assert(oh->type == OFPT10_STATS_REQUEST || oh->type == OFPT10_STATS_REPLY);
     return ((const struct nicira_stats_msg *) oh) + 1;
 }
 
@@ -2506,7 +2506,7 @@ ofputil_nxstats_body(const struct ofp_header *oh)
 size_t
 ofputil_nxstats_body_len(const struct ofp_header *oh)
 {
-    assert(oh->type == OFPT_STATS_REQUEST || oh->type == OFPT_STATS_REPLY);
+    assert(oh->type == OFPT10_STATS_REQUEST || oh->type == OFPT10_STATS_REPLY);
     return ntohs(oh->length) - sizeof(struct nicira_stats_msg);
 }
 
@@ -2519,7 +2519,7 @@ make_flow_mod(uint16_t command, const struct cls_rule *rule,
     struct ofpbuf *out = ofpbuf_new(size);
     ofm = ofpbuf_put_zeros(out, sizeof *ofm);
     ofm->header.version = OFP10_VERSION;
-    ofm->header.type = OFPT_FLOW_MOD;
+    ofm->header.type = OFPT10_FLOW_MOD;
     ofm->header.length = htons(size);
     ofm->cookie = 0;
     ofm->priority = htons(MIN(rule->priority, UINT16_MAX));
@@ -2619,7 +2619,7 @@ ofputil_encode_barrier_request(void)
 {
     struct ofpbuf *msg;
 
-    make_openflow(sizeof(struct ofp_header), OFPT_BARRIER_REQUEST, &msg);
+    make_openflow(sizeof(struct ofp_header), OFPT10_BARRIER_REQUEST, &msg);
     return msg;
 }
 
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index a2dde73..ae51ee0 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -3152,7 +3152,7 @@ handle_barrier_request(struct ofconn *ofconn, const struct ofp_header *oh)
         return OFPROTO_POSTPONE;
     }
 
-    ob = make_openflow_xid(sizeof *ob, OFPT_BARRIER_REPLY, oh->xid, &buf);
+    ob = make_openflow_xid(sizeof *ob, OFPT10_BARRIER_REPLY, oh->xid, &buf);
     ofconn_send_reply(ofconn, buf);
     return 0;
 }
@@ -3266,11 +3266,10 @@ handle_openflow__(struct ofconn *ofconn, const struct ofpbuf *msg)
     case OFPUTIL_NXST_FLOW_REPLY:
     case OFPUTIL_NXST_AGGREGATE_REPLY:
     default:
-        if (oh->type == OFPT_STATS_REQUEST || oh->type == OFPT_STATS_REPLY) {
-            return OFPERR_OFPBRC_BAD_STAT;
-        } else {
-            return OFPERR_OFPBRC_BAD_TYPE;
-        }
+        return (oh->type == OFPT10_STATS_REQUEST ||
+                oh->type == OFPT10_STATS_REPLY
+                ? OFPERR_OFPBRC_BAD_STAT
+                : OFPERR_OFPBRC_BAD_TYPE);
     }
 }
 
diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
index 7f1b5c5..2dc8b7d 100644
--- a/utilities/ovs-ofctl.c
+++ b/utilities/ovs-ofctl.c
@@ -329,7 +329,7 @@ alloc_stats_request(size_t rq_len, uint16_t type, struct ofpbuf **bufferp)
 {
     struct ofp_stats_msg *rq;
 
-    rq = make_openflow(rq_len, OFPT_STATS_REQUEST, bufferp);
+    rq = make_openflow(rq_len, OFPT10_STATS_REQUEST, bufferp);
     rq->type = htons(type);
     rq->flags = htons(0);
     return rq;
@@ -979,7 +979,7 @@ monitor_vconn(struct vconn *vconn)
             ofp_print(stderr, b->data, b->size, verbosity + 2);
             ofpbuf_delete(b);
 
-            if (barrier_aux.conn && msg_type == OFPT_BARRIER_REPLY) {
+            if (barrier_aux.conn && msg_type == OFPT10_BARRIER_REPLY) {
                 unixctl_command_reply(barrier_aux.conn, 200, "");
                 barrier_aux.conn = NULL;
             }
@@ -1124,7 +1124,8 @@ do_mod_port(int argc OVS_UNUSED, char *argv[])
 
     fetch_ofp_phy_port(argv[1], argv[2], &opp);
 
-    opm = make_openflow(sizeof(struct ofp_port_mod), OFPT_PORT_MOD, &request);
+    opm = make_openflow(sizeof(struct ofp_port_mod), OFPT10_PORT_MOD,
+                        &request);
     opm->port_no = opp.port_no;
     memcpy(opm->hw_addr, opp.hw_addr, sizeof opm->hw_addr);
     opm->config = htonl(0);
-- 
1.7.2.5




More information about the dev mailing list