Skip to contentSkip to conversation

Pktgen receive hook in dev.c?

DISCUSSION Ben Greear 2 participants 4 messages Apr 29, 2005 – Apr 30, 2005

Subsystems (2)
lore
Share & tools
lore

Ben Greear

author
#0 lore raw

I am curious if there is any interest in adding a hook in the netif_receive_skb method to allow receiving (and consuming) pktgen packets. This gives the ability to get some good packet receive & latency stats using pktgen.

I asked this a year or so ago and was told no, but since then the netpoll and TC_NCLS hooks have been added.... so maybe hooks are OK again?

The hook would look something like:

#if defined(CONFIG_NET_PKTGEN) || defined(CONFIG_NET_PKTGEN_MODULE)
        if ((skb->dev->priv_flags & IFF_PKTGEN_RCV) &&
            (handle_pktgen_rcv(skb) >= 0)) {
                /* Pktgen may consume the packet, no need to send
                 * to further protocols.
                 */
                goto out;
        }

#endif

        type = skb->protocol;
        list_for_each_entry_rcu(ptype, &ptype_base[ntohs(type)&15], list) {

....

Take it easy,
Ben

Signature · 2 lines
Ben Greear <[email protected]>
Candela Technologies Inc  http://www.candelatech.com
#1 lore raw
Quoted 7 lines · Ben Greear

I am curious if there is any interest in adding a hook in the netif_receive_skb method to allow receiving (and consuming) pktgen packets. This gives the ability to get some good packet receive & latency stats using pktgen.

I asked this a year or so ago and was told no, but since then the netpoll and TC_NCLS hooks have been added.... so maybe hooks are OK again?

Write an action. It should be trivial to consume pktgen. Infact if all you wanted was to count, use the gact action.

cheers,
jamal

author
#2 lore raw
Quoted 6 lines · jamal
Quoted 4 lines · Ben Greear

I am curious if there is any interest in adding a hook in the netif_receive_skb method to allow receiving (and consuming) pktgen packets. This gives the ability to get some good packet receive & latency stats using pktgen.

Quoted 7 lines
Quoted 3 lines

I asked this a year or so ago and was told no, but since then the netpoll and TC_NCLS hooks have been added.... so maybe hooks are OK again?

Write an action. It should be trivial to consume pktgen. Infact if all you wanted was to count, use the gact action.

I want a lot more than count, including timestamp, sequence number, etc.

In order to know it's a pktgen packet, I check for a magic value at the beginning of the UDP header. Since this could potentially collide with some 'real' packet, I also check a flag to see if the net_device has a particular flag set indicating it is actively accepting pktgen packets...

I assume this means I'd need a custom match function in the kernel. Is there an example of how to do something like this using your framework?

Thanks,
Ben

Quoted 4 lines

cheers,
jamal

Signature · 2 lines
Ben Greear <[email protected]>
Candela Technologies Inc  http://www.candelatech.com
#3 lore raw
Quoted 7 lines · Ben Greear
Quoted 2 lines · jamal

Write an action. It should be trivial to consume pktgen. Infact if all you wanted was to count, use the gact action.

I want a lot more than count, including timestamp, sequence number, etc.

Sure you can do all that good stuff in your own action.

Quoted 2 lines

In order to know it's a pktgen packet, I check for a magic value at the beginning of the UDP header.

Use the u32 classifier like so:

on dev eth0, if you see some magic signature on udp described as ... then action my pktgen action.

Quoted 1 line

Since this could potentially collide with some 'real' packet,

The classifier allows you to discriminate

Quoted 3 lines

I also check a flag to see if the net_device has a particular flag set indicating it is actively accepting pktgen packets...

Thats not needed. You should be able to attach a u32 classifier to any device of your choice.

Quoted 1 line

I assume this means I'd need a custom match function in the kernel.

Refer to above - i dont think you do need to put any flag in a device.

Quoted 2 lines

Is there
an example of how to do something like this using your framework?

I explained a few things to you last time you showed up and tried to put hooks. Start there then ask questions. Its pretty simple.

cheers,
jamal