[ovs-discuss] Adding a new OpenFlow action to ovs, ctx->xin->packet is null

Ben Pfaff blp at nicira.com
Wed May 14 17:20:29 UTC 2014


On Wed, May 14, 2014 at 05:24:03AM +0200, Christian Stigen Larsen wrote:
> Hi,
> 
> > Den 11. mai 2014 kl. 04:19 skrev Ben Pfaff <blp at nicira.com>:
> > 
> >> On Sat, May 10, 2014 at 06:11:29PM +0200, Christian Stigen Larsen wrote:
> >> 
> >> Ben Pfaff <blp at nicira.com>:
> >>>> Is do_xlate_actions ("translate actions"?) the wrong place for this kind of
> >>>> stuff?  How can I get a pointer to the raw packet data?
> >>> 
> >>> Usually, ofproto-dpif-xlate should not actually implement the OpenFlow
> >>> actions.
> >> 
> >> Sorry for being trigger-happy, but even if I chose to implement datapath
> >> actions, how can I inspect the packet data?  For some reason I get a
> >> NULL-pointer in ctx->xin->packet, while, e.g., OFPACT_OUTPUT in
> >> do_xlate_actions gets the full packet.
> > 
> > Often the packet data is not available because userspace is not
> > processing a particular packet.  Instead, it is deciding what to do with
> > the entire class of packets specified by the flow data.  You are only
> > guaranteed to get full packets if during processing you add a flag for
> > "slow" processing as I described earlier.
> 
> Quick question: In odp-execute I call set_ether_type (cant remember the exact name at the moment) on the ofpbuf packet. In my example this buffer has size=81.
> 
> That is all I do in my action, and I can clearly see that it's working -- it sets the correct place under offset 12 in packet->l2 w/right number of bytes. 
> 
> The action after mine is a simple output:1 action, and works too.
> 
> However, wireshark reports that the packet is now 67 bytes (from l2 and up) -- and my testing shows it indeed is. Strangely enough, data is capped from L3, i.e. its tail is truncated. And 81-67=14, which is too much of a coincidence as the eth hdr is exactly 14 bytes. 
> 
> Again, all I do is set the ether type. Do you find this strange, or do you immediately know that I must have forgotten setting any magic flags or fields? If you can't think of anythinh it could be my code, but I've gone through it several times, and I don't do any bad memmoves or stuff like that. 

This doesn't ring a bell for me.



More information about the discuss mailing list