X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Flearning-switch.c;h=c818a32133ad2f68060f0bd6161d7489df15e0ee;hb=003ce655b7116d18c86a74c50391e54990346931;hp=8efbce1a5ebecc8c019e5cd9312a4e68408ba3fd;hpb=252f3411f660fdf8749fe15fa28ab6f0b7f2f5a8;p=sliver-openvswitch.git diff --git a/lib/learning-switch.c b/lib/learning-switch.c index 8efbce1a5..c818a3213 100644 --- a/lib/learning-switch.c +++ b/lib/learning-switch.c @@ -315,12 +315,12 @@ lswitch_process_packet(struct lswitch *sw, const struct ofpbuf *msg) switch (type) { case OFPTYPE_ECHO_REQUEST: - process_echo_request(sw, msg->data); + process_echo_request(sw, ofpbuf_data(msg)); break; case OFPTYPE_FEATURES_REPLY: if (sw->state == S_FEATURES_REPLY) { - if (!process_switch_features(sw, msg->data)) { + if (!process_switch_features(sw, ofpbuf_data(msg))) { sw->state = S_SWITCHING; } else { rconn_disconnect(sw->rconn); @@ -329,7 +329,7 @@ lswitch_process_packet(struct lswitch *sw, const struct ofpbuf *msg) break; case OFPTYPE_PACKET_IN: - process_packet_in(sw, msg->data); + process_packet_in(sw, ofpbuf_data(msg)); break; case OFPTYPE_FLOW_REMOVED: @@ -400,7 +400,7 @@ lswitch_process_packet(struct lswitch *sw, const struct ofpbuf *msg) case OFPTYPE_TABLE_FEATURES_STATS_REPLY: default: if (VLOG_IS_DBG_ENABLED()) { - char *s = ofp_to_string(msg->data, msg->size, 2); + char *s = ofp_to_string(ofpbuf_data(msg), ofpbuf_size(msg), 2); VLOG_DBG_RL(&rl, "%016llx: OpenFlow packet ignored: %s", sw->datapath_id, s); free(s); @@ -556,7 +556,6 @@ process_packet_in(struct lswitch *sw, const struct ofp_header *oh) struct ofpbuf pkt; struct flow flow; - union flow_in_port in_port_; error = ofputil_decode_packet_in(&pi, oh); if (error) { @@ -574,8 +573,8 @@ process_packet_in(struct lswitch *sw, const struct ofp_header *oh) /* Extract flow data from 'opi' into 'flow'. */ ofpbuf_use_const(&pkt, pi.packet, pi.packet_len); - in_port_.ofp_port = pi.fmd.in_port; - flow_extract(&pkt, 0, 0, NULL, &in_port_, &flow); + flow_extract(&pkt, NULL, &flow); + flow.in_port.ofp_port = pi.fmd.in_port; flow.tunnel.tun_id = pi.fmd.tun_id; /* Choose output port. */ @@ -599,15 +598,15 @@ process_packet_in(struct lswitch *sw, const struct ofp_header *oh) /* Prepare packet_out in case we need one. */ po.buffer_id = pi.buffer_id; if (po.buffer_id == UINT32_MAX) { - po.packet = pkt.data; - po.packet_len = pkt.size; + po.packet = ofpbuf_data(&pkt); + po.packet_len = ofpbuf_size(&pkt); } else { po.packet = NULL; po.packet_len = 0; } po.in_port = pi.fmd.in_port; - po.ofpacts = ofpacts.data; - po.ofpacts_len = ofpacts.size; + po.ofpacts = ofpbuf_data(&ofpacts); + po.ofpacts_len = ofpbuf_size(&ofpacts); /* Send the packet, and possibly the whole flow, to the output port. */ if (sw->max_idle >= 0 && (!sw->ml || out_port != OFPP_FLOOD)) { @@ -625,8 +624,8 @@ process_packet_in(struct lswitch *sw, const struct ofp_header *oh) fm.idle_timeout = sw->max_idle; fm.buffer_id = pi.buffer_id; fm.out_port = OFPP_NONE; - fm.ofpacts = ofpacts.data; - fm.ofpacts_len = ofpacts.size; + fm.ofpacts = ofpbuf_data(&ofpacts); + fm.ofpacts_len = ofpbuf_size(&ofpacts); buffer = ofputil_encode_flow_mod(&fm, sw->protocol); queue_tx(sw, buffer);