[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