Skip to content

Commit

Permalink
net: add priority field to pktgen
Browse files Browse the repository at this point in the history
Add option to set skb priority to pktgen. Useful for testing
QOS features. Also by running pktgen on the vlan device the
qdisc on the real device can be tested.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
John Fastabend authored and David S. Miller committed Nov 18, 2010
1 parent f72f2f4 commit 9e50e3a
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions net/core/pktgen.c
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ struct pktgen_dev {

u16 queue_map_min;
u16 queue_map_max;
__u32 skb_priority; /* skb priority field */
int node; /* Memory node */

#ifdef CONFIG_XFRM
Expand Down Expand Up @@ -547,6 +548,10 @@ static int pktgen_if_show(struct seq_file *seq, void *v)
pkt_dev->queue_map_min,
pkt_dev->queue_map_max);

if (pkt_dev->skb_priority)
seq_printf(seq, " skb_priority: %u\n",
pkt_dev->skb_priority);

if (pkt_dev->flags & F_IPV6) {
char b1[128], b2[128], b3[128];
fmt_ip6(b1, pkt_dev->in6_saddr.s6_addr);
Expand Down Expand Up @@ -1711,6 +1716,18 @@ static ssize_t pktgen_if_write(struct file *file,
return count;
}

if (!strcmp(name, "skb_priority")) {
len = num_arg(&user_buffer[i], 9, &value);
if (len < 0)
return len;

i += len;
pkt_dev->skb_priority = value;
sprintf(pg_result, "OK: skb_priority=%i",
pkt_dev->skb_priority);
return count;
}

sprintf(pkt_dev->result, "No such parameter \"%s\"", name);
return -EINVAL;
}
Expand Down Expand Up @@ -2671,6 +2688,8 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
skb->transport_header = skb->network_header + sizeof(struct iphdr);
skb_put(skb, sizeof(struct iphdr) + sizeof(struct udphdr));
skb_set_queue_mapping(skb, queue_map);
skb->priority = pkt_dev->skb_priority;

iph = ip_hdr(skb);
udph = udp_hdr(skb);

Expand Down Expand Up @@ -3016,6 +3035,7 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
skb->transport_header = skb->network_header + sizeof(struct ipv6hdr);
skb_put(skb, sizeof(struct ipv6hdr) + sizeof(struct udphdr));
skb_set_queue_mapping(skb, queue_map);
skb->priority = pkt_dev->skb_priority;
iph = ipv6_hdr(skb);
udph = udp_hdr(skb);

Expand Down

0 comments on commit 9e50e3a

Please sign in to comment.