[ovs-dev] Possible OVS BUG with ctx->xin->packet

Luca Mancini luca.mancini at outlook.com
Tue May 19 11:42:01 UTC 2020


Hi,
I’m placing my question in this discussion as well as the more I try to debug it the more it seems like an ovs bug to me, I hope not.
In userspace I’m implementing a new action which for now stores the packets received in an array of struct dp_packets, however if I try to print these packets I notice that as packets come in, they overlap as if for every packet received the previous ctx->xin->packet is overwritten.

My code looks something like:


Dp_packet_buff[index] = ctx->xin->packet;
VLOG_ERR(   “%s”     ,      (char *) dp_packet_get_udp_payload(dp_packet_buff[index]    );
Index++

e.g:
3 packets arrive: “everyone”, “hello”, ”aa”

The array stores [“everyone”, “hello ne”, “aa  lo ne”]
Instead of [“everyone”, “hello”, “aa”]

Basically if the received packet is smaller than the one before it, it overwrites what is contained in ctx->xin->packet + 1 character,  and it keeps the remainder of the previous “non-overwritten” string.
Is anyone able to tell me how to fix this, is there a way to cancel what is contained in ctx->xin->packet after saving it in the buffer? I’ve tried setting it to NULL but the overwriting still occurs.


Same thing happens if I don’t do any assignment to an array of dp_packet pointers, so if I just do:

Compose_foo(struct xlate_ctx *ctx):
    //packet arrives and I print i
     If(index < 5):
VLOG_ERR(     "%s",         (char *)   dp_packet_get_udp_payload(ctx->xin->packet)  );
Index ++


In addition, sometimes the packets don’t overlap but very often they do and when they do it always happens with the same number of characters being overwritten as explained in the beginning, so the overlap consistently happens with the same “pattern”.


Been working on this bug for a week now, hopefully someone can help me out,
Thanks

Luca




More information about the dev mailing list