From: Simon Wunderlich <sw@simonwunderlich.de>
To: kuba@kernel.org, davem@davemloft.net
Cc: netdev@vger.kernel.org, b.a.t.m.a.n@lists.open-mesh.org,
Sven Eckelmann <sven@narfation.org>,
Simon Wunderlich <sw@simonwunderlich.de>
Subject: [PATCH 07/10] batman-adv: Switch to bitmap helper for aggregation handling
Date: Thu, 13 Mar 2025 17:45:16 +0100 [thread overview]
Message-ID: <20250313164519.72808-8-sw@simonwunderlich.de> (raw)
In-Reply-To: <20250313164519.72808-1-sw@simonwunderlich.de>
From: Sven Eckelmann <sven@narfation.org>
The aggregation code duplicates code which already exists in the the bitops
and bitmap helper. By switching to the bitmap helpers, operating on larger
aggregations becomes possible without touching the different portions of
the code which read/modify direct_link_flags.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
---
net/batman-adv/bat_iv_ogm.c | 19 +++++++++----------
net/batman-adv/main.h | 1 +
net/batman-adv/types.h | 2 +-
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
index b715f7343ffd..87c1af540457 100644
--- a/net/batman-adv/bat_iv_ogm.c
+++ b/net/batman-adv/bat_iv_ogm.c
@@ -355,7 +355,7 @@ static void batadv_iv_ogm_send_to_if(struct batadv_forw_packet *forw_packet,
/* we might have aggregated direct link packets with an
* ordinary base packet
*/
- if (forw_packet->direct_link_flags & BIT(packet_num) &&
+ if (test_bit(packet_num, forw_packet->direct_link_flags) &&
forw_packet->if_incoming == hard_iface)
batadv_ogm_packet->flags |= BATADV_DIRECTLINK;
else
@@ -460,6 +460,7 @@ batadv_iv_ogm_can_aggregate(const struct batadv_ogm_packet *new_bat_ogm_packet,
* - the send time is within our MAX_AGGREGATION_MS time
* - the resulting packet won't be bigger than
* MAX_AGGREGATION_BYTES
+ * - the number of packets is lower than MAX_AGGREGATION_PACKETS
* otherwise aggregation is not possible
*/
if (!time_before(send_time, forw_packet->send_time) ||
@@ -469,7 +470,7 @@ batadv_iv_ogm_can_aggregate(const struct batadv_ogm_packet *new_bat_ogm_packet,
if (aggregated_bytes > BATADV_MAX_AGGREGATION_BYTES)
return false;
- if (packet_num >= BITS_PER_TYPE(forw_packet->direct_link_flags))
+ if (packet_num >= BATADV_MAX_AGGREGATION_PACKETS)
return false;
/* packet is not leaving on the same interface. */
@@ -578,12 +579,13 @@ static void batadv_iv_ogm_aggregate_new(const unsigned char *packet_buff,
memcpy(skb_buff, packet_buff, packet_len);
forw_packet_aggr->own = own_packet;
- forw_packet_aggr->direct_link_flags = BATADV_NO_FLAGS;
+ bitmap_zero(forw_packet_aggr->direct_link_flags,
+ BATADV_MAX_AGGREGATION_PACKETS);
forw_packet_aggr->send_time = send_time;
/* save packet direct link flag status */
if (direct_link)
- forw_packet_aggr->direct_link_flags |= 1;
+ set_bit(0, forw_packet_aggr->direct_link_flags);
INIT_DELAYED_WORK(&forw_packet_aggr->delayed_work,
batadv_iv_send_outstanding_bat_ogm_packet);
@@ -596,17 +598,14 @@ static void batadv_iv_ogm_aggregate(struct batadv_forw_packet *forw_packet_aggr,
const unsigned char *packet_buff,
int packet_len, bool direct_link)
{
- unsigned long new_direct_link_flag;
-
skb_put_data(forw_packet_aggr->skb, packet_buff, packet_len);
forw_packet_aggr->packet_len += packet_len;
forw_packet_aggr->num_packets++;
/* save packet direct link flag status */
- if (direct_link) {
- new_direct_link_flag = BIT(forw_packet_aggr->num_packets);
- forw_packet_aggr->direct_link_flags |= new_direct_link_flag;
- }
+ if (direct_link)
+ set_bit(forw_packet_aggr->num_packets,
+ forw_packet_aggr->direct_link_flags);
}
/**
diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h
index c08c96b5b8b1..67af435ee04e 100644
--- a/net/batman-adv/main.h
+++ b/net/batman-adv/main.h
@@ -104,6 +104,7 @@
*/
#define BATADV_TQ_SIMILARITY_THRESHOLD 50
+#define BATADV_MAX_AGGREGATION_PACKETS 32
#define BATADV_MAX_AGGREGATION_BYTES 512
#define BATADV_MAX_AGGREGATION_MS 100
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
index b222f8a80ed9..0ca0fc072fc9 100644
--- a/net/batman-adv/types.h
+++ b/net/batman-adv/types.h
@@ -2139,7 +2139,7 @@ struct batadv_forw_packet {
u16 packet_len;
/** @direct_link_flags: direct link flags for aggregated OGM packets */
- u32 direct_link_flags;
+ DECLARE_BITMAP(direct_link_flags, BATADV_MAX_AGGREGATION_PACKETS);
/** @num_packets: counter for aggregated OGMv1 packets */
u8 num_packets;
--
2.39.5
next prev parent reply other threads:[~2025-03-13 16:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-13 16:45 [PATCH 00/10] pull request for net-next: batman-adv 2025-03-13 Simon Wunderlich
2025-03-13 16:45 ` [PATCH 01/10] batman-adv: Start new development cycle Simon Wunderlich
2025-03-18 11:30 ` patchwork-bot+netdevbpf
2025-03-13 16:45 ` [PATCH 02/10] batman-adv: Drop batadv_priv_debug_log struct Simon Wunderlich
2025-03-13 16:45 ` [PATCH 03/10] batman-adv: adopt netdev_hold() / netdev_put() Simon Wunderlich
2025-03-13 16:45 ` [PATCH 04/10] batman-adv: Add support for jumbo frames Simon Wunderlich
2025-03-13 16:45 ` [PATCH 05/10] batman-adv: Use consistent name for mesh interface Simon Wunderlich
2025-03-13 16:45 ` [PATCH 06/10] batman-adv: Limit number of aggregated packets directly Simon Wunderlich
2025-03-13 16:45 ` Simon Wunderlich [this message]
2025-03-13 16:45 ` [PATCH 08/10] batman-adv: Use actual packet count for aggregated packets Simon Wunderlich
2025-03-13 16:45 ` [PATCH 09/10] batman-adv: Limit aggregation size to outgoing MTU Simon Wunderlich
2025-03-13 16:45 ` [PATCH 10/10] batman-adv: add missing newlines for log macros Simon Wunderlich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250313164519.72808-8-sw@simonwunderlich.de \
--to=sw@simonwunderlich.de \
--cc=b.a.t.m.a.n@lists.open-mesh.org \
--cc=davem@davemloft.net \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=sven@narfation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox