Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 4407
b: refs/heads/master
c: 84b42ba
h: refs/heads/master
i:
  4405: b34f379
  4403: da7b956
  4399: 6871e04
v: v3
  • Loading branch information
David L Stevens authored and David S. Miller committed Jul 9, 2005
1 parent ec9aa5f commit edcb27c
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9951f036fe8a4e6b21962559c64ff13b290ff01a
refs/heads/master: 84b42baef775b0e3415ccece17cf694f50326d01
25 changes: 13 additions & 12 deletions trunk/net/ipv4/igmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1687,24 +1687,25 @@ int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr)
{
struct inet_sock *inet = inet_sk(sk);
struct ip_mc_socklist *iml, **imlp;
struct in_device *in_dev;
u32 group = imr->imr_multiaddr.s_addr;
u32 ifindex;

rtnl_lock();
in_dev = ip_mc_find_dev(imr);
if (!in_dev) {
rtnl_unlock();
return -ENODEV;
}
ifindex = imr->imr_ifindex;
for (imlp = &inet->mc_list; (iml = *imlp) != NULL; imlp = &iml->next) {
if (iml->multi.imr_multiaddr.s_addr==imr->imr_multiaddr.s_addr &&
iml->multi.imr_address.s_addr==imr->imr_address.s_addr &&
(!imr->imr_ifindex || iml->multi.imr_ifindex==imr->imr_ifindex)) {
struct in_device *in_dev;

in_dev = inetdev_by_index(iml->multi.imr_ifindex);
if (in_dev)
(void) ip_mc_leave_src(sk, iml, in_dev);
if (iml->multi.imr_multiaddr.s_addr == group &&
iml->multi.imr_ifindex == ifindex) {
(void) ip_mc_leave_src(sk, iml, in_dev);

*imlp = iml->next;

if (in_dev) {
ip_mc_dec_group(in_dev, imr->imr_multiaddr.s_addr);
in_dev_put(in_dev);
}
ip_mc_dec_group(in_dev, group);
rtnl_unlock();
sock_kfree_s(sk, iml, sizeof(*iml));
return 0;
Expand Down

0 comments on commit edcb27c

Please sign in to comment.