X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ofproto%2Fconnmgr.c;h=426493436c00eb8b98dbec4457aeaffbfd9da3c1;hb=7aaeab4df24b7e9460705b1dad1010eef0354c50;hp=8a84da5e6c0e289c5423a4f563704f7d8450f5ec;hpb=5684eb749042325111e05f41b20258e6824fc0b5;p=sliver-openvswitch.git diff --git a/ofproto/connmgr.c b/ofproto/connmgr.c index 8a84da5e6..426493436 100644 --- a/ofproto/connmgr.c +++ b/ofproto/connmgr.c @@ -60,7 +60,7 @@ struct ofconn { /* State that should be cleared from one connection to the next. */ /* OpenFlow state. */ - enum nx_role role; /* Role. */ + enum ofp12_controller_role role; /* Role. */ enum ofputil_protocol protocol; /* Current protocol variant. */ enum nx_packet_in_format packet_in_format; /* OFPT_PACKET_IN format. */ @@ -108,7 +108,7 @@ static void ofconn_reconfigure(struct ofconn *, static void ofconn_run(struct ofconn *, bool (*handle_openflow)(struct ofconn *, - struct ofpbuf *ofp_msg)); + const struct ofpbuf *ofp_msg)); static void ofconn_wait(struct ofconn *, bool handling_openflow); static const char *ofconn_get_target(const struct ofconn *); @@ -269,7 +269,8 @@ connmgr_destroy(struct connmgr *mgr) * fail-open processing) are suppressed too. */ void connmgr_run(struct connmgr *mgr, - bool (*handle_openflow)(struct ofconn *, struct ofpbuf *ofp_msg)) + bool (*handle_openflow)(struct ofconn *, + const struct ofpbuf *ofp_msg)) { struct ofconn *ofconn, *next_ofconn; struct ofservice *ofservice; @@ -314,7 +315,7 @@ connmgr_run(struct connmgr *mgr, ofconn_set_rate_limit(ofconn, ofservice->rate_limit, ofservice->burst_limit); } else if (retval != EAGAIN) { - VLOG_WARN_RL(&rl, "accept failed (%s)", strerror(retval)); + VLOG_WARN_RL(&rl, "accept failed (%s)", ovs_strerror(retval)); } } @@ -326,7 +327,7 @@ connmgr_run(struct connmgr *mgr, if (!retval) { add_snooper(mgr, vconn); } else if (retval != EAGAIN) { - VLOG_WARN_RL(&rl, "accept failed (%s)", strerror(retval)); + VLOG_WARN_RL(&rl, "accept failed (%s)", ovs_strerror(retval)); } } } @@ -757,7 +758,7 @@ set_pvconns(struct pvconn ***pvconnsp, size_t *n_pvconnsp, if (!error) { pvconns[n_pvconns++] = pvconn; } else { - VLOG_ERR("failed to listen on %s: %s", name, strerror(error)); + VLOG_ERR("failed to listen on %s: %s", name, ovs_strerror(error)); if (!retval) { retval = error; } @@ -777,12 +778,13 @@ static int snoop_preference(const struct ofconn *ofconn) { switch (ofconn->role) { - case NX_ROLE_MASTER: + case OFPCR12_ROLE_MASTER: return 3; - case NX_ROLE_OTHER: + case OFPCR12_ROLE_EQUAL: return 2; - case NX_ROLE_SLAVE: + case OFPCR12_ROLE_SLAVE: return 1; + case OFPCR12_ROLE_NOCHANGE: default: /* Shouldn't happen. */ return 0; @@ -822,6 +824,17 @@ ofconn_get_type(const struct ofconn *ofconn) return ofconn->type; } +/* If a master election id is defined, stores it into '*idp' and returns + * true. Otherwise, stores UINT64_MAX into '*idp' and returns false. */ +bool +ofconn_get_master_election_id(const struct ofconn *ofconn, uint64_t *idp) +{ + *idp = (ofconn->connmgr->master_election_id_defined + ? ofconn->connmgr->master_election_id + : UINT64_MAX); + return ofconn->connmgr->master_election_id_defined; +} + /* Sets the master election id. * * Returns true if successful, false if the id is stale @@ -844,24 +857,24 @@ ofconn_set_master_election_id(struct ofconn *ofconn, uint64_t id) /* Returns the role configured for 'ofconn'. * - * The default role, if no other role has been set, is NX_ROLE_OTHER. */ -enum nx_role + * The default role, if no other role has been set, is OFPCR12_ROLE_EQUAL. */ +enum ofp12_controller_role ofconn_get_role(const struct ofconn *ofconn) { return ofconn->role; } -/* Changes 'ofconn''s role to 'role'. If 'role' is NX_ROLE_MASTER then any - * existing master is demoted to a slave. */ +/* Changes 'ofconn''s role to 'role'. If 'role' is OFPCR12_ROLE_MASTER then + * any existing master is demoted to a slave. */ void -ofconn_set_role(struct ofconn *ofconn, enum nx_role role) +ofconn_set_role(struct ofconn *ofconn, enum ofp12_controller_role role) { - if (role == NX_ROLE_MASTER) { + if (role == OFPCR12_ROLE_MASTER) { struct ofconn *other; HMAP_FOR_EACH (other, hmap_node, &ofconn->connmgr->controllers) { - if (other->role == NX_ROLE_MASTER) { - other->role = NX_ROLE_SLAVE; + if (other->role == OFPCR12_ROLE_MASTER) { + other->role = OFPCR12_ROLE_SLAVE; } } } @@ -1026,7 +1039,7 @@ ofconn_send_error(const struct ofconn *ofconn, /* Same as pktbuf_retrieve(), using the pktbuf owned by 'ofconn'. */ enum ofperr ofconn_pktbuf_retrieve(struct ofconn *ofconn, uint32_t id, - struct ofpbuf **bufferp, uint16_t *in_port) + struct ofpbuf **bufferp, ofp_port_t *in_port) { return pktbuf_retrieve(ofconn->pktbuf, id, bufferp, in_port); } @@ -1092,7 +1105,7 @@ ofconn_flush(struct ofconn *ofconn) struct ofmonitor *monitor, *next_monitor; int i; - ofconn->role = NX_ROLE_OTHER; + ofconn->role = OFPCR12_ROLE_EQUAL; ofconn_set_protocol(ofconn, OFPUTIL_P_NONE); ofconn->packet_in_format = NXPIF_OPENFLOW10; @@ -1177,6 +1190,7 @@ ofconn_destroy(struct ofconn *ofconn) hmap_remove(&ofconn->connmgr->controllers, &ofconn->hmap_node); } + hmap_destroy(&ofconn->monitors); list_remove(&ofconn->node); rconn_destroy(ofconn->rconn); rconn_packet_counter_destroy(ofconn->packet_in_counter); @@ -1221,7 +1235,8 @@ ofconn_may_recv(const struct ofconn *ofconn) static void ofconn_run(struct ofconn *ofconn, - bool (*handle_openflow)(struct ofconn *, struct ofpbuf *ofp_msg)) + bool (*handle_openflow)(struct ofconn *, + const struct ofpbuf *ofp_msg)) { struct connmgr *mgr = ofconn->connmgr; size_t i; @@ -1290,8 +1305,8 @@ ofconn_receives_async_msg(const struct ofconn *ofconn, { const uint32_t *async_config; - assert(reason < 32); - assert((unsigned int) type < OAM_N_TYPES); + ovs_assert(reason < 32); + ovs_assert((unsigned int) type < OAM_N_TYPES); if (ofconn_get_protocol(ofconn) == OFPUTIL_P_NONE || !rconn_is_connected(ofconn->rconn)) { @@ -1307,7 +1322,7 @@ ofconn_receives_async_msg(const struct ofconn *ofconn, return false; } - async_config = (ofconn->role == NX_ROLE_SLAVE + async_config = (ofconn->role == OFPCR12_ROLE_SLAVE ? ofconn->slave_async_config : ofconn->master_async_config); if (!(async_config[type] & (1u << reason))) { @@ -1630,18 +1645,9 @@ any_extras_changed(const struct connmgr *mgr, /* In-band implementation. */ bool -connmgr_msg_in_hook(struct connmgr *mgr, const struct flow *flow, - const struct ofpbuf *packet) -{ - return mgr->in_band && in_band_msg_in_hook(mgr->in_band, flow, packet); -} - -bool -connmgr_may_set_up_flow(struct connmgr *mgr, const struct flow *flow, - const struct nlattr *odp_actions, - size_t actions_len) +connmgr_has_in_band(struct connmgr *mgr) { - return !mgr->in_band || in_band_rule_check(flow, odp_actions, actions_len); + return mgr->in_band != NULL; } /* Fail-open and in-band implementation. */