diff options
| author | David S. Miller <davem@davemloft.net> | 2018-07-16 21:20:07 +0300 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2018-07-16 21:20:07 +0300 |
| commit | 8e05fd839ddf15dca8500f6f581766d4982c135e (patch) | |
| tree | 03f7f2ef2a2c6057038292eadf567eda876f3991 /include/linux | |
| parent | 6bed5e260709897cf918ca262b8e68a17227ec4b (diff) | |
| parent | c7ea20c9da5b94e400c8dcc0adb99411f2e430a6 (diff) | |
| download | linux-8e05fd839ddf15dca8500f6f581766d4982c135e.tar.xz | |
Merge branch 'multicast-init-as-INCLUDE-when-join-SSM-INCLUDE-group'
Hangbin Liu says:
====================
multicast: init as INCLUDE when join SSM INCLUDE group
Based on RFC3376 5.1 and RFC3810 6.1, we should init as INCLUDE when join SSM
INCLUDE group. In my first version I only clear the group change record. But
this is not enough as when a new group join, it will init as EXCLUDE and
trigger an filter mode change in ip/ip6_mc_add_src(), which will clear all
source addresses' sf_crcount. This will prevent early joined address sending
state change records if multi source addresses joined at the same time.
In this v2 patchset, I fixed it by directly initializing the mode to INCLUDE
for SSM JOIN_SOURCE_GROUP. I also split the original patch into two separated
patches for IPv4 and IPv6.
Test: test by myself and customer.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/igmp.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/igmp.h b/include/linux/igmp.h index f8231854b5d6..119f53941c12 100644 --- a/include/linux/igmp.h +++ b/include/linux/igmp.h @@ -109,6 +109,8 @@ struct ip_mc_list { extern int ip_check_mc_rcu(struct in_device *dev, __be32 mc_addr, __be32 src_addr, u8 proto); extern int igmp_rcv(struct sk_buff *); extern int ip_mc_join_group(struct sock *sk, struct ip_mreqn *imr); +extern int ip_mc_join_group_ssm(struct sock *sk, struct ip_mreqn *imr, + unsigned int mode); extern int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr); extern void ip_mc_drop_socket(struct sock *sk); extern int ip_mc_source(int add, int omode, struct sock *sk, |
