* Re: [Bugme-new] [Bug 9440] New: Problem in joinning a socket to ipv6 multicast address in specific scenario
[not found] <bug-9440-10286@http.bugzilla.kernel.org/>
@ 2007-11-23 1:23 ` Andrew Morton
2007-11-23 10:59 ` Evgeniy Polyakov
0 siblings, 1 reply; 6+ messages in thread
From: Andrew Morton @ 2007-11-23 1:23 UTC (permalink / raw)
To: netdev; +Cc: bugme-daemon, aviad.yehezkel5
On Thu, 22 Nov 2007 11:02:04 -0800 (PST) bugme-daemon@bugzilla.kernel.org wrote:
> http://bugzilla.kernel.org/show_bug.cgi?id=9440
>
> Summary: Problem in joinning a socket to ipv6 multicast address
> in specific scenario
> Product: Networking
> Version: 2.5
> KernelVersion: 2.6
> Platform: All
> OS/Version: Linux
> Tree: Mainline
> Status: NEW
> Severity: high
> Priority: P1
> Component: IPV6
> AssignedTo: yoshfuji@linux-ipv6.org
> ReportedBy: aviad.yehezkel5@gmail.com
>
>
> Hi,
> I have a problem in joinning a socket to multicast address in the following
> scenario (maybe kernel bug):
>
> 1. I am changing the mtu size of the eth device to a small size - "ifconfig
> eth1 mtu 100"
>
> 2. After that i am resizing the mtu for it's orginal size - "ifconfig eth1 mtu
> 1500"
>
> 3. Now i am running a program i wrote in c that opens a dgram socket
> (sock_fd[i] = socket(test_data->protocol, SOCK_DGRAM, 0);) and join it to
> multicast ipv6 address.
> if i am running this program after steps 1+2 i get the following error:
> "Resource temporarily unavailable" when trying to join the socket to the
> multicast ipv6 address by the
> system call :
>
> struct ipv6_mreq maddr6_group;
> ...
> setsockopt(sock_fd,
> IPPROTO_IPV6,
> IPV6_JOIN_GROUP,
> (char *)&maddr6_group,
> sizeof(maddr6_group));
>
> but if i am running my program after reset of the driver (before steps 1+2) it
> is working fine.
> if i am trying to run the program and join a socket to ipv4 multicast address
> (instead of ipv6) i get no errors - this doesn't work only when trying to join
> to ipv6 multicast address.
>
> I got this error in broadcom device ("Broadcom Corporation NetXtreme BCM5721
> Gigabit Ethernet PCI Express (rev 21)") but i don't think this is a bug in
> broadcom driver,
> because i tried it on differnt devices, in some devices i got the following
> error instead: "Invalid argument" with the same multicast address.
> As i said before if i am trying to join a socket to multicast ipv6 address
> before resizing the mtu size it is working fine, all the problems are after
> step 1+2.
>
> All my tries were OS:
> 1. SLES10.0 - 2.6.16.21-0.8-smp
> 2. REDHAT5.0 - 2.6.18-8.el5 #1 SMP.
>
>
> I am waiting for an answer,
> thanks a lot,
> Aviad Yehezkel.
>
>
> --
> Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
> ------- You are receiving this mail because: -------
> You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Bugme-new] [Bug 9440] New: Problem in joinning a socket to ipv6 multicast address in specific scenario
2007-11-23 1:23 ` [Bugme-new] [Bug 9440] New: Problem in joinning a socket to ipv6 multicast address in specific scenario Andrew Morton
@ 2007-11-23 10:59 ` Evgeniy Polyakov
2007-11-28 11:18 ` Evgeniy Polyakov
0 siblings, 1 reply; 6+ messages in thread
From: Evgeniy Polyakov @ 2007-11-23 10:59 UTC (permalink / raw)
To: Andrew Morton; +Cc: netdev, bugme-daemon, aviad.yehezkel5
On Thu, Nov 22, 2007 at 05:23:42PM -0800, Andrew Morton (akpm@linux-foundation.org) wrote:
> > 3. Now i am running a program i wrote in c that opens a dgram socket
> > (sock_fd[i] = socket(test_data->protocol, SOCK_DGRAM, 0);) and join it to
> > multicast ipv6 address.
> > if i am running this program after steps 1+2 i get the following error:
> > "Resource temporarily unavailable" when trying to join the socket to the
> > multicast ipv6 address by the
> > system call :
Could you provide a test application?
Given it is small and can be ran without external dependencies, it will
be fixed way much faster.
Thanks.
--
Evgeniy Polyakov
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Bugme-new] [Bug 9440] New: Problem in joinning a socket to ipv6 multicast address in specific scenario
2007-11-23 10:59 ` Evgeniy Polyakov
@ 2007-11-28 11:18 ` Evgeniy Polyakov
2007-11-30 12:02 ` Herbert Xu
0 siblings, 1 reply; 6+ messages in thread
From: Evgeniy Polyakov @ 2007-11-28 11:18 UTC (permalink / raw)
To: Andrew Morton; +Cc: netdev, bugme-daemon, aviad.yehezkel5, Herbert Xu
Hi.
Avaid provided test application, so bug got fixed.
IPv6 addrconf removes ipv6 inner device from netdev each time cmu
changes and new value is less than IPV6_MIN_MTU (1280 bytes).
When mtu is changed and new value is greater than IPV6_MIN_MTU,
it does not add ipv6 addresses and inner device bac.
This patch fixes that.
Tested with Avaid's application, which works ok now.
Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 567664e..4f7e46c 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -2357,12 +2358,18 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
break;
case NETDEV_CHANGEMTU:
- if ( idev && dev->mtu >= IPV6_MIN_MTU) {
+ if (idev && dev->mtu >= IPV6_MIN_MTU) {
rt6_mtu_change(dev, dev->mtu);
idev->cnf.mtu6 = dev->mtu;
break;
}
+ if (!idev && dev->mtu >= IPV6_MIN_MTU) {
+ idev = ipv6_add_dev(dev);
+ if (idev)
+ break;
+ }
+
/* MTU falled under IPV6_MIN_MTU. Stop IPv6 on this interface. */
case NETDEV_DOWN:
--
Evgeniy Polyakov
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Bugme-new] [Bug 9440] New: Problem in joinning a socket to ipv6 multicast address in specific scenario
2007-11-28 11:18 ` Evgeniy Polyakov
@ 2007-11-30 12:02 ` Herbert Xu
2007-11-30 12:25 ` Evgeniy Polyakov
0 siblings, 1 reply; 6+ messages in thread
From: Herbert Xu @ 2007-11-30 12:02 UTC (permalink / raw)
To: Evgeniy Polyakov
Cc: Andrew Morton, netdev, bugme-daemon, aviad.yehezkel5,
YOSHIFUJI Hideaki
On Wed, Nov 28, 2007 at 02:18:14PM +0300, Evgeniy Polyakov wrote:
> Hi.
>
> Avaid provided test application, so bug got fixed.
>
> IPv6 addrconf removes ipv6 inner device from netdev each time cmu
> changes and new value is less than IPV6_MIN_MTU (1280 bytes).
> When mtu is changed and new value is greater than IPV6_MIN_MTU,
> it does not add ipv6 addresses and inner device bac.
>
> This patch fixes that.
>
> Tested with Avaid's application, which works ok now.
>
> Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
OK, this looks like a good change. However, we should also
change NETDEV_UP as well to recreate idev if it isn't there
and the MTU is big enough.
Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Bugme-new] [Bug 9440] New: Problem in joinning a socket to ipv6 multicast address in specific scenario
2007-11-30 12:02 ` Herbert Xu
@ 2007-11-30 12:25 ` Evgeniy Polyakov
2007-11-30 12:36 ` Herbert Xu
0 siblings, 1 reply; 6+ messages in thread
From: Evgeniy Polyakov @ 2007-11-30 12:25 UTC (permalink / raw)
To: Herbert Xu
Cc: Andrew Morton, netdev, bugme-daemon, aviad.yehezkel5,
YOSHIFUJI Hideaki
On Fri, Nov 30, 2007 at 11:02:19PM +1100, Herbert Xu (herbert@gondor.apana.org.au) wrote:
> OK, this looks like a good change. However, we should also
> change NETDEV_UP as well to recreate idev if it isn't there
> and the MTU is big enough.
Ok, added netdev_up too.
Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 567664e..e8c3475 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -2293,6 +2293,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
break;
}
+ if (!idev && dev->mtu >= IPV6_MIN_MTU)
+ idev = ipv6_add_dev(dev);
+
if (idev)
idev->if_flags |= IF_READY;
} else {
@@ -2357,12 +2360,18 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
break;
case NETDEV_CHANGEMTU:
- if ( idev && dev->mtu >= IPV6_MIN_MTU) {
+ if (idev && dev->mtu >= IPV6_MIN_MTU) {
rt6_mtu_change(dev, dev->mtu);
idev->cnf.mtu6 = dev->mtu;
break;
}
+ if (!idev && dev->mtu >= IPV6_MIN_MTU) {
+ idev = ipv6_add_dev(dev);
+ if (idev)
+ break;
+ }
+
/* MTU falled under IPV6_MIN_MTU. Stop IPv6 on this interface. */
case NETDEV_DOWN:
--
Evgeniy Polyakov
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Bugme-new] [Bug 9440] New: Problem in joinning a socket to ipv6 multicast address in specific scenario
2007-11-30 12:25 ` Evgeniy Polyakov
@ 2007-11-30 12:36 ` Herbert Xu
0 siblings, 0 replies; 6+ messages in thread
From: Herbert Xu @ 2007-11-30 12:36 UTC (permalink / raw)
To: Evgeniy Polyakov
Cc: Andrew Morton, netdev, bugme-daemon, aviad.yehezkel5,
YOSHIFUJI Hideaki
On Fri, Nov 30, 2007 at 03:25:16PM +0300, Evgeniy Polyakov wrote:
>
> Ok, added netdev_up too.
>
> Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Applied to net-2.6. Thanks Evgeniy!
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2007-11-30 12:36 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <bug-9440-10286@http.bugzilla.kernel.org/>
2007-11-23 1:23 ` [Bugme-new] [Bug 9440] New: Problem in joinning a socket to ipv6 multicast address in specific scenario Andrew Morton
2007-11-23 10:59 ` Evgeniy Polyakov
2007-11-28 11:18 ` Evgeniy Polyakov
2007-11-30 12:02 ` Herbert Xu
2007-11-30 12:25 ` Evgeniy Polyakov
2007-11-30 12:36 ` Herbert Xu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).