Looks good. Ethan
On Tue, Sep 27, 2011 at 16:27, Ben Pfaff <[email protected]> wrote: > An upcoming commit will use this code separately from > execute_odp_actions(), so this prepares for that. > --- > ofproto/ofproto-dpif.c | 53 +++++++++++++++++++++++++++++++---------------- > 1 files changed, 35 insertions(+), 18 deletions(-) > > diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c > index fb870be..7d7d6af 100644 > --- a/ofproto/ofproto-dpif.c > +++ b/ofproto/ofproto-dpif.c > @@ -263,6 +263,11 @@ static struct facet *facet_lookup_valid(struct > ofproto_dpif *, > const struct flow *); > static bool facet_revalidate(struct ofproto_dpif *, struct facet *); > > +static bool execute_controller_action(struct ofproto_dpif *, > + const struct flow *, > + const struct nlattr *odp_actions, > + size_t actions_len, > + struct ofpbuf *packet); > static void facet_execute(struct ofproto_dpif *, struct facet *, > struct ofpbuf *packet); > > @@ -2184,14 +2189,11 @@ facet_free(struct facet *facet) > free(facet); > } > > -/* Executes, within 'ofproto', the 'n_actions' actions in 'actions' on > - * 'packet', which arrived on 'in_port'. > - * > - * Takes ownership of 'packet'. */ > static bool > -execute_odp_actions(struct ofproto_dpif *ofproto, const struct flow *flow, > - const struct nlattr *odp_actions, size_t actions_len, > - struct ofpbuf *packet) > +execute_controller_action(struct ofproto_dpif *ofproto, > + const struct flow *flow, > + const struct nlattr *odp_actions, size_t > actions_len, > + struct ofpbuf *packet) > { > if (actions_len == NLA_ALIGN(NLA_HDRLEN + sizeof(uint64_t)) > && odp_actions->nla_type == OVS_ACTION_ATTR_USERSPACE) { > @@ -2200,22 +2202,37 @@ execute_odp_actions(struct ofproto_dpif *ofproto, > const struct flow *flow, > * buffers along the way. */ > send_packet_in_action(ofproto, packet, nl_attr_get_u64(odp_actions), > flow, false); > - > return true; > } else { > - struct odputil_keybuf keybuf; > - struct ofpbuf key; > - int error; > - > - ofpbuf_use_stack(&key, &keybuf, sizeof keybuf); > - odp_flow_key_from_flow(&key, flow); > + return false; > + } > +} > > - error = dpif_execute(ofproto->dpif, key.data, key.size, > - odp_actions, actions_len, packet); > +/* Executes, within 'ofproto', the 'n_actions' actions in 'actions' on > + * 'packet', which arrived on 'in_port'. > + * > + * Takes ownership of 'packet'. */ > +static bool > +execute_odp_actions(struct ofproto_dpif *ofproto, const struct flow *flow, > + const struct nlattr *odp_actions, size_t actions_len, > + struct ofpbuf *packet) > +{ > + struct odputil_keybuf keybuf; > + struct ofpbuf key; > + int error; > > - ofpbuf_delete(packet); > - return !error; > + if (execute_controller_action(ofproto, flow, odp_actions, actions_len, > + packet)) { > + return true; > } > + > + ofpbuf_use_stack(&key, &keybuf, sizeof keybuf); > + odp_flow_key_from_flow(&key, flow); > + error = dpif_execute(ofproto->dpif, key.data, key.size, > + odp_actions, actions_len, packet); > + ofpbuf_delete(packet); > + > + return !error; > } > > /* Executes the actions indicated by 'facet' on 'packet' and credits > 'facet''s > -- > 1.7.4.4 > > _______________________________________________ > dev mailing list > [email protected] > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
