Packets have lengths and you know the length. Use it, don't scan for any terminator.
On Thu, May 21, 2020 at 07:26:30PM +0000, Luca Mancini wrote: > > Well is there any possible way to retrieve the correct payload without the > previous one? Hard coding it to only get the payload until it reaches “\n” is > the best solution I could come up with, but obviously this presents a mistake > since it will cut packets that have a newline string in them. To continue > developing my buffering action I need the full correct packet, do you see any > other solution? > > Best, > L > > From: Ben Pfaff<mailto:[email protected]> > Sent: Thursday, May 21, 2020 21:14 > To: Luca Mancini<mailto:[email protected]> > Cc: [email protected]<mailto:[email protected]> > Subject: Re: [ovs-discuss] OVERLAPPING DP_PACKETS ctx->xin->payload > > On Thu, May 21, 2020 at 01:28:37PM +0000, Luca Mancini wrote: > > Hi, > > I found out while debugging my new action that ovs overlaps incoming packet > > payloads and I haven’t found a fix for this. I can’t tell if it’s an OVS > > bug or if I’m doing something wrong. > > > > Basically once do_xlate_actions is called and my action is “hit” I attempt > > to print the packet to gdb using this command: > > Ofproto/ofproto-dpif-xlate.c: > > Compose_foo(ctx): > > VLOG_ERR( "%s", (char *) > > dp_packet_get_udp_payload(ctx->xin->packet) ); > > > > While debugging I saw the function dp_packet_get_udp_payload(*b) often > > being called on a previous already used dp_packet pointer (*b), which by > > debugging even further, I notice it sometimes still contains the previous > > udp payload received previously, so the call overlaps the 2 payloads. Is > > this normal behavior? More precise info on how it overlaps can be seen here: > > > > https://mail.openvswitch.org/pipermail/ovs-discuss/2020-May/050090.html > > > > This is my very trivial setup > > > > * I’m using netcat to send udp payloads between the 2 hosts in the > > topology h1----s1---h2 > > * Only flows that contain udp packets go through my foo_Action : “sh > > ovs-ofctl add-flow s1 in_port=1,dl_type=2048,nw_proto=17,action=foo” > > > > My end goal is to save these incoming packets in a buffer and if the > > payloads are wrong then there’s really no point. > > I’m guessing I need a way to free the contents of the pointer > > ctx->xin->payload, but I haven’t found anything useful in the code, also > > since ctx->xin->packet is a const I can’t modify it. > > Sorry if this is kind of a repost from my previous query but I’ve tried > > everything, so any help will be highly appreciated! > > Nothing you've presented so far gives me confidence that there's any bug > at all. The libc memory allocator reuses memory when it's freed, and > doesn't clear it when it's reused. If the previous packet is longer > than the current one, then some of its bytes are likely to still be > there in memory. > _______________________________________________ discuss mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-discuss
