netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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).