Skip to contentSkip to conversation

batman-adv: refine API calls for unicast transmissions of SKBs

PATCH Superseded Linus Lüssing 2 participants 2 messages Jun 29, 2013 – Jul 1, 2013

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 batman-adv: refine API calls for unicast transmissions of SKBs

With this patch the functions batadv_send_skb_unicast() and batadv_send_skb_unicast_4addr() are further refined into batadv_send_skb_tt(), batadv_send_skb_tt_4addr() and batadv_send_skb_gw(). This way we avoid any guessing about where to send a packet in the unicast forwarding methods and let the callers decide.

This is going to be useful for the upcoming multicast related patches in particular.

---
 distributed-arp-table.c |    7 ++--
 send.c                  |   88 ++++++++++++++++++++++++++++++++++++++---------
 send.h                  |   52 ++++++++++++++++++----------
 soft-interface.c        |    6 +++-
 4 files changed, 112 insertions(+), 41 deletions(-)
distributed-arp-table.c +3 -4
index f2543c2..5399c29 100644
@@ -1026,11 +1026,10 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
 	 * that a node not using the 4addr packet format doesn't support it.
 	 */
 	if (hdr_size == sizeof(struct batadv_unicast_4addr_packet))
-		err = batadv_send_skb_unicast_4addr(bat_priv, skb_new,
-						    BATADV_P_DAT_CACHE_REPLY,
-						    vid);
+		err = batadv_send_skb_tt_4addr(bat_priv, skb_new,
+					       BATADV_P_DAT_CACHE_REPLY, vid);
 	else
-		err = batadv_send_skb_unicast(bat_priv, skb_new, vid);
+		err = batadv_send_skb_tt(bat_priv, skb_new, vid);
 
 	if (!err) {
 		batadv_inc_counter(bat_priv, BATADV_CNT_DAT_CACHED_REPLY_TX);
send.c +71 -17

113 lines not on this page · raw message

send.h +33 -19

78 lines not on this page · raw message

soft-interface.c +5 -1
index d897194..e84ef45 100644
@@ -289,7 +289,11 @@ static int batadv_interface_tx(struct sk_buff *skb,
 
 		batadv_dat_snoop_outgoing_arp_reply(bat_priv, skb);
 
-		ret = batadv_send_skb_unicast(bat_priv, skb, vid);
+		if (is_multicast_ether_addr(ethhdr->h_dest))
+			ret = batadv_send_skb_gw(bat_priv, skb, vid);
+		else
+			ret = batadv_send_skb_tt(bat_priv, skb, vid);
+
 		if (ret != 0)
 			goto dropped_freed;
 	}
Signature · 1 line
1.7.10.4
Acked-by on v1 1/1
#1 lore raw
Quoted 2 lines · Linus Lüssing

+/**
+ * batadv_send_skb_generic_tt - send an skb to a translation table node

I don't really like the expression "translation table node"..it looks like we have different type of nodes...What about a simple"to a destination using the Translation Table" ? you can go on a new line with the short description, if needed.

Quoted 9 lines

+ * @bat_priv: the bat priv with all the soft interface information
+ * @skb: payload to send
+ * @packet_type: the batman unicast packet type to use
+ * @packet_subtype: the unicast 4addr packet subtype (only relevant for unicast
+ * 4addr packets)
+ * @vid: the vid to be used to search the translation table
+ *
+ * Look up the destination node for the destination address in the ethernet
+ * header via the translation table.

What about substituting "destination node" with "recipient node" to avoid repeating destination?

Quoted 6 lines

+ *
+ * Wrap the given skb into a batman-adv unicast or unicast-4addr header
+ * depending on whether BATADV_UNICAST or BATADV_UNICAST_4ADDR was supplied
+ * as packet_type.
+ *
+ * Then send this frame to the according destination node.

Since the above is a list of steps performed by the function, I'd rather remove the blank lines you've added between the paragraphs.

[...]

Quoted 3 lines

/**
- * batadv_send_unicast_skb - send the skb encapsulated in a unicast packet
+ * batadv_send_skb_tt - send an skb to a translation table node

same as above

Quoted 7 lines

* @bat_priv: the bat priv with all the soft interface information
* @skb: the payload to send
* @vid: the vid to be used to search the translation table
*
+ * Look up the destination node for the destination address in the ethernet
+ * header via the translation table.
+ *

same as above

Quoted 4 lines

+ * Wrap the given skb into a batman-adv unicast header.
+ *
+ * Then send this frame to the according destination node.
+ *

same as above

Quoted 4 lines

/**
- * batadv_send_4addr_unicast_skb - send the skb encapsulated in a unicast 4addr
- * packet
+ * batadv_send_skb_tt_4addr - send an skb to a translation table node

same as above

Quoted 4 lines

* @bat_priv: the bat priv with all the soft interface information
* @skb: the payload to send
* @packet_subtype: the unicast 4addr packet subtype to use
* @vid: the vid to be used to search the translation table

Quoted 8 lines

*
+ * Look up the destination node for the destination address in the ethernet
+ * header via the translation table.
+ *
+ * Wrap the given skb into a batman-adv unicast-4addr header.
+ *
+ * Then send this frame to the according destination node.
+ *

same as above

Quoted 9 lines

* Returns 1 in case of error or 0 otherwise.
*/

send.h +2 -4
-static inline int batadv_send_skb_unicast_4addr(struct batadv_priv *bat_priv,
-						struct sk_buff *skb,
-						int packet_subtype,
-						unsigned short vid)
+static inline int batadv_send_skb_tt_4addr(struct batadv_priv *bat_priv,
+					   struct sk_buff *skb,

send.h bool batadv_send_skb_prepare_unicast_4addr(struct batadv_priv *bat_priv, · line 94

Quoted 10 lines
send.h +5 -3
+					   int packet_subtype,
+					   unsigned short vid)
 {
-	return batadv_send_skb_generic_unicast(bat_priv, skb,
-					       BATADV_UNICAST_4ADDR,
-					       packet_subtype, vid);
+	return batadv_send_skb_generic_tt(bat_priv, skb,
+					  BATADV_UNICAST_4ADDR,
+					  packet_subtype, vid);
 }

I like this new API :)
If you are ok with my suggestions then you can also add

Cheers,

Signature · 4 lines
Antonio Quartulli

..each of us alone is worth nothing..
Ernesto "Che" Guevara