From 5293a2e145a9ccc7e42c4a3cf49dee2a21a3b1c8 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 14 Feb 2012 16:58:39 -0800 Subject: [PATCH] Break OFPT_* constants into common value and 1.0- and 1.1-specific values. Reviewed-by: Simon Horman Signed-off-by: Ben Pfaff --- 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 7cc53831..457374db 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 93002af9..02120a51 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 9163efdc..d0f4b181 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 a60c0a52..4054e970 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -724,31 +724,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, @@ -772,11 +772,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: @@ -1447,7 +1447,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); @@ -2236,7 +2236,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); @@ -2427,7 +2427,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); @@ -2437,9 +2437,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), @@ -2521,7 +2521,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; } @@ -2529,7 +2529,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); } @@ -2537,7 +2537,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; } @@ -2545,7 +2545,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); } @@ -2558,7 +2558,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)); @@ -2658,7 +2658,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 25303adf..020b8772 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -3167,7 +3167,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; } @@ -3284,11 +3284,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 3a2fca97..d81e2957 100644 --- a/utilities/ovs-ofctl.c +++ b/utilities/ovs-ofctl.c @@ -340,7 +340,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; @@ -1003,7 +1003,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, NULL); barrier_aux.conn = NULL; } @@ -1148,7 +1148,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); -- 2.30.2