[ovs-dev] [PATCH 1/8] connmgr: Use version of underlying rconn
Simon Horman
horms at verge.net.au
Mon Nov 19 05:59:28 UTC 2012
Signed-off-by: Simon Horman <horms at verge.net.au>
---
v6
* Rebase
v5
* Use #define for OFPUTIL_P_NONE
* Ensure that if ofconn->rconn is connected that a valid
value for ofconn->protocol is always used by fetching the
value from the rconn in ofconn_get_protocol() as necessary
and always using ofconn_get_protocol() to access ofconn->protocol.
v4
* Rebase
---
lib/ofp-util.h | 1 +
ofproto/connmgr.c | 18 +++++++++++++-----
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/lib/ofp-util.h b/lib/ofp-util.h
index edefa2d..d87554d 100644
--- a/lib/ofp-util.h
+++ b/lib/ofp-util.h
@@ -69,6 +69,7 @@ enum ofputil_protocol {
* The protocols with "TID" mean that the nx_flow_mod_table_id Nicira
* extension has been enabled. The other protocols have it disabled.
*/
+#define OFPUTIL_P_NONE 0
OFPUTIL_P_OF10_STD = 1 << 0,
OFPUTIL_P_OF10_STD_TID = 1 << 1,
OFPUTIL_P_OF10_NXM = 1 << 2,
diff --git a/ofproto/connmgr.c b/ofproto/connmgr.c
index 2885804..5c7e1c5 100644
--- a/ofproto/connmgr.c
+++ b/ofproto/connmgr.c
@@ -840,10 +840,18 @@ ofconn_get_invalid_ttl_to_controller(struct ofconn *ofconn)
/* Returns the currently configured protocol for 'ofconn', one of OFPUTIL_P_*.
*
- * The default, if no other format has been set, is OFPUTIL_P_OF10_STD. */
+ * The default, if no other format has been set, is OFPUTIL_P_NONE. */
enum ofputil_protocol
ofconn_get_protocol(struct ofconn *ofconn)
{
+ if (ofconn->protocol == OFPUTIL_P_NONE &&
+ rconn_is_connected(ofconn->rconn)) {
+ int version = rconn_get_version(ofconn->rconn);
+ if (version > 0) {
+ ofconn_set_protocol(ofconn,
+ ofputil_protocol_from_ofp_version(version));
+ }
+ }
return ofconn->protocol;
}
@@ -1034,7 +1042,7 @@ ofconn_flush(struct ofconn *ofconn)
int i;
ofconn->role = NX_ROLE_OTHER;
- ofconn->protocol = OFPUTIL_P_OF10_STD;
+ ofconn_set_protocol(ofconn, OFPUTIL_P_NONE);
ofconn->packet_in_format = NXPIF_OPENFLOW10;
/* Disassociate 'ofconn' from all of the ofopgroups that it initiated that
@@ -1317,7 +1325,7 @@ connmgr_send_port_status(struct connmgr *mgr,
if (ofconn_receives_async_msg(ofconn, OAM_PORT_STATUS, reason)) {
struct ofpbuf *msg;
- msg = ofputil_encode_port_status(&ps, ofconn->protocol);
+ msg = ofputil_encode_port_status(&ps, ofconn_get_protocol(ofconn));
ofconn_send(ofconn, msg, NULL);
}
}
@@ -1340,7 +1348,7 @@ connmgr_send_flow_removed(struct connmgr *mgr,
* also prevents new flows from being added (and expiring). (It
* also prevents processing OpenFlow requests that would not add
* new flows, so it is imperfect.) */
- msg = ofputil_encode_flow_removed(fr, ofconn->protocol);
+ msg = ofputil_encode_flow_removed(fr, ofconn_get_protocol(ofconn));
ofconn_send_reply(ofconn, msg);
}
}
@@ -1411,7 +1419,7 @@ schedule_packet_in(struct ofconn *ofconn, struct ofputil_packet_in pin)
* while (until a later call to pinsched_run()). */
pinsched_send(ofconn->schedulers[pin.reason == OFPR_NO_MATCH ? 0 : 1],
pin.fmd.in_port,
- ofputil_encode_packet_in(&pin, ofconn->protocol,
+ ofputil_encode_packet_in(&pin, ofconn_get_protocol(ofconn),
ofconn->packet_in_format),
do_send_packet_in, ofconn);
}
--
1.7.10.4
More information about the dev
mailing list