[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [Libevent-users] Inline modification of evbuffer data



I understood that the first time.

If you’re using a TAP interface to read packets, you’d still need to re-inject them back into the kernel via a write to TAP.

But it sounds to me like you should be using tc and iptables (at least if you’re using Linux).

You don’t want to be doing this in user-space (unless you’re using DPDK).

Either way, libevent is probably not the droid you’re looking for.



On Nov 15, 2016, at 2:56 PM, Prasad <divaturi@xxxxxxxxx> wrote:

I am not inserting any new data - only need to modify existing packet header in-place.

On Tue, Nov 15, 2016 at 1:50 PM, Philip Prindeville <philipp_subx@xxxxxxxxxxxxxxxxxxxxx> wrote:
Nothing in the description of evbuffer_pullup() suggests to me that this would need to happen.

There’s no discussion about freeing the returned memory, for instance, which would need to happen if it were a separate buffer.

But there’s a simple test: try calling evbuffer_pullup() on the same buffer twice before draining it, and see if the pointer returned both times is the same…

-Philip


On Nov 15, 2016, at 1:29 PM, Devi Prasad Ivaturi <divaturi@xxxxxxxxx> wrote:

Also, isn't the buffer returned by pullup() is only for peeking and NOT modifying the buffer?

Regards,
-devi

On Tue, Nov 15, 2016 at 12:27 PM, Devi Prasad Ivaturi <divaturi@xxxxxxxxx> wrote:
In the front only, if you want to call it that way.

Say, I want to just modify the TTL or TOS values of IP header of a network packet (accessed using evbuffer API)
passing through my box: don't want to use pullup() which is costly, since, the IP header could be a few headers
away from the beginning (MAC + other enapsulations).

I don't understand how add_reference() would meet the need: I want to modify the bytes in the packet headers, from
less than a byte upto 16 bytes max.

Regards,
-devi

On Tue, Nov 15, 2016 at 11:35 AM, Philip Prindeville <philipp_subx@redfish-solutions.com> wrote:
Where in the buffer is the data?  Is it near the front or not?

If it’s near the front, then use evbuffer_pullup().  Otherwise, you could provide your own underlying storage with evbuffer_add_reference().



On Nov 15, 2016, at 11:58 AM, Devi Prasad Ivaturi <divaturi@xxxxxxxxx> wrote:

And I get the impression that these API are to insert data rather than modify existing data.


On Nov 15, 2016 10:43 AM, "Devi Prasad Ivaturi" <divaturi@xxxxxxxxx> wrote:

BTW, I did consider reserve/commit space API, but, thought they might be an overkill. I prefer peeking the byte location and modifying it.


On Nov 15, 2016 10:12 AM, "Devi Prasad Ivaturi" <divaturi@xxxxxxxxx> wrote:

How can I modify a byte or two directly in evbuffer data?