[linux-merge]linux integration; annotated tag, v4.19.192, created. v4.19.192
by postmaster@open-mesh.org
The annotated tag, v4.19.192 has been created
at b55aa9040fd551a97dc1988808dee2c68f7430b8 (tag)
tagging 6b7b0056defc6eb5c87bbe4690ccda547b2891aa (commit)
replaces v4.19.190
tagged by Greg Kroah-Hartman
on Wed May 26 11:52:35 2021 +0200
- Shortlog ------------------------------------------------------------
This is the 4.19.192 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmCuGmMACgkQONu9yGCS
aT6p7RAAypAZNJx5oEsvfbJyK8DGRAHweLd/zthXYqjwYqDJ3wx5c3QtXWyhctFW
uLx4w02dA79uL+Io32gChtke+/ReKXeQdAKV8GsAjIKtrOzbGHUs607PEY1X5kwR
o6PNlmauMjXEacN1fBIUX/n5oC6+Bdag8pOYCz0k16K3t+VqkLxg3u4aqmW376I2
D38n7nefESM/Q2ihSX4J1wgZqCXL4CHZnQRj3LS/fIdRxugqKvQ3gBg4L2Z8kKDw
EOsTFNDYEwbfc6pC8eaaBXb+QS+92x1Bbe79OvKQCKnJEnVoKQ7f0mdYdU4eTz11
18xnB1vhYXSM0uLCKmLYUaeioNNGgqhGimip1jpn4uD5MiWNamHx4yn6rWf7pq0W
5Eq0bWjKjY9hI5z14uELpTm3NLTo9E1UY98rEajjJcO8jLsHfn9ZCBa3qy+h8SSk
r7jPKUg75TABezkRDBnUrpmdNJJz4xYTXHbDsnWnTSsRkSh4/V7WwOihxelmg8k1
hxoRqJay1iUGhPICrAoZnvo1a5gr5fxRepoj8B+0ZYeMdboPsdrEvVOpQ4hI1ujR
/LssiapXf9jGwE+ZbxJ5sVDS4+gutqiyMMj3ylPtKZF7tYMrLkcAjqULPoOtvA7B
Ip97nwmavaqG9y/r6H+1BYVY6NFeq3rng/nM03GnnKTAzXhxc5I=
=1EeD
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration
1 year, 8 months
[linux-merge]linux integration; annotated tag, v5.4.123, created. v5.4.123
by postmaster@open-mesh.org
The annotated tag, v5.4.123 has been created
at 6eed3e47368eb3f89973039100160047d607a4f8 (tag)
tagging 103f1dbea1ae44731edca02cd7fcfa4a33742cd2 (commit)
replaces v5.4.117
tagged by Greg Kroah-Hartman
on Fri May 28 13:14:41 2021 +0200
- Shortlog ------------------------------------------------------------
This is the 5.4.123 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmCw0KEACgkQONu9yGCS
aT4TxxAAvW/xsJKApUuCTrrdY/YMj96bFT6dcF/17N36Tb+lNRL+Ig+dYlfammlD
sp7enkerXrIU+27ngnsJfznJLDXOCUPw77p9H90Kzbo7k3wi7Pt2nqFRyuOwYLRN
CLo3gmWNWBReCjYmUK5uzUlGeUnQOtD7pcEMexOVxgMmRsJ1uKU2UGKHCIa8VxS1
/xf8mQJv0lIbm8GLSYzCsP3zYafzc0cY0ST6CvCCX+71ryfKXGTtH0wAUvdvWsTs
yvpc7UhFcnW9t2e77w9DmyQRf/nDfsu/ueXqITkJot4fYshA0w9owsNxKdnq/DKV
nfIVK/agISYeT44uWOqb9TBUdEz2nWA31eIrXD6/Tf4ZUVw2WQy/UD8l5gUt+G7s
Ag4nKSEZP4BAsZbnwnYPUm/qsfLm5l2+Spj4IK6mA7TZKMvjgLiHJIxihYzfeuof
q/E9NeH8ejfrO6tnMyTUZzmPRjMImoeAvg+NaldpDlSyDE+DG+l9iIjO66Lg0uif
dupHtAXFEjgfqHIRfvq4lW6lRKmUwhUkw0mdGgOSbgjoTktJNdrAVoQgsOIvhYBJ
fuhs9PTGT5isekDEotdsj8wuXlVKQ2rMKl98Z1djZXA73INobftgbtFxaVGIhLj/
7LK6pbnaClT5bHJBi+AvVExOZolPsCxgxaXsESCV4nxppEOjRxA=
=+GH7
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration
1 year, 8 months
[linux-merge]linux integration; annotated tag, v5.10.41, created. v5.10.41
by postmaster@open-mesh.org
The annotated tag, v5.10.41 has been created
at 6e1c69d7d79c21330e6af07d309b4c3680d61259 (tag)
tagging 33069919e2dce440d3b8cd101b18f37bb35bdddf (commit)
replaces v5.10.35
tagged by Greg Kroah-Hartman
on Fri May 28 13:17:53 2021 +0200
- Shortlog ------------------------------------------------------------
This is the 5.10.41 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmCw0WEACgkQONu9yGCS
aT5K6RAAphIxwnUhvm1gBe+lzNOsp6ZURXMIT6hANhUdCU21Tw6agLGRELOJ+YNQ
agLdWb3auH1ufGV0wUtUJYbLa3lYF6uuU53BZb2i9iJ+1X2igzGwtVN/lEdcZs4G
R6hD8W5Rxiam5K7KAgYZLpSA5bS3ETrfsbJ2kddIGGSH1BHnwrManXOan1U9mY99
HDf+ksPCF2iA8Zqqq5Hx2g9Nuf0x0vyZ+6cob2QdJVq5ZnZXwamC498zmi/vGkGj
fPSxjaBMR9kDMQhUmvgSmAieM0UrrsPIkOxsWWCz/Lo4qhTG8+ccyHmplnsvvsyz
R3LEdq0YK3vMTypi7RfdxaEeB1a5d8cTV4JYZBs/eOU45lBVKZ+IKp1KJjTqtshy
Oj7LnNtONUfPNfXki+AgW7zGTPUJqK3hxW5j87Qg0MKe1i7CrAxmKhDcWX23acYG
5jBlUGX8vrYycdjvGCC7m/+T1NptVi/9UbcTi22au8hSwtKokn6AdTifTNfjst7H
4UMslyD5EA1Js17eObk/04kB0iMp9RSIEtc8DOV3cHZWAu3gK6pKe+RBL4uZ/K7Q
Wr8+gqlGyjg89NMjwoyXYaCTRkEwDcSSjKXzbfX1Pqjbujc/I7MLiLlPoen4Pe2i
v4aftEYPa4SHznutCQmLqRghFUfsxkRJKYVoo+SvKbhK7dE92O4=
=KKY2
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration
1 year, 8 months
[linux-merge]linux integration; annotated tag, v5.12.8, created. v5.12.8
by postmaster@open-mesh.org
The annotated tag, v5.12.8 has been created
at c11a0a70b71227b8e980136959f8ea84480b2519 (tag)
tagging cfb3ea79045ad3c7bcaa0036b5a66609ccdadffe (commit)
replaces v5.12.2
tagged by Greg Kroah-Hartman
on Fri May 28 13:20:38 2021 +0200
- Shortlog ------------------------------------------------------------
This is the 5.12.8 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmCw0gYACgkQONu9yGCS
aT5DmxAAit8w7/PRKbs5tq9i67KLMhX2oYriGEKgfgjVdcX5LXMbsokpqV8Am9NC
OjByQStPRDC5xxkKhtabwP9vnKaFVCO1drm7pQzwpBdxEICb5TKwtXKM1sf+ad1m
kkrZ3fWV1iPw9pI9STTf4FFc2yoVWheYRkerWZrae2hdoQykAadog8MaoFkwpfc0
NKpWeZ64SpQm0/V1FX/Iq2D7IyIami44hpHigpl1fyBCRDIMRWpTswsH1FgO4D7m
L0yGCJ3K96MAh3NqxD43wQSmb0IWiKDC+rphG/J51z5Fh0vis6Ercaecd/TVrmJC
03ahm+9TDH3ASJTvr7sclm3gDO9ahkc/Zm2dyMfqx/jeM0YUQE8HvyQ9ipRm9j7C
h0BkcvFbUBjpzx4PRxbsaB4CoDgZeDc12Rr8Z5XzYbNNDwyVllXQBNhGPkvsonlW
zMWORzVotrv5J4YOUynccvTr+nLNf0H4Vsk0dna3JjyqBpsUapDiQnjcdCtZQneG
WCz96HL0hlrw5HrPd3OqF4exGIJF81mr+A0n4IFMiUyDlN6xFc+wqD5GoQOADYRr
4Iv8R9SHQElKh7rOG7OB6mKpczzRUuTBdmeweo61cFghqcyzZexlHecAXTt4Mo80
d6AZ87B76kqlvTWBprUgvwgTpfHSvCP4198aKViP5i/LWVFr6Fs=
=xhjG
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration
1 year, 8 months
[linux-merge]linux integration; annotated tag, v4.4.270, created. v4.4.270
by postmaster@open-mesh.org
The annotated tag, v4.4.270 has been created
at 2f1b53fcbed228bff2b6b3ec072f873e6fd46f66 (tag)
tagging adec72d873c39badd7cd94eb184274ec3fa2dd0a (commit)
replaces v4.4.268
tagged by Greg Kroah-Hartman
on Wed May 26 11:28:01 2021 +0200
- Shortlog ------------------------------------------------------------
This is the 4.4.270 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmCuFKEACgkQONu9yGCS
aT5Fig//SvGscmoZJRf6ZWDvgxJEXuqo5ut3X/hb7E3sYElk7x2nzkWfeZpEfkB8
tRDIM3lkJYH15So0GSTBZtTyMy4FGxFhlZF9JIcAZboIH/hHhwp5u/BOWaJEC789
0sccmEjDqRtplFQca+8PX+vdd29Kz4O/PrLdz7gNkKkVdEZcem+Kk71YelOCctHJ
AvgebDorlZ2uoSFuGRjZqYWmxgXp74la3kP6L6cL5A19f+xBx6hB5caXau5SiI0K
yD40mEwVI3aDwh57N6mqtTtrjRAeMiOnWkT3D4FaEkg/+zsQdRVVoGz6keQrqvqn
gyJh4hJqLbBvu+TZ5xV8R/e+C2ozTmOW7Nx6lNrYiti6XJJ5pEgfG2rvlExw7DGt
AILF3J8VG8GOeVdsp+vjIISSlPkIrXGXnfQhlbMUXHjq19rv2m4ITlD5R/NGVRa8
1iD3EXibMkSN5DqfT2IUbYcPCmKhoWrtY4RboB2KV8FvWlI5DiDul3r0nAG1M1gl
zNvsLJq55Kf4oUTJ4OG/aoZa5RnB8IfPGHqsW2UwSpJpJZFFB/B5nJZQC2Vv7GYV
JS8XKLClOMzVz+BN23bbWN5zyGY+79fD+zI0Or8qpX9X9pSpnUvPcW4dhdO0BImn
gIWMhzYeZ7b1WC6UVUxBOAm4dh3AIsPRw8FTSbLrJFEHiXxEUmw=
=9GwR
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration
1 year, 8 months
[linux-merge]linux integration; annotated tag, v4.9.270, created. v4.9.270
by postmaster@open-mesh.org
The annotated tag, v4.9.270 has been created
at 03590e30c6030bf7e21f840f194385f30ccb678f (tag)
tagging b56da4caac598e69d707ee64bf6f6c7b832cc807 (commit)
replaces v4.9.268
tagged by Greg Kroah-Hartman
on Wed May 26 11:31:42 2021 +0200
- Shortlog ------------------------------------------------------------
This is the 4.9.270 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmCuFX4ACgkQONu9yGCS
aT6VwhAAmKzj8xR0GmKsTNXTaUkaRM3iyWu//Rag89WKGVjYKvlJ9u6abnPvkXnP
kkmbzNLXhek96nx3LZ8kCSV3ROFDPHYtJFcfGBzlDs+11FpJLzZ4XYe6HiuboM6k
2fWYvV+pth/+94GJhXIpU1qKJLYGlv0sYMfxjmNodz80+KgYvHvfwFNcEepCBd5b
M9Qmn8J4wL9AIuFQfAbOt2fW7LpL3YYMNWjNuKV4AkN1ZNsZwWYD+bKKIZGKgNaz
uAzGfcDLO0H2j64hMwuw/Zurtya540wH6c9ADKSbPOztMsXgL4NTuMSZaVmhhVp3
ABKQ59wL4XBPhz0dvuBGxo7PpwFVtRalDis9DwQY17SknOrc8QcpAbKU8PhS8gcr
CHQWj6kzKCYg+inQz4mLVgZtKYohT8zs0bgshKFeiPtZIb8WKJt+wMcqOq6e3egS
NXy0DzqawIeIUbNSzmpG3K5gIuZla5gqaA66xilfo5YxtFB304IUweRra+dNz688
L8nNGh7bZWhEMpG6MtKDYrKI4K/QO2E+F0mSgRzCOD4NqvxpZ2YxbKwATFSmBOOV
pQ2bN/X/4rgZOraaNN7SP2q2j0VFbbdLW1MS6MCo6JaQXmjtt4dfyJtLSeCMs2t3
AQ2/1JZ8u/Pb4KcnBy8p0CJQWXJEKiH1qDxoriOFGN2g1ygxE0o=
=pWf6
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration
1 year, 8 months
[linux-merge]linux integration; annotated tag, v4.14.234, created. v4.14.234
by postmaster@open-mesh.org
The annotated tag, v4.14.234 has been created
at 191f1a592e62d3e861943e9f806a763fcb794f32 (tag)
tagging ad8397a84e1e425e3f8221638cee2bfa237d9b2c (commit)
replaces v4.14.232
tagged by Greg Kroah-Hartman
on Wed May 26 11:47:29 2021 +0200
- Shortlog ------------------------------------------------------------
This is the 4.14.234 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmCuGTEACgkQONu9yGCS
aT6qfw//TmrKoTY3f3qZ4REujQ4uEbAB0vH3iuVyVNj2yIfRcNt1kYxTaIFQFIup
PTa05fLmNW/AcIVcdjgBsGOYkGKk/HYpaGkD20cEQFZhPhmDfOFIhPArW/PuwJgF
gLwZm9pEcUJIIrxFSmrLezpihRiWgujNGTVmNK2IkDYOMOZMYQ4FGHC+NMHUBNrp
ZikoweSwrGou8so8JLGojoauLjKgNHqXDhzh5YWnnET49ZHSpOfURErOwBRNbmKo
UelhjIodcoal4Fcehjwcus+4jVRA1g23b6grXpDZOmm2TWMdyhvmmwvc5+2JJvi9
hWeHDWwSO4MGdvst4gPSOM3psem9XeztWx5gBtRMPkjiURpwX371pIVJVTVltPdg
X6nUnzi1FA0wDyu/MrAiG0a2rklwnsfJXwaa6kckDAnZ0rgb9UBlc0H5gm0dh755
FyF6RT0pa94RO8n7vrg7E3sNIR3huv8EjMQCM9nMf8oZPXuSIv9GWv3Tgh9JEFfc
dqS1ixcU2dzdlghyQHDadBUyIx2tNfUlVAtNnEnhjh88AmSQDbQ5Cd8V16Hqu8hA
//QVoHch+uOP+cDPoQ0f0khYfJSWjUEdPVmSiusQZdvE08Jea7KUJYuQFmQ5KwV4
wXwaBLMTQaz/f6dDEnxdP07KgyuDpJ+rnriC+BUEB9ZzgtOREZc=
=ysHH
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration
1 year, 8 months
[linux-merge]linux integration; annotated tag, v5.13-rc4, created. v5.13-rc4
by postmaster@open-mesh.org
The annotated tag, v5.13-rc4 has been created
at 3d34748611aa9c15509eb286463ebace02eaae14 (tag)
tagging 8124c8a6b35386f73523d27eacb71b5364a68c4c (commit)
replaces v5.13-rc3
tagged by Linus Torvalds
on Sun May 30 11:58:25 2021 -1000
- Shortlog ------------------------------------------------------------
Linux 5.13-rc4
-----BEGIN PGP SIGNATURE-----
iQFSBAABCAA8FiEEq68RxlopcLEwq+PEeb4+QwBBGIYFAmC0CoEeHHRvcnZhbGRz
QGxpbnV4LWZvdW5kYXRpb24ub3JnAAoJEHm+PkMAQRiG8qYH/0bJOUUsj4fsBHY+
1fSTcbEZYxrdO6nYOzk34UZBeC7rGdhpFFVCU0fh/il8ec3K8pU9ypZykhvpFwGD
cY0zrfaNiEcsIinYZh/tMyfPK3JMqGrcOkKqYli5kSfW9BR0YzHBeiETcHMyZfMu
a8uI9nNYIZda0hwrXMbMNaFMH4Nif3kXwDxNNrx1THaTYifVZK+IwlM8TpcSPIK/
eNbU+5G/VBiQ9YE4PZyXVbsWMZcJ9NDRanx6aKMYTlwSDytxmd5HlURKJcfOiXnQ
AQq9VYbkkuw6FhBPnWvkYVJj1UwkySXjXyZkTiIH8iIMpJ406rWrQgIaQPI3o/98
iVDfH9k=
=t88B
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration
1 year, 8 months
[batman-adv] master: batman-adv: bcast: queue per interface, if needed (5e399a8a)
by postmaster@open-mesh.org
Repository : ssh://git@diktynna/batman-adv
On branch : master
>---------------------------------------------------------------
commit 5e399a8a6b094df059847638da2cd4c39b945301
Author: Linus L��ssing <linus.luessing(a)c0d3.blue>
Date: Mon May 17 00:33:07 2021 +0200
batman-adv: bcast: queue per interface, if needed
Currently we schedule a broadcast packet like:
3x: [ [(re-)queue] --> for(hard-if): maybe-transmit ]
The intention of queueing a broadcast packet multiple times is to
increase robustness for wireless interfaces. However on interfaces
which we only broadcast on once the queueing induces an unnecessary
penalty. This patch restructures the queueing to be performed on a per
interface basis:
for(hard-if):
- transmit
- if wireless: [queue] --> transmit --> [requeue] --> transmit
Next to the performance benefits on non-wireless interfaces this
should also make it easier to apply alternative strategies for
transmissions on wireless interfaces in the future (for instance sending
via unicast transmissions on wireless interfaces, without queueing in
batman-adv, if appropriate).
Signed-off-by: Linus L��ssing <linus.luessing(a)c0d3.blue>
Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
>---------------------------------------------------------------
5e399a8a6b094df059847638da2cd4c39b945301
net/batman-adv/main.h | 1 -
net/batman-adv/routing.c | 9 +-
net/batman-adv/send.c | 374 +++++++++++++++++++++++++++-------------
net/batman-adv/send.h | 12 +-
net/batman-adv/soft-interface.c | 12 +-
5 files changed, 270 insertions(+), 138 deletions(-)
diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h
index b8f819a5..014235fd 100644
--- a/net/batman-adv/main.h
+++ b/net/batman-adv/main.h
@@ -88,7 +88,6 @@
/* number of packets to send for broadcasts on different interface types */
#define BATADV_NUM_BCASTS_DEFAULT 1
#define BATADV_NUM_BCASTS_WIRELESS 3
-#define BATADV_NUM_BCASTS_MAX 3
/* length of the single packet used by the TP meter */
#define BATADV_TP_PACKET_LEN ETH_DATA_LEN
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index 40f5cffd..bb9e93e3 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -1182,9 +1182,9 @@ int batadv_recv_bcast_packet(struct sk_buff *skb,
struct batadv_bcast_packet *bcast_packet;
struct ethhdr *ethhdr;
int hdr_size = sizeof(*bcast_packet);
- int ret = NET_RX_DROP;
s32 seq_diff;
u32 seqno;
+ int ret;
/* drop packet if it has not necessary minimum size */
if (unlikely(!pskb_may_pull(skb, hdr_size)))
@@ -1210,7 +1210,7 @@ int batadv_recv_bcast_packet(struct sk_buff *skb,
if (batadv_is_my_mac(bat_priv, bcast_packet->orig))
goto free_skb;
- if (bcast_packet->ttl < 2)
+ if (bcast_packet->ttl-- < 2)
goto free_skb;
orig_node = batadv_orig_hash_find(bat_priv, bcast_packet->orig);
@@ -1249,7 +1249,9 @@ int batadv_recv_bcast_packet(struct sk_buff *skb,
batadv_skb_set_priority(skb, sizeof(struct batadv_bcast_packet));
/* rebroadcast packet */
- batadv_add_bcast_packet_to_list(bat_priv, skb, 1, false);
+ ret = batadv_forw_bcast_packet(bat_priv, skb, 0, false);
+ if (ret == NETDEV_TX_BUSY)
+ goto free_skb;
/* don't hand the broadcast up if it is from an originator
* from the same backbone.
@@ -1275,6 +1277,7 @@ spin_unlock:
spin_unlock_bh(&orig_node->bcast_seqno_lock);
free_skb:
kfree_skb(skb);
+ ret = NET_RX_DROP;
out:
if (orig_node)
batadv_orig_node_put(orig_node);
diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
index 157abe92..07b0ba26 100644
--- a/net/batman-adv/send.c
+++ b/net/batman-adv/send.c
@@ -737,57 +737,48 @@ void batadv_forw_packet_ogmv1_queue(struct batadv_priv *bat_priv,
}
/**
- * batadv_add_bcast_packet_to_list() - queue broadcast packet for multiple sends
+ * batadv_forw_bcast_packet_to_list() - queue broadcast packet for transmissions
* @bat_priv: the bat priv with all the soft interface information
* @skb: broadcast packet to add
* @delay: number of jiffies to wait before sending
* @own_packet: true if it is a self-generated broadcast packet
+ * @if_in: the interface where the packet was received on
+ * @if_out: the outgoing interface to queue on
*
- * add a broadcast packet to the queue and setup timers. broadcast packets
+ * Adds a broadcast packet to the queue and sets up timers. Broadcast packets
* are sent multiple times to increase probability for being received.
*
- * The skb is not consumed, so the caller should make sure that the
- * skb is freed.
- *
* Return: NETDEV_TX_OK on success and NETDEV_TX_BUSY on errors.
*/
-int batadv_add_bcast_packet_to_list(struct batadv_priv *bat_priv,
- const struct sk_buff *skb,
- unsigned long delay,
- bool own_packet)
+static int batadv_forw_bcast_packet_to_list(struct batadv_priv *bat_priv,
+ struct sk_buff *skb,
+ unsigned long delay,
+ bool own_packet,
+ struct batadv_hard_iface *if_in,
+ struct batadv_hard_iface *if_out)
{
- struct batadv_hard_iface *primary_if;
struct batadv_forw_packet *forw_packet;
- struct batadv_bcast_packet *bcast_packet;
+ unsigned long send_time = jiffies;
struct sk_buff *newskb;
- primary_if = batadv_primary_if_get_selected(bat_priv);
- if (!primary_if)
- goto err;
-
newskb = skb_copy(skb, GFP_ATOMIC);
- if (!newskb) {
- batadv_hardif_put(primary_if);
+ if (!newskb)
goto err;
- }
- forw_packet = batadv_forw_packet_alloc(primary_if, NULL,
+ forw_packet = batadv_forw_packet_alloc(if_in, if_out,
&bat_priv->bcast_queue_left,
bat_priv, newskb);
- batadv_hardif_put(primary_if);
if (!forw_packet)
goto err_packet_free;
- /* as we have a copy now, it is safe to decrease the TTL */
- bcast_packet = (struct batadv_bcast_packet *)newskb->data;
- bcast_packet->ttl--;
-
forw_packet->own = own_packet;
INIT_DELAYED_WORK(&forw_packet->delayed_work,
batadv_send_outstanding_bcast_packet);
- batadv_forw_packet_bcast_queue(bat_priv, forw_packet, jiffies + delay);
+ send_time += delay ? delay : msecs_to_jiffies(5);
+
+ batadv_forw_packet_bcast_queue(bat_priv, forw_packet, send_time);
return NETDEV_TX_OK;
err_packet_free:
@@ -796,10 +787,220 @@ err:
return NETDEV_TX_BUSY;
}
+/**
+ * batadv_forw_bcast_packet_if() - forward and queue a broadcast packet
+ * @bat_priv: the bat priv with all the soft interface information
+ * @skb: broadcast packet to add
+ * @delay: number of jiffies to wait before sending
+ * @own_packet: true if it is a self-generated broadcast packet
+ * @if_in: the interface where the packet was received on
+ * @if_out: the outgoing interface to forward to
+ *
+ * Transmits a broadcast packet on the specified interface either immediately
+ * or if a delay is given after that. Furthermore, queues additional
+ * retransmissions if this interface is a wireless one.
+ *
+ * Return: NETDEV_TX_OK on success and NETDEV_TX_BUSY on errors.
+ */
+static int batadv_forw_bcast_packet_if(struct batadv_priv *bat_priv,
+ struct sk_buff *skb,
+ unsigned long delay,
+ bool own_packet,
+ struct batadv_hard_iface *if_in,
+ struct batadv_hard_iface *if_out)
+{
+ unsigned int num_bcasts = if_out->num_bcasts;
+ struct sk_buff *newskb;
+ int ret = NETDEV_TX_OK;
+
+ if (!delay) {
+ newskb = skb_copy(skb, GFP_ATOMIC);
+ if (!newskb)
+ return NETDEV_TX_BUSY;
+
+ batadv_send_broadcast_skb(newskb, if_out);
+ num_bcasts--;
+ }
+
+ /* delayed broadcast or rebroadcasts? */
+ if (num_bcasts >= 1) {
+ BATADV_SKB_CB(skb)->num_bcasts = num_bcasts;
+
+ ret = batadv_forw_bcast_packet_to_list(bat_priv, skb, delay,
+ own_packet, if_in,
+ if_out);
+ }
+
+ return ret;
+}
+
+/**
+ * batadv_send_no_broadcast() - check whether (re)broadcast is necessary
+ * @bat_priv: the bat priv with all the soft interface information
+ * @skb: broadcast packet to check
+ * @own_packet: true if it is a self-generated broadcast packet
+ * @if_out: the outgoing interface checked and considered for (re)broadcast
+ *
+ * Return: False if a packet needs to be (re)broadcasted on the given interface,
+ * true otherwise.
+ */
+static bool batadv_send_no_broadcast(struct batadv_priv *bat_priv,
+ struct sk_buff *skb, bool own_packet,
+ struct batadv_hard_iface *if_out)
+{
+ struct batadv_hardif_neigh_node *neigh_node = NULL;
+ struct batadv_bcast_packet *bcast_packet;
+ u8 *orig_neigh;
+ u8 *neigh_addr;
+ char *type;
+ int ret;
+
+ if (!own_packet) {
+ neigh_addr = eth_hdr(skb)->h_source;
+ neigh_node = batadv_hardif_neigh_get(if_out,
+ neigh_addr);
+ }
+
+ bcast_packet = (struct batadv_bcast_packet *)skb->data;
+ orig_neigh = neigh_node ? neigh_node->orig : NULL;
+
+ ret = batadv_hardif_no_broadcast(if_out, bcast_packet->orig,
+ orig_neigh);
+
+ if (neigh_node)
+ batadv_hardif_neigh_put(neigh_node);
+
+ /* ok, may broadcast */
+ if (!ret)
+ return false;
+
+ /* no broadcast */
+ switch (ret) {
+ case BATADV_HARDIF_BCAST_NORECIPIENT:
+ type = "no neighbor";
+ break;
+ case BATADV_HARDIF_BCAST_DUPFWD:
+ type = "single neighbor is source";
+ break;
+ case BATADV_HARDIF_BCAST_DUPORIG:
+ type = "single neighbor is originator";
+ break;
+ default:
+ type = "unknown";
+ }
+
+ batadv_dbg(BATADV_DBG_BATMAN, bat_priv,
+ "BCAST packet from orig %pM on %s suppressed: %s\n",
+ bcast_packet->orig,
+ if_out->net_dev->name, type);
+
+ return true;
+}
+
+/**
+ * __batadv_forw_bcast_packet() - forward and queue a broadcast packet
+ * @bat_priv: the bat priv with all the soft interface information
+ * @skb: broadcast packet to add
+ * @delay: number of jiffies to wait before sending
+ * @own_packet: true if it is a self-generated broadcast packet
+ *
+ * Transmits a broadcast packet either immediately or if a delay is given
+ * after that. Furthermore, queues additional retransmissions on wireless
+ * interfaces.
+ *
+ * This call clones the given skb, hence the caller needs to take into
+ * account that the data segment of the given skb might not be
+ * modifiable anymore.
+ *
+ * Return: NETDEV_TX_OK on success and NETDEV_TX_BUSY on errors.
+ */
+static int __batadv_forw_bcast_packet(struct batadv_priv *bat_priv,
+ struct sk_buff *skb,
+ unsigned long delay,
+ bool own_packet)
+{
+ struct batadv_hard_iface *hard_iface;
+ struct batadv_hard_iface *primary_if;
+ int ret = NETDEV_TX_OK;
+
+ primary_if = batadv_primary_if_get_selected(bat_priv);
+ if (!primary_if)
+ return NETDEV_TX_BUSY;
+
+ rcu_read_lock();
+ list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) {
+ if (hard_iface->soft_iface != bat_priv->soft_iface)
+ continue;
+
+ if (!kref_get_unless_zero(&hard_iface->refcount))
+ continue;
+
+ if (batadv_send_no_broadcast(bat_priv, skb, own_packet,
+ hard_iface)) {
+ batadv_hardif_put(hard_iface);
+ continue;
+ }
+
+ ret = batadv_forw_bcast_packet_if(bat_priv, skb, delay,
+ own_packet, primary_if,
+ hard_iface);
+ batadv_hardif_put(hard_iface);
+
+ if (ret == NETDEV_TX_BUSY)
+ break;
+ }
+ rcu_read_unlock();
+
+ batadv_hardif_put(primary_if);
+ return ret;
+}
+
+/**
+ * batadv_forw_bcast_packet() - forward and queue a broadcast packet
+ * @bat_priv: the bat priv with all the soft interface information
+ * @skb: broadcast packet to add
+ * @delay: number of jiffies to wait before sending
+ * @own_packet: true if it is a self-generated broadcast packet
+ *
+ * Transmits a broadcast packet either immediately or if a delay is given
+ * after that. Furthermore, queues additional retransmissions on wireless
+ * interfaces.
+ *
+ * Return: NETDEV_TX_OK on success and NETDEV_TX_BUSY on errors.
+ */
+int batadv_forw_bcast_packet(struct batadv_priv *bat_priv,
+ struct sk_buff *skb,
+ unsigned long delay,
+ bool own_packet)
+{
+ return __batadv_forw_bcast_packet(bat_priv, skb, delay, own_packet);
+}
+
+/**
+ * batadv_send_bcast_packet() - send and queue a broadcast packet
+ * @bat_priv: the bat priv with all the soft interface information
+ * @skb: broadcast packet to add
+ * @delay: number of jiffies to wait before sending
+ * @own_packet: true if it is a self-generated broadcast packet
+ *
+ * Transmits a broadcast packet either immediately or if a delay is given
+ * after that. Furthermore, queues additional retransmissions on wireless
+ * interfaces.
+ *
+ * Consumes the provided skb.
+ */
+void batadv_send_bcast_packet(struct batadv_priv *bat_priv,
+ struct sk_buff *skb,
+ unsigned long delay,
+ bool own_packet)
+{
+ __batadv_forw_bcast_packet(bat_priv, skb, delay, own_packet);
+ consume_skb(skb);
+}
+
/**
* batadv_forw_packet_bcasts_left() - check if a retransmission is necessary
* @forw_packet: the forwarding packet to check
- * @hard_iface: the interface to check on
*
* Checks whether a given packet has any (re)transmissions left on the provided
* interface.
@@ -811,28 +1012,20 @@ err:
* Return: True if (re)transmissions are left, false otherwise.
*/
static bool
-batadv_forw_packet_bcasts_left(struct batadv_forw_packet *forw_packet,
- struct batadv_hard_iface *hard_iface)
+batadv_forw_packet_bcasts_left(struct batadv_forw_packet *forw_packet)
{
- unsigned int max;
-
- if (hard_iface)
- max = hard_iface->num_bcasts;
- else
- max = BATADV_NUM_BCASTS_MAX;
-
- return BATADV_SKB_CB(forw_packet->skb)->num_bcasts < max;
+ return BATADV_SKB_CB(forw_packet->skb)->num_bcasts;
}
/**
- * batadv_forw_packet_bcasts_inc() - increment retransmission counter of a
+ * batadv_forw_packet_bcasts_dec() - decrement retransmission counter of a
* packet
- * @forw_packet: the packet to increase the counter for
+ * @forw_packet: the packet to decrease the counter for
*/
static void
-batadv_forw_packet_bcasts_inc(struct batadv_forw_packet *forw_packet)
+batadv_forw_packet_bcasts_dec(struct batadv_forw_packet *forw_packet)
{
- BATADV_SKB_CB(forw_packet->skb)->num_bcasts++;
+ BATADV_SKB_CB(forw_packet->skb)->num_bcasts--;
}
/**
@@ -843,30 +1036,30 @@ batadv_forw_packet_bcasts_inc(struct batadv_forw_packet *forw_packet)
*/
bool batadv_forw_packet_is_rebroadcast(struct batadv_forw_packet *forw_packet)
{
- return BATADV_SKB_CB(forw_packet->skb)->num_bcasts > 0;
+ unsigned char num_bcasts = BATADV_SKB_CB(forw_packet->skb)->num_bcasts;
+
+ return num_bcasts != forw_packet->if_outgoing->num_bcasts;
}
+/**
+ * batadv_send_outstanding_bcast_packet() - transmit a queued broadcast packet
+ * @work: work queue item
+ *
+ * Transmits a queued broadcast packet and if necessary reschedules it.
+ */
static void batadv_send_outstanding_bcast_packet(struct work_struct *work)
{
- struct batadv_hard_iface *hard_iface;
- struct batadv_hardif_neigh_node *neigh_node;
- struct delayed_work *delayed_work;
+ unsigned long send_time = jiffies + msecs_to_jiffies(5);
struct batadv_forw_packet *forw_packet;
- struct batadv_bcast_packet *bcast_packet;
- struct sk_buff *skb1;
- struct net_device *soft_iface;
+ struct delayed_work *delayed_work;
struct batadv_priv *bat_priv;
- unsigned long send_time = jiffies + msecs_to_jiffies(5);
+ struct sk_buff *skb1;
bool dropped = false;
- u8 *neigh_addr;
- u8 *orig_neigh;
- int ret = 0;
delayed_work = to_delayed_work(work);
forw_packet = container_of(delayed_work, struct batadv_forw_packet,
delayed_work);
- soft_iface = forw_packet->if_incoming->soft_iface;
- bat_priv = netdev_priv(soft_iface);
+ bat_priv = netdev_priv(forw_packet->if_incoming->soft_iface);
if (atomic_read(&bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING) {
dropped = true;
@@ -878,76 +1071,15 @@ static void batadv_send_outstanding_bcast_packet(struct work_struct *work)
goto out;
}
- bcast_packet = (struct batadv_bcast_packet *)forw_packet->skb->data;
-
- /* rebroadcast packet */
- rcu_read_lock();
- list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) {
- if (hard_iface->soft_iface != soft_iface)
- continue;
-
- if (!batadv_forw_packet_bcasts_left(forw_packet, hard_iface))
- continue;
-
- if (forw_packet->own) {
- neigh_node = NULL;
- } else {
- neigh_addr = eth_hdr(forw_packet->skb)->h_source;
- neigh_node = batadv_hardif_neigh_get(hard_iface,
- neigh_addr);
- }
-
- orig_neigh = neigh_node ? neigh_node->orig : NULL;
-
- ret = batadv_hardif_no_broadcast(hard_iface, bcast_packet->orig,
- orig_neigh);
-
- if (ret) {
- char *type;
-
- switch (ret) {
- case BATADV_HARDIF_BCAST_NORECIPIENT:
- type = "no neighbor";
- break;
- case BATADV_HARDIF_BCAST_DUPFWD:
- type = "single neighbor is source";
- break;
- case BATADV_HARDIF_BCAST_DUPORIG:
- type = "single neighbor is originator";
- break;
- default:
- type = "unknown";
- }
-
- batadv_dbg(BATADV_DBG_BATMAN, bat_priv, "BCAST packet from orig %pM on %s suppressed: %s\n",
- bcast_packet->orig,
- hard_iface->net_dev->name, type);
-
- if (neigh_node)
- batadv_hardif_neigh_put(neigh_node);
-
- continue;
- }
-
- if (neigh_node)
- batadv_hardif_neigh_put(neigh_node);
-
- if (!kref_get_unless_zero(&hard_iface->refcount))
- continue;
-
- /* send a copy of the saved skb */
- skb1 = skb_clone(forw_packet->skb, GFP_ATOMIC);
- if (skb1)
- batadv_send_broadcast_skb(skb1, hard_iface);
-
- batadv_hardif_put(hard_iface);
- }
- rcu_read_unlock();
+ /* send a copy of the saved skb */
+ skb1 = skb_copy(forw_packet->skb, GFP_ATOMIC);
+ if (!skb1)
+ goto out;
- batadv_forw_packet_bcasts_inc(forw_packet);
+ batadv_send_broadcast_skb(skb1, forw_packet->if_outgoing);
+ batadv_forw_packet_bcasts_dec(forw_packet);
- /* if we still have some more bcasts to send */
- if (batadv_forw_packet_bcasts_left(forw_packet, NULL)) {
+ if (batadv_forw_packet_bcasts_left(forw_packet)) {
batadv_forw_packet_bcast_queue(bat_priv, forw_packet,
send_time);
return;
diff --git a/net/batman-adv/send.h b/net/batman-adv/send.h
index 2b0daf8b..08af251b 100644
--- a/net/batman-adv/send.h
+++ b/net/batman-adv/send.h
@@ -39,10 +39,14 @@ int batadv_send_broadcast_skb(struct sk_buff *skb,
struct batadv_hard_iface *hard_iface);
int batadv_send_unicast_skb(struct sk_buff *skb,
struct batadv_neigh_node *neigh_node);
-int batadv_add_bcast_packet_to_list(struct batadv_priv *bat_priv,
- const struct sk_buff *skb,
- unsigned long delay,
- bool own_packet);
+int batadv_forw_bcast_packet(struct batadv_priv *bat_priv,
+ struct sk_buff *skb,
+ unsigned long delay,
+ bool own_packet);
+void batadv_send_bcast_packet(struct batadv_priv *bat_priv,
+ struct sk_buff *skb,
+ unsigned long delay,
+ bool own_packet);
void
batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
const struct batadv_hard_iface *hard_iface);
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 6b8181bc..a21884c0 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -191,7 +191,7 @@ static netdev_tx_t batadv_interface_tx(struct sk_buff *skb,
struct vlan_ethhdr *vhdr;
unsigned int header_len = 0;
int data_len = skb->len, ret;
- unsigned long brd_delay = 1;
+ unsigned long brd_delay = 0;
bool do_bcast = false, client_added;
unsigned short vid;
u32 seqno;
@@ -330,7 +330,7 @@ send:
bcast_packet = (struct batadv_bcast_packet *)skb->data;
bcast_packet->version = BATADV_COMPAT_VERSION;
- bcast_packet->ttl = BATADV_TTL;
+ bcast_packet->ttl = BATADV_TTL - 1;
/* batman packet type: broadcast */
bcast_packet->packet_type = BATADV_BCAST;
@@ -346,13 +346,7 @@ send:
seqno = atomic_inc_return(&bat_priv->bcast_seqno);
bcast_packet->seqno = htonl(seqno);
- batadv_add_bcast_packet_to_list(bat_priv, skb, brd_delay, true);
-
- /* a copy is stored in the bcast list, therefore removing
- * the original skb.
- */
- consume_skb(skb);
-
+ batadv_send_bcast_packet(bat_priv, skb, brd_delay, true);
/* unicast packet */
} else {
/* DHCP packets going to a server will use the GW feature */
1 year, 8 months
[batman-adv] master: batman-adv: bcast: avoid skb-copy for (re)queued broadcasts (73e2dc5d)
by postmaster@open-mesh.org
Repository : ssh://git@diktynna/batman-adv
On branch : master
>---------------------------------------------------------------
commit 73e2dc5dadc9668c0c901798a8a671afc4608ce0
Author: Linus L��ssing <linus.luessing(a)c0d3.blue>
Date: Mon May 17 00:33:08 2021 +0200
batman-adv: bcast: avoid skb-copy for (re)queued broadcasts
Broadcast packets send via batadv_send_outstanding_bcast_packet() were
originally copied in batadv_forw_bcast_packet_to_list() before being
queued. And after that only the ethernet header will be pushed through
batadv_send_broadcast_skb()->batadv_send_skb_packet() which works safely
on skb clones as it uses batadv_skb_head_push()->skb_cow_head().
Signed-off-by: Linus L��ssing <linus.luessing(a)c0d3.blue>
Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
>---------------------------------------------------------------
73e2dc5dadc9668c0c901798a8a671afc4608ce0
net/batman-adv/send.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
index 07b0ba26..0b9dd29d 100644
--- a/net/batman-adv/send.c
+++ b/net/batman-adv/send.c
@@ -1072,7 +1072,7 @@ static void batadv_send_outstanding_bcast_packet(struct work_struct *work)
}
/* send a copy of the saved skb */
- skb1 = skb_copy(forw_packet->skb, GFP_ATOMIC);
+ skb1 = skb_clone(forw_packet->skb, GFP_ATOMIC);
if (!skb1)
goto out;
1 year, 8 months