static void ofservice_reconfigure(struct ofservice *,
const struct ofproto_controller *);
-static int ofservice_create(struct connmgr *, const char *target, uint8_t dscp);
+static int ofservice_create(struct connmgr *mgr, const char *target,
+ uint32_t allowed_versions, uint8_t dscp);
static void ofservice_destroy(struct connmgr *, struct ofservice *);
static struct ofservice *ofservice_lookup(struct connmgr *,
const char *target);
struct vconn *vconn;
int retval;
- retval = pvconn_accept(ofservice->pvconn, OFP10_VERSION, &vconn);
+ retval = pvconn_accept(ofservice->pvconn, &vconn);
if (!retval) {
struct rconn *rconn;
char *name;
struct vconn *vconn;
int retval;
- retval = pvconn_accept(mgr->snoops[i], OFP10_VERSION, &vconn);
+ retval = pvconn_accept(mgr->snoops[i], &vconn);
if (!retval) {
add_snooper(mgr, vconn);
} else if (retval != EAGAIN) {
if (!ofservice_lookup(mgr, c->target)) {
VLOG_INFO("%s: added service controller \"%s\"",
mgr->name, c->target);
- ofservice_create(mgr, c->target, c->dscp);
+ ofservice_create(mgr, c->target, 0, c->dscp);
}
} else {
VLOG_WARN_RL(&rl, "%s: unsupported controller \"%s\"",
SSET_FOR_EACH (name, sset) {
struct pvconn *pvconn;
int error;
-
- error = pvconn_open(name, &pvconn, 0);
+ error = pvconn_open(name, 0, &pvconn, 0);
if (!error) {
pvconns[n_pvconns++] = pvconn;
} else {
* 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->packet_in_format),
+ ofputil_encode_packet_in(&pin, ofconn->protocol,
+ ofconn->packet_in_format),
do_send_packet_in, ofconn);
}
\f
if (!connmgr_has_controllers(mgr)
&& mgr->fail_mode == OFPROTO_FAIL_STANDALONE) {
struct ofpbuf ofpacts;
- struct cls_rule rule;
+ struct match match;
ofpbuf_init(&ofpacts, OFPACT_OUTPUT_SIZE);
ofpact_put_OUTPUT(&ofpacts)->port = OFPP_NORMAL;
ofpact_pad(&ofpacts);
- cls_rule_init_catchall(&rule, 0);
- ofproto_add_flow(mgr->ofproto, &rule, ofpacts.data, ofpacts.size);
+ match_init_catchall(&match);
+ ofproto_add_flow(mgr->ofproto, &match, 0, ofpacts.data, ofpacts.size);
ofpbuf_uninit(&ofpacts);
}
* ofservice_reconfigure() must be called to fully configure the new
* ofservice. */
static int
-ofservice_create(struct connmgr *mgr, const char *target, uint8_t dscp)
+ofservice_create(struct connmgr *mgr, const char *target,
+ uint32_t allowed_versions, uint8_t dscp)
{
struct ofservice *ofservice;
struct pvconn *pvconn;
int error;
- error = pvconn_open(target, &pvconn, dscp);
+ error = pvconn_open(target, allowed_versions, &pvconn, dscp);
if (error) {
return error;
}
m->flags = request->flags;
m->out_port = request->out_port;
m->table_id = request->table_id;
- m->match = request->match;
+ minimatch_init(&m->match, &request->match);
*monitorp = m;
return 0;
if (ofconn != abbrev_ofconn || ofconn->monitor_paused) {
struct ofputil_flow_update fu;
+ struct match match;
fu.event = event;
fu.reason = event == NXFME_DELETED ? reason : 0;
fu.hard_timeout = rule->hard_timeout;
fu.table_id = rule->table_id;
fu.cookie = rule->flow_cookie;
- fu.match = &rule->cr;
+ minimatch_expand(&rule->cr.match, &match);
+ fu.match = &match;
+ fu.priority = rule->cr.priority;
if (flags & NXFMF_ACTIONS) {
fu.ofpacts = rule->ofpacts;
fu.ofpacts_len = rule->ofpacts_len;