From: Ben Pfaff Date: Wed, 5 Dec 2012 02:23:00 +0000 (-0800) Subject: rconn: Maintain original allowed_versions instead of substituting for zero. X-Git-Tag: sliver-openvswitch-1.9.90-3~10^2~114 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=5b8ab80c0897d9cc91488505a447dcf4a4e4b448;p=sliver-openvswitch.git rconn: Maintain original allowed_versions instead of substituting for zero. rconn_create() was substituting OFPUTIL_DEFAULT_VERSIONS if an allowed_versions of 0 was passed in. At the same time, connmgr_set_controllers() compared the adjusted value of allowed_versions against the original value, saw that they were different, and concluded that it should kill off and recreate the rconn with the "corrected" allowed_versions. This commit fixes the problem by no longer adjusting allowed_versions. There is no need, because it is only used in contexts where the original version is OK. This problem was introduced by commit 90ef0206ea8f5a39 (connmgr: Reinitialise controllers if protocols changes). Bug #14126. CC: Simon Horman Reported-by: Natasha Gude Signed-off-by: Ben Pfaff --- diff --git a/lib/rconn.c b/lib/rconn.c index 45a0acd61..2396e44a5 100644 --- a/lib/rconn.c +++ b/lib/rconn.c @@ -174,10 +174,10 @@ static bool rconn_logging_connection_attempts__(const struct rconn *); * * Connections made by the rconn will automatically negotiate an OpenFlow * protocol version acceptable to both peers on the connection. The version - * negotiated will be one of those in the 'allowed_versions' bitmap: - * version 'x' is allowed if allowed_versions & (1 << x) is nonzero. If - * 'allowed_versions' is zero, then OFPUTIL_DEFAULT_VERSIONS are allowed. - **/ + * negotiated will be one of those in the 'allowed_versions' bitmap: version + * 'x' is allowed if allowed_versions & (1 << x) is nonzero. (The underlying + * vconn will treat an 'allowed_versions' of 0 as OFPUTIL_DEFAULT_VERSIONS.) + */ struct rconn * rconn_create(int probe_interval, int max_backoff, uint8_t dscp, uint32_t allowed_versions) @@ -218,9 +218,7 @@ rconn_create(int probe_interval, int max_backoff, uint8_t dscp, rconn_set_dscp(rc, dscp); rc->n_monitors = 0; - rc->allowed_versions = allowed_versions - ? allowed_versions - : OFPUTIL_DEFAULT_VERSIONS; + rc->allowed_versions = allowed_versions; return rc; }