On Wed, May 29, 2013 at 01:23:51PM -0700, Ben Pfaff wrote: > On Wed, May 29, 2013 at 03:06:39PM +0900, Simon Horman wrote: > > Add set skb_mark support to execute_set_action. > > Now renamed odp_execute_actions(). > > > This also adds support for the user-space datapath > > to honour such actions if they occur before recirculation, > > which will be added by a subsequent patch. > > > > This is in preparation for using execute_set_action() > > Ditto. > > > to handle recirculation. > > > > Signed-off-by: Simon Horman <ho...@verge.net.au> > > > > index bd00f18..a2a8ed4 100644 > > --- a/lib/dpif-netdev.c > > +++ b/lib/dpif-netdev.c > > @@ -159,6 +159,10 @@ static void dp_netdev_execute_actions(struct dp_netdev > > *, > > struct ofpbuf *, struct flow *, > > const struct nlattr *actions, > > size_t actions_len); > > +static void dp_netdev_port_input(struct dp_netdev *dp, > > + struct dp_netdev_port *port, > > + struct ofpbuf *packet, uint32_t > > skb_priority, > > + uint32_t skb_mark, const struct flow_tnl > > *tnl); > > > > static struct dpif_netdev * > > dpif_netdev_cast(const struct dpif *dpif) > > @@ -1032,20 +1036,21 @@ dp_netdev_flow_used(struct dp_netdev_flow *flow, > > const struct ofpbuf *packet) > > > > static void > > dp_netdev_port_input(struct dp_netdev *dp, struct dp_netdev_port *port, > > - struct ofpbuf *packet) > > + struct ofpbuf *packet, uint32_t skb_priority, > > + uint32_t skb_mark, const struct flow_tnl *tnl) > > { > > - struct dp_netdev_flow *flow; > > + struct dp_netdev_flow *dp_flow; > > Any particular reason to rename flow to dp_flow here? It makes the > patch larger and thus less obviously correct.
Sorry about that. It is an artifact of a change I have subsequently removed. I'll clean this up. > > > struct flow key; > > > > if (packet->size < ETH_HEADER_LEN) { > > return; > > } > > - flow_extract(packet, 0, 0, NULL, port->port_no, &key); > > - flow = dp_netdev_lookup_flow(dp, &key); > > - if (flow) { > > - dp_netdev_flow_used(flow, packet); > > + flow_extract(packet, skb_priority, skb_mark, tnl, port->port_no, &key); > > + dp_flow = dp_netdev_lookup_flow(dp, &key); > > + if (dp_flow) { > > + dp_netdev_flow_used(dp_flow, packet); > > dp_netdev_execute_actions(dp, packet, &key, > > - flow->actions, flow->actions_len); > > + dp_flow->actions, dp_flow->actions_len); > > dp->n_hit++; > > } else { > > dp->n_missed++; > > @@ -1071,7 +1076,7 @@ dpif_netdev_run(struct dpif *dpif) > > > > error = port->rx ? netdev_rx_recv(port->rx, &packet) : EOPNOTSUPP; > > if (!error) { > > - dp_netdev_port_input(dp, port, &packet); > > + dp_netdev_port_input(dp, port, &packet, 0, 0, NULL); > > } else if (error != EAGAIN && error != EOPNOTSUPP) { > > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); > > VLOG_ERR_RL(&rl, "error receiving data from %s: %s", > > ... > > > diff --git a/lib/odp-util.h b/lib/odp-util.h > > index a981d17..3635591 100644 > > --- a/lib/odp-util.h > > +++ b/lib/odp-util.h > > @@ -87,6 +87,8 @@ struct odputil_keybuf { > > uint32_t keybuf[DIV_ROUND_UP(ODPUTIL_FLOW_KEY_BYTES, 4)]; > > }; > > > > +enum odp_key_fitness tun_key_from_attr(const struct nlattr *, struct > > flow_tnl *); > > + > > Most of the other functions exported by the odp-util module have names > that begin with "odp_". I'd like to maintain that here. Sure, I'll fix that up. > Otherwise this looks good, thanks. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev