From: Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>
To: The list for a Better Approach To Mobile Ad-hoc Networking
<b.a.t.m.a.n@lists.open-mesh.org>
Subject: Re: [B.A.T.M.A.N.] [PATCHv2 3/3] batman-adv: Modified forwarding behaviour for multicast packets
Date: Tue, 28 May 2013 17:40:54 +0200 [thread overview]
Message-ID: <20130528154054.GC14466@pandem0nium> (raw)
In-Reply-To: <1369382549-8787-4-git-send-email-linus.luessing@web.de>
[-- Attachment #1: Type: text/plain, Size: 4397 bytes --]
Only a few style suggestions here, nothing critical and you can ignore
them if you don't like them. :)
On Fri, May 24, 2013 at 10:02:28AM +0200, Linus Lüssing wrote:
> With this patch a multicast packet is not always simply flooded anymore,
> the bevahiour for the following cases is changed to reduce
> unnecessary overhead:
>
> If all nodes within the horizon of a certain node have signalized
> multicast listener announcement capability
> (BATADV_MCAST_LISTENER_ANNOUNCEMENT) then an IPv6 multicast packet
> with a destination of IPv6 link-local scope coming from the upstream
> of this node...
>
> * ...is dropped if there is no according multicast listener in the
> translation table,
> * ...is forwarded via unicast if there is a single node with interested
> multicast listeners
> * ...and otherwise still gets flooded.
>
> Signed-off-by: Linus Lüssing <linus.luessing@web.de>
> ---
> multicast.c | 43 +++++++++++++++++++++++++++++++++
> multicast.h | 8 +++++++
> soft-interface.c | 10 ++++++++
> translation-table.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++
> translation-table.h | 1 +
> 5 files changed, 128 insertions(+)
>
> diff --git a/multicast.c b/multicast.c
> index 36e4c59..bd55c8f 100644
> --- a/multicast.c
> +++ b/multicast.c
> @@ -213,6 +213,49 @@ out:
> }
>
> /**
> + * batadv_mcast_flood - check on how to forward a multicast packet
> + * @skb: The multicast packet to check
> + * @bat_priv: the bat priv with all the soft interface information
> + *
> + * Return 1 if the packet should be flooded, 0 if it should be forwarded
> + * via unicast or -1 if it should be drooped.
> + */
> +int batadv_mcast_flood(struct sk_buff *skb, struct batadv_priv *bat_priv)
> +{
> + struct ethhdr *ethhdr = (struct ethhdr *)(skb->data);
> + struct ipv6hdr *ip6hdr;
> + int count, ret = 1;
> +
> + if (atomic_read(&bat_priv->mcast_group_awareness) &&
> + !atomic_read(&bat_priv->mcast.num_non_aware) &&
> + ntohs(ethhdr->h_proto) == ETH_P_IPV6) {
You can safe an indendation below if you return -1 immediately here
if the statement above is false. Also multiple statements might be better
for readability and later changes, e.g.
if (!atomic_read(&bat_priv->mcast_group_awareness))
return 1;
if (atomic_read(&bat_priv->mcast.num_non_aware))
return 1;
if (ntohs(ethhdr->h_proto) != ETH_P_IPV6)
return 1;
> + if (!pskb_may_pull(skb, sizeof(*ethhdr) + sizeof(*ip6hdr))) {
> + ret = -1;
> + goto out;
> + }
You could directly return -1 here, the out label is not needed
(as we don't unlock/free anything here).
I don't quite understand why you return -1, maybe the packet could still
be forwarded even if it could not be pulled?
> +
> + ip6hdr = ipv6_hdr(skb);
> +
> + /* TODO: Implement Multicast Router Discovery, then add
> + * scope >= IPV6_ADDR_SCOPE_LINKLOCAL, too
> + */
> + if (IPV6_ADDR_MC_SCOPE(&ip6hdr->daddr) !=
> + IPV6_ADDR_SCOPE_LINKLOCAL)
> + goto out;
> +
> + count = batadv_tt_global_hash_count(bat_priv, ethhdr->h_dest);
> +
> + if (!count)
> + ret = -1;
> + else if (count == 1)
> + ret = 0;
> + }
You could use a switch statement here instead for readability, e.g.:
switch (count) {
case 0:
return -1;
case 1:
return 0;
default:
return 1;
}
> +
> +out:
> + return ret;
> +}
> +
> +/**
> * batadv_mcast_tvlv_ogm_handler_v1 - process incoming multicast tvlv container
> * @bat_priv: the bat priv with all the soft interface information
> * @orig: the orig_node of the ogm
> diff --git a/soft-interface.c b/soft-interface.c
> index 8bdd649..83e4679 100644
> --- a/soft-interface.c
> +++ b/soft-interface.c
> @@ -36,6 +36,7 @@
> #include <linux/if_vlan.h>
> #include <linux/if_ether.h>
> #include "unicast.h"
> +#include "multicast.h"
> #include "bridge_loop_avoidance.h"
> #include "network-coding.h"
>
> @@ -222,6 +223,15 @@ static int batadv_interface_tx(struct sk_buff *skb,
> }
> }
>
> + if (do_bcast && !is_broadcast_ether_addr(ethhdr->h_dest)) {
I'd suggest to put this inside the "is_multicast_etheraddr()" above to make more clear
that this handles multicast packets. I was a little confused by the
do_bcast && !is_broadcast_ether_addr() first, but that might just be me.
Cheers,
Simon
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
next prev parent reply other threads:[~2013-05-28 15:40 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-24 8:02 [B.A.T.M.A.N.] Basic Multicast Optimizations Linus Lüssing
2013-05-24 8:02 ` [B.A.T.M.A.N.] [PATCHv2 1/3] batman-adv: Multicast Listener Announcements via Translation Table Linus Lüssing
2013-05-28 15:26 ` Simon Wunderlich
2013-05-24 8:02 ` [B.A.T.M.A.N.] [PATCHv2 2/3] batman-adv: Announce new capability via multicast TVLV Linus Lüssing
2013-05-28 15:31 ` Simon Wunderlich
2013-05-24 8:02 ` [B.A.T.M.A.N.] [PATCHv2 3/3] batman-adv: Modified forwarding behaviour for multicast packets Linus Lüssing
2013-05-28 15:40 ` Simon Wunderlich [this message]
2013-05-28 16:39 ` Marek Lindner
2013-05-28 16:42 ` Antonio Quartulli
2013-05-24 9:00 ` [B.A.T.M.A.N.] Basic Multicast Optimizations Linus Lüssing
2013-05-24 9:06 ` Antonio Quartulli
2013-05-24 9:33 ` Marek Lindner
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=20130528154054.GC14466@pandem0nium \
--to=simon.wunderlich@s2003.tu-chemnitz.de \
--cc=b.a.t.m.a.n@lists.open-mesh.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