On Wed, Jul 6, 2022 at 9:02 AM David Marchand <[email protected]> wrote:
>
> On Mon, Jul 4, 2022 at 10:24 PM David Marchand
> <[email protected]> wrote:
> > > diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c
> > > index 57f94df54..164738503 100644
> > > --- a/ofproto/ofproto-dpif-upcall.c
> > > +++ b/ofproto/ofproto-dpif-upcall.c
> > > @@ -215,7 +215,7 @@ struct upcall {
> > >      enum odp_key_fitness fitness;  /* Fitness of 'flow' relative to ODP 
> > > key. */
> > >      const ovs_u128 *ufid;          /* Unique identifier for 'flow'. */
> > >      unsigned pmd_id;               /* Datapath poll mode driver id. */
> > > -    const struct dp_packet *packet;   /* Packet associated with this 
> > > upcall. */
> > > +    struct dp_packet *packet;      /* Packet associated with this 
> > > upcall. */
> > >      ofp_port_t ofp_in_port;        /* OpenFlow in port, or OFPP_NONE. */
> > >      uint16_t mru;                  /* If !0, Maximum receive unit of
> > >                                        fragmented IP packet */
> > > @@ -395,7 +395,7 @@ static void delete_op_init(struct udpif *udpif, 
> > > struct ukey_op *op,
> > >                             struct udpif_key *ukey);
> > >
> > >  static int upcall_receive(struct upcall *, const struct dpif_backer *,
> > > -                          const struct dp_packet *packet, enum 
> > > dpif_upcall_type,
> > > +                          struct dp_packet *packet, enum 
> > > dpif_upcall_type,
> > >                            const struct nlattr *userdata, const struct 
> > > flow *,
> > >                            const unsigned int mru,
> > >                            const ovs_u128 *ufid, const unsigned pmd_id);
> > > @@ -1140,7 +1140,7 @@ compose_slow_path(struct udpif *udpif, struct 
> > > xlate_out *xout,
> > >   * since the 'upcall->put_actions' remains uninitialized. */
> > >  static int
> > >  upcall_receive(struct upcall *upcall, const struct dpif_backer *backer,
> > > -               const struct dp_packet *packet, enum dpif_upcall_type 
> > > type,
> > > +               struct dp_packet *packet, enum dpif_upcall_type type,
> > >                 const struct nlattr *userdata, const struct flow *flow,
> > >                 const unsigned int mru,
> > >                 const ovs_u128 *ufid, const unsigned pmd_id)
> > > @@ -1336,7 +1336,7 @@ should_install_flow(struct udpif *udpif, struct 
> > > upcall *upcall)
> > >  }
> > >
> > >  static int
> > > -upcall_cb(const struct dp_packet *packet, const struct flow *flow, 
> > > ovs_u128 *ufid,
> > > +upcall_cb(struct dp_packet *packet, const struct flow *flow, ovs_u128 
> > > *ufid,
> > >            unsigned pmd_id, enum dpif_upcall_type type,
> > >            const struct nlattr *userdata, struct ofpbuf *actions,
> > >            struct flow_wildcards *wc, struct ofpbuf *put_actions, void 
> > > *aux)
> > > @@ -1446,7 +1446,7 @@ static int
> > >  process_upcall(struct udpif *udpif, struct upcall *upcall,
> > >                 struct ofpbuf *odp_actions, struct flow_wildcards *wc)
> > >  {
> > > -    const struct dp_packet *packet = upcall->packet;
> > > +    struct dp_packet *packet = upcall->packet;
> > >      const struct flow *flow = upcall->flow;
> > >      size_t actions_len = 0;
> > >
> > > @@ -1524,6 +1524,10 @@ process_upcall(struct udpif *udpif, struct upcall 
> > > *upcall,
> > >                  break;
> > >              }
> > >
> > > +            /* The packet is going to be encapsulated and sent to
> > > +             * the controller. */
> > > +            dp_packet_ol_send_prepare(packet, 0);
> >
> > Having to touch the packet data this late is scary, but I don't know a
> > better place for now.
>
> We can move it to dp_netdev_upcall which only affects the userspace datapath.
> Then the upcall handling code gets "complete" packet data, the same as
> when it gets invoked in the kernel datapath case.
>

I think this solution also works; if it's preferred stylistically then
I will make the change for the v5.

Regarding the other comments, I generally agree with the areas you
identified for refactor but think that it would fit best as a later
patch. A lot of this code is modified throughout the patchset, so
applying it now would be difficult.

I propose the next version including:

- conntrack comment
- { on newline
- reset dpdk ol_flags
- relocating dp_packet_ol_send_prepare

And the remaining changes to be added later.

LMKWYT

Cheers,
M

>
> --
> David Marchand
>

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to