batman-adv: Refresh patches
[feed/routing.git] / batman-adv / patches / 0005-batman-adv-Treat-NET_XMIT_CN-as-transmit-successfull.patch
1 From: Gao Feng <gfree.wind@gmail.com>
2 Date: Mon, 21 Nov 2016 23:00:32 +0800
3 Subject: batman-adv: Treat NET_XMIT_CN as transmit successfully
4
5 The tc could return NET_XMIT_CN as one congestion notification, but
6 it does not mean the packet is lost. Other modules like ipvlan,
7 macvlan, and others treat NET_XMIT_CN as success too.
8
9 So batman-adv should add the NET_XMIT_CN check.
10
11 Signed-off-by: Gao Feng <gfree.wind@gmail.com>
12 Signed-off-by: Sven Eckelmann <sven@narfation.org>
13
14 Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/1120b81c74187f489c08fc9438305071def089cc
15
16 diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c
17 index 49576c5a3fe306a42c28c3901d2b2c6cce7d0b8e..3641765d55df049a5dbac35d322ebc537a0f0322 100644
18 --- a/net/batman-adv/distributed-arp-table.c
19 +++ b/net/batman-adv/distributed-arp-table.c
20 @@ -659,7 +659,8 @@ static bool batadv_dat_send_data(struct batadv_priv *bat_priv,
21 }
22
23 send_status = batadv_send_unicast_skb(tmp_skb, neigh_node);
24 - if (send_status == NET_XMIT_SUCCESS) {
25 + if (send_status == NET_XMIT_SUCCESS ||
26 + send_status == NET_XMIT_CN) {
27 /* count the sent packet */
28 switch (packet_subtype) {
29 case BATADV_P_DAT_DHT_GET:
30 diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
31 index 11149e5be4e0ef9dfe2872e1d8d1f6dbb4ccdb14..d33f16b9b8ac13ba630bf9ac8c5f4f0ca79fc878 100644
32 --- a/net/batman-adv/fragmentation.c
33 +++ b/net/batman-adv/fragmentation.c
34 @@ -517,7 +517,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
35 batadv_add_counter(bat_priv, BATADV_CNT_FRAG_TX_BYTES,
36 skb_fragment->len + ETH_HLEN);
37 ret = batadv_send_unicast_skb(skb_fragment, neigh_node);
38 - if (ret != NET_XMIT_SUCCESS) {
39 + if (ret != NET_XMIT_SUCCESS && ret != NET_XMIT_CN) {
40 ret = NET_XMIT_DROP;
41 goto put_primary_if;
42 }
43 diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
44 index 6713bdf414cdacdaf36ecd6ac516f99e079fb51e..6b08b26da4d94be9c8c5e9dc708ddc18d8282428 100644
45 --- a/net/batman-adv/routing.c
46 +++ b/net/batman-adv/routing.c
47 @@ -262,7 +262,7 @@ static int batadv_recv_my_icmp_packet(struct batadv_priv *bat_priv,
48 icmph->ttl = BATADV_TTL;
49
50 res = batadv_send_skb_to_orig(skb, orig_node, NULL);
51 - if (res == NET_XMIT_SUCCESS)
52 + if (res == NET_XMIT_SUCCESS || res == NET_XMIT_CN)
53 ret = NET_RX_SUCCESS;
54
55 /* skb was consumed */
56 @@ -330,7 +330,7 @@ static int batadv_recv_icmp_ttl_exceeded(struct batadv_priv *bat_priv,
57 icmp_packet->ttl = BATADV_TTL;
58
59 res = batadv_send_skb_to_orig(skb, orig_node, NULL);
60 - if (res == NET_RX_SUCCESS)
61 + if (res == NET_RX_SUCCESS || res == NET_XMIT_CN)
62 ret = NET_XMIT_SUCCESS;
63
64 /* skb was consumed */
65 @@ -424,7 +424,7 @@ int batadv_recv_icmp_packet(struct sk_buff *skb,
66
67 /* route it */
68 res = batadv_send_skb_to_orig(skb, orig_node, recv_if);
69 - if (res == NET_XMIT_SUCCESS)
70 + if (res == NET_XMIT_SUCCESS || res == NET_XMIT_CN)
71 ret = NET_RX_SUCCESS;
72
73 /* skb was consumed */
74 @@ -719,14 +719,14 @@ static int batadv_route_unicast_packet(struct sk_buff *skb,
75
76 len = skb->len;
77 res = batadv_send_skb_to_orig(skb, orig_node, recv_if);
78 - if (res == NET_XMIT_SUCCESS)
79 + if (res == NET_XMIT_SUCCESS || res == NET_XMIT_CN)
80 ret = NET_RX_SUCCESS;
81
82 /* skb was consumed */
83 skb = NULL;
84
85 /* translate transmit result into receive result */
86 - if (res == NET_XMIT_SUCCESS) {
87 + if (res == NET_XMIT_SUCCESS || res == NET_XMIT_CN) {
88 /* skb was transmitted and consumed */
89 batadv_inc_counter(bat_priv, BATADV_CNT_FORWARD);
90 batadv_add_counter(bat_priv, BATADV_CNT_FORWARD_BYTES,
91 diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
92 index 7b3494ae6ad93fd0d32391e5c88f5d636f43acd5..60516bbb7e8391f3063ba1e48c81288ffc7bef49 100644
93 --- a/net/batman-adv/soft-interface.c
94 +++ b/net/batman-adv/soft-interface.c
95 @@ -386,7 +386,7 @@ send:
96 ret = batadv_send_skb_via_tt(bat_priv, skb, dst_hint,
97 vid);
98 }
99 - if (ret != NET_XMIT_SUCCESS)
100 + if (ret != NET_XMIT_SUCCESS && ret != NET_XMIT_CN)
101 goto dropped_freed;
102 }
103
104 diff --git a/net/batman-adv/tp_meter.c b/net/batman-adv/tp_meter.c
105 index 981e8c5b07e9398c68df711d1d7b54e6e9333ead..c367c8316a822c70ee397bbe1266cd38f24a279b 100644
106 --- a/net/batman-adv/tp_meter.c
107 +++ b/net/batman-adv/tp_meter.c
108 @@ -615,7 +615,7 @@ static int batadv_tp_send_msg(struct batadv_tp_vars *tp_vars, const u8 *src,
109 batadv_tp_fill_prerandom(tp_vars, data, data_len);
110
111 r = batadv_send_skb_to_orig(skb, orig_node, NULL);
112 - if (r == NET_XMIT_SUCCESS)
113 + if (r == NET_XMIT_SUCCESS || r == NET_XMIT_CN)
114 return 0;
115
116 return BATADV_TP_REASON_CANT_SEND;