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. */
-/* 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
#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 */
#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 */
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,
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:
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);
}
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);
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);
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),
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;
}
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);
}
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;
}
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);
}
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));
{
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;
}
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;
}
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);
}
}
{
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;
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;
}
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);