diff options
-rw-r--r-- | net/core/pktgen.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 33bc3823ac6f..52fc1e08a7c4 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -378,6 +378,7 @@ struct pktgen_dev { | |||
378 | 378 | ||
379 | u16 queue_map_min; | 379 | u16 queue_map_min; |
380 | u16 queue_map_max; | 380 | u16 queue_map_max; |
381 | __u32 skb_priority; /* skb priority field */ | ||
381 | int node; /* Memory node */ | 382 | int node; /* Memory node */ |
382 | 383 | ||
383 | #ifdef CONFIG_XFRM | 384 | #ifdef CONFIG_XFRM |
@@ -547,6 +548,10 @@ static int pktgen_if_show(struct seq_file *seq, void *v) | |||
547 | pkt_dev->queue_map_min, | 548 | pkt_dev->queue_map_min, |
548 | pkt_dev->queue_map_max); | 549 | pkt_dev->queue_map_max); |
549 | 550 | ||
551 | if (pkt_dev->skb_priority) | ||
552 | seq_printf(seq, " skb_priority: %u\n", | ||
553 | pkt_dev->skb_priority); | ||
554 | |||
550 | if (pkt_dev->flags & F_IPV6) { | 555 | if (pkt_dev->flags & F_IPV6) { |
551 | char b1[128], b2[128], b3[128]; | 556 | char b1[128], b2[128], b3[128]; |
552 | fmt_ip6(b1, pkt_dev->in6_saddr.s6_addr); | 557 | fmt_ip6(b1, pkt_dev->in6_saddr.s6_addr); |
@@ -1711,6 +1716,18 @@ static ssize_t pktgen_if_write(struct file *file, | |||
1711 | return count; | 1716 | return count; |
1712 | } | 1717 | } |
1713 | 1718 | ||
1719 | if (!strcmp(name, "skb_priority")) { | ||
1720 | len = num_arg(&user_buffer[i], 9, &value); | ||
1721 | if (len < 0) | ||
1722 | return len; | ||
1723 | |||
1724 | i += len; | ||
1725 | pkt_dev->skb_priority = value; | ||
1726 | sprintf(pg_result, "OK: skb_priority=%i", | ||
1727 | pkt_dev->skb_priority); | ||
1728 | return count; | ||
1729 | } | ||
1730 | |||
1714 | sprintf(pkt_dev->result, "No such parameter \"%s\"", name); | 1731 | sprintf(pkt_dev->result, "No such parameter \"%s\"", name); |
1715 | return -EINVAL; | 1732 | return -EINVAL; |
1716 | } | 1733 | } |
@@ -2671,6 +2688,8 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev, | |||
2671 | skb->transport_header = skb->network_header + sizeof(struct iphdr); | 2688 | skb->transport_header = skb->network_header + sizeof(struct iphdr); |
2672 | skb_put(skb, sizeof(struct iphdr) + sizeof(struct udphdr)); | 2689 | skb_put(skb, sizeof(struct iphdr) + sizeof(struct udphdr)); |
2673 | skb_set_queue_mapping(skb, queue_map); | 2690 | skb_set_queue_mapping(skb, queue_map); |
2691 | skb->priority = pkt_dev->skb_priority; | ||
2692 | |||
2674 | iph = ip_hdr(skb); | 2693 | iph = ip_hdr(skb); |
2675 | udph = udp_hdr(skb); | 2694 | udph = udp_hdr(skb); |
2676 | 2695 | ||
@@ -3016,6 +3035,7 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev, | |||
3016 | skb->transport_header = skb->network_header + sizeof(struct ipv6hdr); | 3035 | skb->transport_header = skb->network_header + sizeof(struct ipv6hdr); |
3017 | skb_put(skb, sizeof(struct ipv6hdr) + sizeof(struct udphdr)); | 3036 | skb_put(skb, sizeof(struct ipv6hdr) + sizeof(struct udphdr)); |
3018 | skb_set_queue_mapping(skb, queue_map); | 3037 | skb_set_queue_mapping(skb, queue_map); |
3038 | skb->priority = pkt_dev->skb_priority; | ||
3019 | iph = ipv6_hdr(skb); | 3039 | iph = ipv6_hdr(skb); |
3020 | udph = udp_hdr(skb); | 3040 | udph = udp_hdr(skb); |
3021 | 3041 | ||