From: "Linus Lüssing" <linus.luessing@web.de>
To: Ajith Adapa <adapa.ajith@gmail.com>
Cc: netdev@vger.kernel.org, bridge@lists.linux-foundation.org,
b.a.t.m.a.n@lists.open-mesh.org
Subject: Re: [B.A.T.M.A.N.] [PATCHv2 net-next 2/4] bridge: adhere to querier election mechanism specified by RFCs
Date: Fri, 27 Jun 2014 02:12:23 +0200 [thread overview]
Message-ID: <20140627001223.GA28373@Linus-Debian> (raw)
In-Reply-To: <CADAe=+KViC7uej0KM4TrQXxrk-amU7CX73buviMU17jpQm61bw@mail.gmail.com>
Hi Ajith,
On Mon, Jun 23, 2014 at 07:58:21AM +0530, Ajith Adapa wrote:
> Hi Luessing,
>
> As per RFC 4541, snooping switches send query with source address as
> 0.0.0.0 since port in a L2 switch doesn't have ip-address configured.
Hm, I'm not quite sure whether this is true. Do you have a
section/paragraph in RFC4541 which says that?
To me, it seems that 0.0.0.0/:: should only be used when the
topology changes, on links becoming active (the RFC uses the example
of STP). As a performance optimization but not as the source
address for General Queries.
In section 2.1.1 1) b) says:
"The 0.0.0.0 address represents a special case where the switch
is proxying IGMP Queries for faster network convergence,
but is not itself the Querier."
In section 2.1.1 4) it says:
"If the switch is not the Querier, it should use the 'all-zeros' IP
Source Address in these proxy queries (even though some hosts may
elect to not process queries with a 0.0.0.0 IP Source Address)."
(which seems to imply that if a switch is the selected Querier, that
it should use something other than the 'all-zeros' IP Source
Address?)
Also, section 2.1.1 4) says:
"[...] even though some hosts may elect to not process queries with a
0.0.0.0 IP Source Address"
Which seems to indicate that 0.0.0.0 might be a bad choice to get
reliable IGMP Reports and might only make sense for performance
optimizations (at least for IPv4 - for IPv6 it doesn't make sense
to me to send General Queries with '::' source address at all
since '::' is ignored by hosts per RFC).
(*)
>
> With current changes linux bridge will always select a querier who sends a
> query message with 0.0.0.0. Right ?
>
> + if (ntohl(saddr) <= ntohl(br->ip4_querier.addr.u.ip4))
> + goto update;
Yes. Which is what the querier election mechanism in the RFCs for
IGMPv2/IGMPv3 (RFC2236/RFC3376) specifies, I think. (**)
>
> Currently linux bridge sends a query message with source address as
> 0.0.0.0. Right ?
For IPv4, this is currently the default, yes. (there's a sysfs switch
to change that, if desired) (***)
>
> What should be the expected behaviour ?
Hm, good question.
Regarding (***): After rereading RFC4541 a few more times, I think
(*) would be the right choice: The bridge code should probably be
changed to always use an available, non-zero IPv4 source address
for General Queries. If none is available it, doesn't make sense
to me to become the selected Querier at all (should be changed for
IPv6, too: Currently it refrains from sending Query messages
then, but thinks a valid querier were in the network, enabling
the multicast snooping of the bridge).
Regarding (**): Now that you're mentioning that, you're right, my
change isn't quite straightforward in that regard, a few lines
earlier there is:
> + if (!br->ip4_querier.addr.u.ip4)
> + goto update;
So it would select the all-zeros Querier if it receives such
messages. But would happily switch to a non-all-zeros Querier as
well if receiving such messages...
And now, this baffles me, section 2.1.1 4) again:
"When such proxy queries are received, they must not be included in
the Querier election process."
If we were following that, a snooping switch and a true multicast
router could potentially have an argument about which becomes the
selected IGMP querier? (for IPv6/MLD this dilemma should not
exist, I think)
I'm currently unsure, whether we should follow
RFC2236(IGMPv2)+RFC3376(IGMPv3) or the informational (!) RFC4541.
Or am I overlooking something? What do others think?
Cheers, Linus
WARNING: multiple messages have this Message-ID (diff)
From: "Linus Lüssing" <linus.luessing@web.de>
To: Ajith Adapa <adapa.ajith@gmail.com>
Cc: netdev@vger.kernel.org, bridge@lists.linux-foundation.org,
b.a.t.m.a.n@lists.open-mesh.org
Subject: Re: [Bridge] [PATCHv2 net-next 2/4] bridge: adhere to querier election mechanism specified by RFCs
Date: Fri, 27 Jun 2014 02:12:23 +0200 [thread overview]
Message-ID: <20140627001223.GA28373@Linus-Debian> (raw)
In-Reply-To: <CADAe=+KViC7uej0KM4TrQXxrk-amU7CX73buviMU17jpQm61bw@mail.gmail.com>
Hi Ajith,
On Mon, Jun 23, 2014 at 07:58:21AM +0530, Ajith Adapa wrote:
> Hi Luessing,
>
> As per RFC 4541, snooping switches send query with source address as
> 0.0.0.0 since port in a L2 switch doesn't have ip-address configured.
Hm, I'm not quite sure whether this is true. Do you have a
section/paragraph in RFC4541 which says that?
To me, it seems that 0.0.0.0/:: should only be used when the
topology changes, on links becoming active (the RFC uses the example
of STP). As a performance optimization but not as the source
address for General Queries.
In section 2.1.1 1) b) says:
"The 0.0.0.0 address represents a special case where the switch
is proxying IGMP Queries for faster network convergence,
but is not itself the Querier."
In section 2.1.1 4) it says:
"If the switch is not the Querier, it should use the 'all-zeros' IP
Source Address in these proxy queries (even though some hosts may
elect to not process queries with a 0.0.0.0 IP Source Address)."
(which seems to imply that if a switch is the selected Querier, that
it should use something other than the 'all-zeros' IP Source
Address?)
Also, section 2.1.1 4) says:
"[...] even though some hosts may elect to not process queries with a
0.0.0.0 IP Source Address"
Which seems to indicate that 0.0.0.0 might be a bad choice to get
reliable IGMP Reports and might only make sense for performance
optimizations (at least for IPv4 - for IPv6 it doesn't make sense
to me to send General Queries with '::' source address at all
since '::' is ignored by hosts per RFC).
(*)
>
> With current changes linux bridge will always select a querier who sends a
> query message with 0.0.0.0. Right ?
>
> + if (ntohl(saddr) <= ntohl(br->ip4_querier.addr.u.ip4))
> + goto update;
Yes. Which is what the querier election mechanism in the RFCs for
IGMPv2/IGMPv3 (RFC2236/RFC3376) specifies, I think. (**)
>
> Currently linux bridge sends a query message with source address as
> 0.0.0.0. Right ?
For IPv4, this is currently the default, yes. (there's a sysfs switch
to change that, if desired) (***)
>
> What should be the expected behaviour ?
Hm, good question.
Regarding (***): After rereading RFC4541 a few more times, I think
(*) would be the right choice: The bridge code should probably be
changed to always use an available, non-zero IPv4 source address
for General Queries. If none is available it, doesn't make sense
to me to become the selected Querier at all (should be changed for
IPv6, too: Currently it refrains from sending Query messages
then, but thinks a valid querier were in the network, enabling
the multicast snooping of the bridge).
Regarding (**): Now that you're mentioning that, you're right, my
change isn't quite straightforward in that regard, a few lines
earlier there is:
> + if (!br->ip4_querier.addr.u.ip4)
> + goto update;
So it would select the all-zeros Querier if it receives such
messages. But would happily switch to a non-all-zeros Querier as
well if receiving such messages...
And now, this baffles me, section 2.1.1 4) again:
"When such proxy queries are received, they must not be included in
the Querier election process."
If we were following that, a snooping switch and a true multicast
router could potentially have an argument about which becomes the
selected IGMP querier? (for IPv6/MLD this dilemma should not
exist, I think)
I'm currently unsure, whether we should follow
RFC2236(IGMPv2)+RFC3376(IGMPv3) or the informational (!) RFC4541.
Or am I overlooking something? What do others think?
Cheers, Linus
WARNING: multiple messages have this Message-ID (diff)
From: "Linus Lüssing" <linus.luessing@web.de>
To: Ajith Adapa <adapa.ajith@gmail.com>
Cc: netdev@vger.kernel.org, bridge@lists.linux-foundation.org,
b.a.t.m.a.n@lists.open-mesh.org
Subject: Re: [PATCHv2 net-next 2/4] bridge: adhere to querier election mechanism specified by RFCs
Date: Fri, 27 Jun 2014 02:12:23 +0200 [thread overview]
Message-ID: <20140627001223.GA28373@Linus-Debian> (raw)
In-Reply-To: <CADAe=+KViC7uej0KM4TrQXxrk-amU7CX73buviMU17jpQm61bw@mail.gmail.com>
Hi Ajith,
On Mon, Jun 23, 2014 at 07:58:21AM +0530, Ajith Adapa wrote:
> Hi Luessing,
>
> As per RFC 4541, snooping switches send query with source address as
> 0.0.0.0 since port in a L2 switch doesn't have ip-address configured.
Hm, I'm not quite sure whether this is true. Do you have a
section/paragraph in RFC4541 which says that?
To me, it seems that 0.0.0.0/:: should only be used when the
topology changes, on links becoming active (the RFC uses the example
of STP). As a performance optimization but not as the source
address for General Queries.
In section 2.1.1 1) b) says:
"The 0.0.0.0 address represents a special case where the switch
is proxying IGMP Queries for faster network convergence,
but is not itself the Querier."
In section 2.1.1 4) it says:
"If the switch is not the Querier, it should use the 'all-zeros' IP
Source Address in these proxy queries (even though some hosts may
elect to not process queries with a 0.0.0.0 IP Source Address)."
(which seems to imply that if a switch is the selected Querier, that
it should use something other than the 'all-zeros' IP Source
Address?)
Also, section 2.1.1 4) says:
"[...] even though some hosts may elect to not process queries with a
0.0.0.0 IP Source Address"
Which seems to indicate that 0.0.0.0 might be a bad choice to get
reliable IGMP Reports and might only make sense for performance
optimizations (at least for IPv4 - for IPv6 it doesn't make sense
to me to send General Queries with '::' source address at all
since '::' is ignored by hosts per RFC).
(*)
>
> With current changes linux bridge will always select a querier who sends a
> query message with 0.0.0.0. Right ?
>
> + if (ntohl(saddr) <= ntohl(br->ip4_querier.addr.u.ip4))
> + goto update;
Yes. Which is what the querier election mechanism in the RFCs for
IGMPv2/IGMPv3 (RFC2236/RFC3376) specifies, I think. (**)
>
> Currently linux bridge sends a query message with source address as
> 0.0.0.0. Right ?
For IPv4, this is currently the default, yes. (there's a sysfs switch
to change that, if desired) (***)
>
> What should be the expected behaviour ?
Hm, good question.
Regarding (***): After rereading RFC4541 a few more times, I think
(*) would be the right choice: The bridge code should probably be
changed to always use an available, non-zero IPv4 source address
for General Queries. If none is available it, doesn't make sense
to me to become the selected Querier at all (should be changed for
IPv6, too: Currently it refrains from sending Query messages
then, but thinks a valid querier were in the network, enabling
the multicast snooping of the bridge).
Regarding (**): Now that you're mentioning that, you're right, my
change isn't quite straightforward in that regard, a few lines
earlier there is:
> + if (!br->ip4_querier.addr.u.ip4)
> + goto update;
So it would select the all-zeros Querier if it receives such
messages. But would happily switch to a non-all-zeros Querier as
well if receiving such messages...
And now, this baffles me, section 2.1.1 4) again:
"When such proxy queries are received, they must not be included in
the Querier election process."
If we were following that, a snooping switch and a true multicast
router could potentially have an argument about which becomes the
selected IGMP querier? (for IPv6/MLD this dilemma should not
exist, I think)
I'm currently unsure, whether we should follow
RFC2236(IGMPv2)+RFC3376(IGMPv3) or the informational (!) RFC4541.
Or am I overlooking something? What do others think?
Cheers, Linus
next prev parent reply other threads:[~2014-06-27 0:12 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-25 5:03 [B.A.T.M.A.N.] [PATCHv2 net-next 0/4] bridge: multicast snooping patches / exports Linus Lüssing
2014-05-25 5:03 ` Linus Lüssing
2014-05-25 5:03 ` Linus Lüssing
2014-05-25 5:03 ` [Bridge] " Linus Lüssing
2014-05-25 5:03 ` [B.A.T.M.A.N.] [PATCHv2 net-next 1/4] bridge: rename struct bridge_mcast_query/querier Linus Lüssing
2014-05-25 5:03 ` Linus Lüssing
2014-05-25 5:03 ` [Bridge] " Linus Lüssing
2014-05-25 5:03 ` [B.A.T.M.A.N.] [PATCHv2 net-next 2/4] bridge: adhere to querier election mechanism specified by RFCs Linus Lüssing
2014-05-25 5:03 ` Linus Lüssing
2014-05-25 5:03 ` [Bridge] " Linus Lüssing
2014-06-23 2:28 ` Ajith Adapa
2014-06-23 2:29 ` [Bridge] " Ajith Adapa
2014-06-27 0:12 ` Linus Lüssing [this message]
2014-06-27 0:12 ` Linus Lüssing
2014-06-27 0:12 ` [Bridge] " Linus Lüssing
2014-05-25 5:03 ` [B.A.T.M.A.N.] [PATCHv2 net-next 3/4] bridge: add export of multicast database adjacent to net_dev Linus Lüssing
2014-05-25 5:03 ` Linus Lüssing
2014-05-25 5:03 ` Linus Lüssing
2014-05-25 5:03 ` [Bridge] " Linus Lüssing
2014-05-30 14:38 ` [B.A.T.M.A.N.] " Stephen Hemminger
2014-05-30 14:38 ` Stephen Hemminger
2014-05-30 14:38 ` Stephen Hemminger
2014-05-30 14:38 ` [Bridge] " Stephen Hemminger
2014-05-25 5:03 ` [B.A.T.M.A.N.] [PATCHv2 net-next 4/4] bridge: memorize and export selected IGMP/MLD querier port Linus Lüssing
2014-05-25 5:03 ` Linus Lüssing
2014-05-25 5:03 ` [Bridge] " Linus Lüssing
2014-05-29 22:36 ` [B.A.T.M.A.N.] [PATCHv2 net-next 0/4] bridge: multicast snooping patches / exports David Miller
2014-05-29 22:36 ` David Miller
2014-05-29 22:36 ` David Miller
2014-05-29 22:36 ` [Bridge] " David Miller
2014-05-30 14:37 ` [B.A.T.M.A.N.] " Stephen Hemminger
2014-05-30 14:37 ` Stephen Hemminger
2014-05-30 14:37 ` Stephen Hemminger
2014-05-30 14:37 ` [Bridge] " Stephen Hemminger
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=20140627001223.GA28373@Linus-Debian \
--to=linus.luessing@web.de \
--cc=adapa.ajith@gmail.com \
--cc=b.a.t.m.a.n@lists.open-mesh.org \
--cc=bridge@lists.linux-foundation.org \
--cc=netdev@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.