diff mbox

[net-next] ipv4,ipv6: send arp/ndisc packets with TC_PRIO_CONTROL

Message ID 20130814233412.GC13066@order.stressinduktion.org
State RFC, archived
Delegated to: David Miller
Headers show

Commit Message

Hannes Frederic Sowa Aug. 14, 2013, 11:34 p.m. UTC
We already did this change for igmp/mld packets in commit
9d4a0314642918cbda9ed4012df51e8df608fce6 ("ipv4, ipv6: send igmpv3/mld
packets with TC_PRIO_CONTROL").

arp and ndisc are as important as mld/igmp for a working network, so
make the appropriate change here, too.

Cc: Benjamin LaHaise <bcrl@kvack.org>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
---
 net/ipv4/arp.c   | 2 ++
 net/ipv6/ndisc.c | 3 ++-
 2 files changed, 4 insertions(+), 1 deletion(-)

Comments

Hannes Frederic Sowa Aug. 15, 2013, 3:56 a.m. UTC | #1
On Thu, Aug 15, 2013 at 01:34:12AM +0200, Hannes Frederic Sowa wrote:
> We already did this change for igmp/mld packets in commit
> 9d4a0314642918cbda9ed4012df51e8df608fce6 ("ipv4, ipv6: send igmpv3/mld
> packets with TC_PRIO_CONTROL").
> 
> arp and ndisc are as important as mld/igmp for a working network, so
> make the appropriate change here, too.
> 
> Cc: Benjamin LaHaise <bcrl@kvack.org>
> Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>

I would like to downgrade this patch from tag net-next to RFC.

After Dave Taht talked to me, I realized that this change could have drastic
impact on how packets could starve in various qdiscs if a router is last hop
for a ping scan.

Please postpone this patch until I did more research. Comments are welcome,
too.

Thanks,

  Hannes

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index 4429b01..4ed18371 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -92,6 +92,7 @@ 
 #include <linux/fddidevice.h>
 #include <linux/if_arp.h>
 #include <linux/skbuff.h>
+#include <linux/pkt_sched.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/stat.h>
@@ -594,6 +595,7 @@  struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip,
 	skb_reset_network_header(skb);
 	arp = (struct arphdr *) skb_put(skb, arp_hdr_len(dev));
 	skb->dev = dev;
+	skb->priority = TC_PRIO_CONTROL;
 	skb->protocol = htons(ETH_P_ARP);
 	if (src_hw == NULL)
 		src_hw = dev->dev_addr;
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index 79aa965..007f868 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -50,6 +50,7 @@ 
 #include <linux/ipv6.h>
 #include <linux/icmpv6.h>
 #include <linux/jhash.h>
+#include <linux/pkt_sched.h>
 
 #include <net/sock.h>
 #include <net/snmp.h>
@@ -382,7 +383,7 @@  static struct sk_buff *ndisc_alloc_skb(struct net_device *dev,
 			  __func__, err);
 		return NULL;
 	}
-
+	skb->priority = TC_PRIO_CONTROL;
 	skb->protocol = htons(ETH_P_IPV6);
 	skb->dev = dev;