From: Ben Greear <greearb@candelatech.com>
To: Stephen Hemminger <shemminger@osdl.org>
Cc: Stefan Rompf <stefan@loplof.de>,
Patrick McHardy <kaber@trash.net>,
Linux Netdev List <netdev@vger.kernel.org>
Subject: Re: [RFC] vlan handling of up/down
Date: Tue, 11 Jul 2006 14:47:49 -0700 [thread overview]
Message-ID: <44B41C85.3040305@candelatech.com> (raw)
In-Reply-To: <20060711142808.1a6a47bb@dxpl.pdx.osdl.net>
Stephen Hemminger wrote:
> Untested, but here is the basic idea of how I think up/down should be
> handled. Basically, rather than changing the flags directly the VLAN code
> should call dev_open/dev_close. The notifier end's up recursively calling
> but this is okay.
>
>
> --- vlan.orig/net/8021q/vlan.c
> +++ vlan/net/8021q/vlan.c
> @@ -427,7 +427,7 @@ static struct net_device *register_vlan_
> /* The real device must be up and operating in order to
> * assosciate a VLAN device with it.
> */
> - if (!(real_dev->flags & IFF_UP))
> + if (!netif_running(real_dev))
> goto out_unlock;
I can't remember why I thought this check was a good idea..but is there
any reason to keep it in? I mean, why not allow attaching VLANs to a
'down' device?
> if (__find_vlan_dev(real_dev, VLAN_ID) != NULL) {
> @@ -476,10 +476,7 @@ static struct net_device *register_vlan_
> printk(VLAN_DBG "Allocated new name -:%s:-\n", new_dev->name);
> #endif
> /* IFF_BROADCAST|IFF_MULTICAST; ??? */
> - new_dev->flags = real_dev->flags;
> - new_dev->flags &= ~IFF_UP;
> -
> - new_dev->state = real_dev->state & ~(1<<__LINK_STATE_START);
> + new_dev->flags = real_dev->flags & ~IFF_UP;
>
> /* need 4 bytes for extra VLAN header info,
> * hope the underlying device can handle it.
> @@ -566,6 +563,9 @@ static struct net_device *register_vlan_
> if (real_dev->features & NETIF_F_HW_VLAN_FILTER)
> real_dev->vlan_rx_add_vid(real_dev, VLAN_ID);
>
> + /* Real device is up so bring up the vlan */
> + dev_open(new_dev);
> +
> rtnl_unlock();
Assuming we take out the 'is-up' check above, this would need
a check added here (if real-dev is up, then bring up vlan, else leave it down.)
> @@ -624,11 +624,7 @@ static int vlan_device_event(struct noti
> if (!vlandev)
> continue;
>
> - flgs = vlandev->flags;
> - if (!(flgs & IFF_UP))
> - continue;
> -
> - dev_change_flags(vlandev, flgs & ~IFF_UP);
> + dev_close(vlandev);
> }
> break;
>
> @@ -638,12 +634,8 @@ static int vlan_device_event(struct noti
> vlandev = grp->vlan_devices[i];
> if (!vlandev)
> continue;
> -
> - flgs = vlandev->flags;
> - if (flgs & IFF_UP)
> - continue;
>
> - dev_change_flags(vlandev, flgs | IFF_UP);
> + dev_open(vlandev);
> }
> break;
Although it may be too late to change this (don't want to change
user-visible behaviour), I don't really like that bouncing the
real-dev could cause the VLANs to come up, even if previously
user-space had forced them down.
Perhaps a piece of state in the vlan dev could be added to remember
the 'desired state', and then only bring back up interfaces that are
desired-up when the real-dev comes back online....
Ben
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
next prev parent reply other threads:[~2006-07-11 21:48 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200603211829.k2LITMNR029085@hera.kernel.org>
2006-07-04 10:07 ` [VLAN]: translate IF_OPER_DORMANT to netif_dormant_on() Patrick McHardy
2006-07-05 18:57 ` Stefan Rompf
2006-07-05 21:00 ` Patrick McHardy
2006-07-05 21:17 ` Ben Greear
2006-07-06 7:42 ` Patrick McHardy
2006-07-07 9:45 ` Stefan Rompf
2006-07-07 9:56 ` Patrick McHardy
2006-07-07 21:33 ` Stephen Hemminger
2006-07-09 8:49 ` Stefan Rompf
2006-07-09 18:48 ` David Miller
2006-07-09 20:05 ` Krzysztof Halasa
2006-07-10 0:29 ` David Miller
2006-07-10 11:39 ` Krzysztof Halasa
2006-07-10 6:17 ` Stefan Rompf
2006-07-10 12:01 ` Krzysztof Halasa
2006-07-10 21:58 ` Stefan Rompf
2006-07-10 16:56 ` Stephen Hemminger
2006-07-10 17:02 ` Ben Greear
2006-07-10 22:01 ` Stefan Rompf
2006-07-11 21:28 ` [RFC] vlan handling of up/down Stephen Hemminger
2006-07-11 21:47 ` Ben Greear [this message]
2006-07-11 22:19 ` Stefan Rompf
2006-07-11 22:07 ` [VLAN]: translate IF_OPER_DORMANT to netif_dormant_on() Stefan Rompf
2006-07-11 22:15 ` Repost: " Stefan Rompf
2006-07-12 6:50 ` Patrick McHardy
2006-07-19 12:42 ` Patrick McHardy
2006-07-24 20:52 ` David Miller
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=44B41C85.3040305@candelatech.com \
--to=greearb@candelatech.com \
--cc=kaber@trash.net \
--cc=netdev@vger.kernel.org \
--cc=shemminger@osdl.org \
--cc=stefan@loplof.de \
/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.