/*
- * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#ifndef OFP_UTIL_H
#define OFP_UTIL_H 1
-#include <assert.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
* variant. */
OFPUTIL_P_OF12_OXM = 1 << 4,
OFPUTIL_P_OF13_OXM = 1 << 5,
+#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | OFPUTIL_P_OF13_OXM)
/* All protocols. */
#define OFPUTIL_P_ANY ((1 << 6) - 1)
/* Protocols in which a specific table may be specified in flow_mods. */
#define OFPUTIL_P_TID (OFPUTIL_P_OF10_STD_TID | \
OFPUTIL_P_OF10_NXM_TID | \
- OFPUTIL_P_OF12_OXM | \
- OFPUTIL_P_OF13_OXM)
+ OFPUTIL_P_ANY_OXM)
};
/* Protocols to use for flow dumps, from most to least preferred. */
extern enum ofputil_protocol ofputil_flow_dump_protocols[];
extern size_t ofputil_n_flow_dump_protocols;
-enum ofputil_protocol
-ofputil_protocol_from_ofp_version(enum ofp_version version);
-enum ofp_version ofputil_protocol_to_ofp_version(enum ofputil_protocol);
+enum ofputil_protocol ofputil_protocol_from_ofp_version(enum ofp_version);
+enum ofputil_protocol ofputil_protocols_from_ofp_version(enum ofp_version);
+enum ofp_version ofputil_protocol_to_ofp_version(enum ofputil_protocol);
bool ofputil_protocol_is_valid(enum ofputil_protocol);
enum ofputil_protocol ofputil_protocol_set_tid(enum ofputil_protocol,
void ofputil_format_version_bitmap(struct ds *msg, uint32_t bitmap);
void ofputil_format_version_bitmap_names(struct ds *msg, uint32_t bitmap);
+uint32_t ofputil_protocols_to_version_bitmap(enum ofputil_protocol);
+enum ofputil_protocol ofputil_protocols_from_version_bitmap(uint32_t bitmap);
+
/* Bitmap of OpenFlow versions that Open vSwitch supports. */
#define OFPUTIL_SUPPORTED_VERSIONS \
((1u << OFP10_VERSION) | (1u << OFP12_VERSION) | (1u << OFP13_VERSION))
struct ofpbuf *ofputil_encode_port_mod(const struct ofputil_port_mod *,
enum ofputil_protocol);
+/* Abstract ofp_role_request and reply. */
+struct ofputil_role_request {
+ enum ofp12_controller_role role;
+ bool have_generation_id;
+ uint64_t generation_id;
+};
+
+enum ofperr ofputil_decode_role_message(const struct ofp_header *,
+ struct ofputil_role_request *);
+struct ofpbuf *ofputil_encode_role_reply(const struct ofp_header *,
+ const struct ofputil_role_request *);
+
/* Abstract table stats.
*
* For now we use ofp12_table_stats as a superset of the other protocol
* OFPUTIL_NXAST_NOTE
* OFPUTIL_NXAST_SET_TUNNEL64
* OFPUTIL_NXAST_MULTIPATH
- * OFPUTIL_NXAST_AUTOPATH
* OFPUTIL_NXAST_BUNDLE
* OFPUTIL_NXAST_BUNDLE_LOAD
* OFPUTIL_NXAST_RESUBMIT_TABLE
/* Handy utility for parsing flows and actions. */
bool ofputil_parse_key_value(char **stringp, char **keyp, char **valuep);
-struct ofpbuf *ofputlil_dump_ports(enum ofp_version ofp_version, int16_t port);
-
struct ofputil_port_stats {
uint16_t port_no;
struct netdev_stats stats;
};
struct ofpbuf *ofputil_encode_dump_ports_request(enum ofp_version ofp_version,
- int16_t port);
+ uint16_t port);
void ofputil_append_port_stat(struct list *replies,
const struct ofputil_port_stats *ops);
size_t ofputil_count_port_stats(const struct ofp_header *);