All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlad Yasevich <vyasevic@redhat.com>
To: netdev@vger.kernel.org
Cc: stephen@redhat.com, bridge@lists.linux-foundation.org,
	mst@redhat.com, davem@davemloft.net, shmulik.ladkani@gmail.com
Subject: Re: [Bridge] [PATCH 10/14] bridge: Add the ability to pvid
Date: Wed, 09 Jan 2013 17:24:55 -0000	[thread overview]
Message-ID: <50EDA7E2.1020005@redhat.com> (raw)
In-Reply-To: <1357751882-8619-12-git-send-email-vyasevic@redhat.com>

On 01/09/2013 12:17 PM, Vlad Yasevich wrote:
> A user may designate a certain vlan as PVID.  This means that
> any ingress frame that does not contain a vlan tag is assigned to
> this vlan and any forwarding decisions are made with this vlan in mind.
>
> Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>

Sorry..  this one is a left-over that snuck in....  Disregard this 
patch.  The proper one is in the series already.

-vlad

> ---
>   include/uapi/linux/if_bridge.h |    1 +
>   net/bridge/br_if.c             |   77 +++++++++++++++++++++++++++++++++++++--
>   net/bridge/br_netlink.c        |    9 +++--
>   net/bridge/br_private.h        |    5 ++-
>   4 files changed, 82 insertions(+), 10 deletions(-)
>
> diff --git a/include/uapi/linux/if_bridge.h b/include/uapi/linux/if_bridge.h
> index 1bc9216..e5ea4cb 100644
> --- a/include/uapi/linux/if_bridge.h
> +++ b/include/uapi/linux/if_bridge.h
> @@ -120,6 +120,7 @@ enum {
>   #define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
>
>   #define BRIDGE_VLAN_INFO_MASTER	(1<<0)	/* Operate on Bridge device as well */
> +#define BRIDGE_VLAN_INFO_PVID	(1<<1)	/* VLAN is PVID, ingress untagged */
>
>   struct bridge_vlan_info {
>   	u16 flags;
> diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
> index 7377113..0698581 100644
> --- a/net/bridge/br_if.c
> +++ b/net/bridge/br_if.c
> @@ -182,6 +182,56 @@ static void br_vlan_flush(struct net_bridge *br)
>   	}
>   }
>
> +static int nbp_vlan_add_pvid(struct net_port_vlans *v,
> +			     struct net_bridge_vlan *vlan)
> +{
> +	struct net_bridge_vlan *pvlan = rtnl_dereference(v->pvlan);
> +
> +	if (pvlan == vlan)
> +		return 0;
> +	else if (pvlan) {
> +		/* PVID is already set.  Drop the ref
> +		 * to the old one since we'll be replace it.
> +		 */
> +		br_vlan_put(pvlan);
> +	} else if (v->port_idx) {
> +		struct net_device *dev = vlans_to_port(v)->dev;
> +
> +		/* Add vid 0 to filter if filter is available. */
> +		if (!vlan_hw_buggy(dev)) {
> +			int err = vlan_vid_add_hw(dev, 0);
> +			if (err)
> +				return err;
> +		}
> +	}
> +
> +	br_vlan_hold(vlan);
> +	rcu_assign_pointer(v->pvlan, vlan);
> +	return 0;
> +}
> +
> +static void nbp_vlan_delete_pvid(struct net_port_vlans *v,
> +				 struct net_bridge_vlan *vlan)
> +{
> +	struct net_bridge_vlan *pvlan = rtnl_dereference(v->pvlan);
> +
> +	if (pvlan != vlan)
> +		return;
> +
> +	if (v->port_idx &&
> +	    vlan_vid_del_hw(vlans_to_port(v)->dev, 0)) {
> +		pr_warn("failed to kill vid 0 for device %s\n",
> +			vlans_to_port(v)->dev->name);
> +	}
> +
> +	/* If this VLAN is currently functioning as pvlan, clear it.
> +	 * It's safe to drop the refcount, since the vlan is still held
> +	 * by the pve->vlan pointer.
> +	 */
> +	br_vlan_put(vlan);
> +	rcu_assign_pointer(v->pvlan, NULL);
> +}
> +
>   struct net_port_vlan *nbp_vlan_find(const struct net_port_vlans *v, u16 vid)
>   {
>   	struct net_port_vlan *pve;
> @@ -198,9 +248,9 @@ struct net_port_vlan *nbp_vlan_find(const struct net_port_vlans *v, u16 vid)
>   }
>
>   /* Must be protected by RTNL */
> -int nbp_vlan_add(struct net_port_vlans *v, u16 vid)
> +int nbp_vlan_add(struct net_port_vlans *v, u16 vid, u16 flags)
>   {
> -	struct net_port_vlan *pve;
> +	struct net_port_vlan *pve = NULL;
>   	struct net_bridge_vlan *vlan;
>   	struct net_bridge *br = vlans_to_bridge(v);
>   	struct net_bridge_port *p = vlans_to_port(v);
> @@ -247,26 +297,45 @@ int nbp_vlan_add(struct net_port_vlans *v, u16 vid)
>   	set_bit(v->port_idx, vlan->port_bitmap);
>
>   	list_add_tail_rcu(&pve->list, &v->vlan_list);
> +
> +	if (flags & BRIDGE_VLAN_INFO_PVID) {
> +		err = nbp_vlan_add_pvid(v, vlan);
> +		if (err)
> +			goto del_vlan;
> +	}
> +
>   	return 0;
>
>   clean_up:
>   	kfree(pve);
>   	br_vlan_del(vlan);
>   	return err;
> +del_vlan:
> +	nbp_vlan_delete(v, vid, flags);
> +	return err;
>   }
>
>   /* Must be protected by RTNL */
> -int nbp_vlan_delete(struct net_port_vlans *v, u16 vid)
> +int nbp_vlan_delete(struct net_port_vlans *v, u16 vid, u16 flags)
>   {
>   	struct net_port_vlan *pve;
>   	struct net_bridge_vlan *vlan;
> +	struct net_bridge *br;
>
>   	ASSERT_RTNL();
>
> +	if (v->port_idx)
> +		br = vlans_to_port(v)->br;
> +	else
> +		br = vlans_to_bridge(v);
> +
>   	pve = nbp_vlan_find(v, vid);
>   	if (!pve)
>   		return -ENOENT;
>
> +	if (flags & BRIDGE_VLAN_INFO_PVID)
> +		nbp_vlan_delete_pvid(v, pve->vlan);
> +
>   	if (v->port_idx) {
>   		/* A valid port index means this is a port.
>   		 * Remove VLAN from the port device filter if it is supported.
> @@ -301,7 +370,7 @@ static void nbp_vlan_flush(struct net_port_vlans *vlans)
>   	ASSERT_RTNL();
>
>   	list_for_each_entry_safe(pve, tmp, &vlans->vlan_list, list)
> -		nbp_vlan_delete(vlans, pve->vid);
> +		nbp_vlan_delete(vlans, pve->vid, BRIDGE_VLAN_INFO_PVID);
>   }
>
>   static void release_nbp(struct kobject *kobj)
> diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
> index f365ac4..08692d1 100644
> --- a/net/bridge/br_netlink.c
> +++ b/net/bridge/br_netlink.c
> @@ -200,19 +200,20 @@ static int br_afspec(struct net_bridge *br,
>
>   		switch (cmd) {
>   		case RTM_SETLINK:
> -			err = nbp_vlan_add(v, vinfo->vid);
> +			err = nbp_vlan_add(v, vinfo->vid, vinfo->flags);
>   			if (err)
>   				break;
>   			if (p && (vinfo->flags & BRIDGE_VLAN_INFO_MASTER)) {
>   				err = nbp_vlan_add(&p->br->vlan_info,
> -						   vinfo->vid);
> +						   vinfo->vid, vinfo->flags);
>   			}
>   			break;
>
>   		case RTM_DELLINK:
> -			nbp_vlan_delete(v, vinfo->vid);
> +			nbp_vlan_delete(v, vinfo->vid, vinfo->flags);
>   			if (p && (vinfo->flags & BRIDGE_VLAN_INFO_MASTER))
> -				nbp_vlan_delete(&p->br->vlan_info, vinfo->vid);
> +				nbp_vlan_delete(&p->br->vlan_info, vinfo->vid,
> +						vinfo->flags);
>
>   			break;
>   		}
> diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
> index 4c507a4..d39701a 100644
> --- a/net/bridge/br_private.h
> +++ b/net/bridge/br_private.h
> @@ -89,6 +89,7 @@ struct net_port_vlan {
>   struct net_port_vlans {
>   	u16				port_idx;
>   	struct list_head		vlan_list;
> +	struct net_bridge_vlan __rcu	*pvlan;
>   };
>
>   struct net_bridge_fdb_entry
> @@ -472,8 +473,8 @@ extern int br_min_mtu(const struct net_bridge *br);
>   extern netdev_features_t br_features_recompute(struct net_bridge *br,
>   	netdev_features_t features);
>   extern struct net_bridge_vlan *br_vlan_find(struct net_bridge *br, u16 vid);
> -extern int nbp_vlan_add(struct net_port_vlans *v, u16 vid);
> -extern int nbp_vlan_delete(struct net_port_vlans *v, u16 vid);
> +extern int nbp_vlan_add(struct net_port_vlans *v, u16 vid, u16 flags);
> +extern int nbp_vlan_delete(struct net_port_vlans *v, u16 vid, u16 flags);
>   extern struct net_port_vlan *nbp_vlan_find(const struct net_port_vlans *v,
>   					   u16 vid);
>
>


WARNING: multiple messages have this Message-ID (diff)
From: Vlad Yasevich <vyasevic@redhat.com>
To: netdev@vger.kernel.org
Cc: davem@davemloft.net, stephen@redhat.com,
	bridge@lists.linux-foundation.org, shmulik.ladkani@gmail.com,
	mst@redhat.com
Subject: Re: [PATCH 10/14] bridge: Add the ability to pvid
Date: Wed, 09 Jan 2013 12:24:50 -0500	[thread overview]
Message-ID: <50EDA7E2.1020005@redhat.com> (raw)
In-Reply-To: <1357751882-8619-12-git-send-email-vyasevic@redhat.com>

On 01/09/2013 12:17 PM, Vlad Yasevich wrote:
> A user may designate a certain vlan as PVID.  This means that
> any ingress frame that does not contain a vlan tag is assigned to
> this vlan and any forwarding decisions are made with this vlan in mind.
>
> Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>

Sorry..  this one is a left-over that snuck in....  Disregard this 
patch.  The proper one is in the series already.

-vlad

> ---
>   include/uapi/linux/if_bridge.h |    1 +
>   net/bridge/br_if.c             |   77 +++++++++++++++++++++++++++++++++++++--
>   net/bridge/br_netlink.c        |    9 +++--
>   net/bridge/br_private.h        |    5 ++-
>   4 files changed, 82 insertions(+), 10 deletions(-)
>
> diff --git a/include/uapi/linux/if_bridge.h b/include/uapi/linux/if_bridge.h
> index 1bc9216..e5ea4cb 100644
> --- a/include/uapi/linux/if_bridge.h
> +++ b/include/uapi/linux/if_bridge.h
> @@ -120,6 +120,7 @@ enum {
>   #define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
>
>   #define BRIDGE_VLAN_INFO_MASTER	(1<<0)	/* Operate on Bridge device as well */
> +#define BRIDGE_VLAN_INFO_PVID	(1<<1)	/* VLAN is PVID, ingress untagged */
>
>   struct bridge_vlan_info {
>   	u16 flags;
> diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
> index 7377113..0698581 100644
> --- a/net/bridge/br_if.c
> +++ b/net/bridge/br_if.c
> @@ -182,6 +182,56 @@ static void br_vlan_flush(struct net_bridge *br)
>   	}
>   }
>
> +static int nbp_vlan_add_pvid(struct net_port_vlans *v,
> +			     struct net_bridge_vlan *vlan)
> +{
> +	struct net_bridge_vlan *pvlan = rtnl_dereference(v->pvlan);
> +
> +	if (pvlan == vlan)
> +		return 0;
> +	else if (pvlan) {
> +		/* PVID is already set.  Drop the ref
> +		 * to the old one since we'll be replace it.
> +		 */
> +		br_vlan_put(pvlan);
> +	} else if (v->port_idx) {
> +		struct net_device *dev = vlans_to_port(v)->dev;
> +
> +		/* Add vid 0 to filter if filter is available. */
> +		if (!vlan_hw_buggy(dev)) {
> +			int err = vlan_vid_add_hw(dev, 0);
> +			if (err)
> +				return err;
> +		}
> +	}
> +
> +	br_vlan_hold(vlan);
> +	rcu_assign_pointer(v->pvlan, vlan);
> +	return 0;
> +}
> +
> +static void nbp_vlan_delete_pvid(struct net_port_vlans *v,
> +				 struct net_bridge_vlan *vlan)
> +{
> +	struct net_bridge_vlan *pvlan = rtnl_dereference(v->pvlan);
> +
> +	if (pvlan != vlan)
> +		return;
> +
> +	if (v->port_idx &&
> +	    vlan_vid_del_hw(vlans_to_port(v)->dev, 0)) {
> +		pr_warn("failed to kill vid 0 for device %s\n",
> +			vlans_to_port(v)->dev->name);
> +	}
> +
> +	/* If this VLAN is currently functioning as pvlan, clear it.
> +	 * It's safe to drop the refcount, since the vlan is still held
> +	 * by the pve->vlan pointer.
> +	 */
> +	br_vlan_put(vlan);
> +	rcu_assign_pointer(v->pvlan, NULL);
> +}
> +
>   struct net_port_vlan *nbp_vlan_find(const struct net_port_vlans *v, u16 vid)
>   {
>   	struct net_port_vlan *pve;
> @@ -198,9 +248,9 @@ struct net_port_vlan *nbp_vlan_find(const struct net_port_vlans *v, u16 vid)
>   }
>
>   /* Must be protected by RTNL */
> -int nbp_vlan_add(struct net_port_vlans *v, u16 vid)
> +int nbp_vlan_add(struct net_port_vlans *v, u16 vid, u16 flags)
>   {
> -	struct net_port_vlan *pve;
> +	struct net_port_vlan *pve = NULL;
>   	struct net_bridge_vlan *vlan;
>   	struct net_bridge *br = vlans_to_bridge(v);
>   	struct net_bridge_port *p = vlans_to_port(v);
> @@ -247,26 +297,45 @@ int nbp_vlan_add(struct net_port_vlans *v, u16 vid)
>   	set_bit(v->port_idx, vlan->port_bitmap);
>
>   	list_add_tail_rcu(&pve->list, &v->vlan_list);
> +
> +	if (flags & BRIDGE_VLAN_INFO_PVID) {
> +		err = nbp_vlan_add_pvid(v, vlan);
> +		if (err)
> +			goto del_vlan;
> +	}
> +
>   	return 0;
>
>   clean_up:
>   	kfree(pve);
>   	br_vlan_del(vlan);
>   	return err;
> +del_vlan:
> +	nbp_vlan_delete(v, vid, flags);
> +	return err;
>   }
>
>   /* Must be protected by RTNL */
> -int nbp_vlan_delete(struct net_port_vlans *v, u16 vid)
> +int nbp_vlan_delete(struct net_port_vlans *v, u16 vid, u16 flags)
>   {
>   	struct net_port_vlan *pve;
>   	struct net_bridge_vlan *vlan;
> +	struct net_bridge *br;
>
>   	ASSERT_RTNL();
>
> +	if (v->port_idx)
> +		br = vlans_to_port(v)->br;
> +	else
> +		br = vlans_to_bridge(v);
> +
>   	pve = nbp_vlan_find(v, vid);
>   	if (!pve)
>   		return -ENOENT;
>
> +	if (flags & BRIDGE_VLAN_INFO_PVID)
> +		nbp_vlan_delete_pvid(v, pve->vlan);
> +
>   	if (v->port_idx) {
>   		/* A valid port index means this is a port.
>   		 * Remove VLAN from the port device filter if it is supported.
> @@ -301,7 +370,7 @@ static void nbp_vlan_flush(struct net_port_vlans *vlans)
>   	ASSERT_RTNL();
>
>   	list_for_each_entry_safe(pve, tmp, &vlans->vlan_list, list)
> -		nbp_vlan_delete(vlans, pve->vid);
> +		nbp_vlan_delete(vlans, pve->vid, BRIDGE_VLAN_INFO_PVID);
>   }
>
>   static void release_nbp(struct kobject *kobj)
> diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
> index f365ac4..08692d1 100644
> --- a/net/bridge/br_netlink.c
> +++ b/net/bridge/br_netlink.c
> @@ -200,19 +200,20 @@ static int br_afspec(struct net_bridge *br,
>
>   		switch (cmd) {
>   		case RTM_SETLINK:
> -			err = nbp_vlan_add(v, vinfo->vid);
> +			err = nbp_vlan_add(v, vinfo->vid, vinfo->flags);
>   			if (err)
>   				break;
>   			if (p && (vinfo->flags & BRIDGE_VLAN_INFO_MASTER)) {
>   				err = nbp_vlan_add(&p->br->vlan_info,
> -						   vinfo->vid);
> +						   vinfo->vid, vinfo->flags);
>   			}
>   			break;
>
>   		case RTM_DELLINK:
> -			nbp_vlan_delete(v, vinfo->vid);
> +			nbp_vlan_delete(v, vinfo->vid, vinfo->flags);
>   			if (p && (vinfo->flags & BRIDGE_VLAN_INFO_MASTER))
> -				nbp_vlan_delete(&p->br->vlan_info, vinfo->vid);
> +				nbp_vlan_delete(&p->br->vlan_info, vinfo->vid,
> +						vinfo->flags);
>
>   			break;
>   		}
> diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
> index 4c507a4..d39701a 100644
> --- a/net/bridge/br_private.h
> +++ b/net/bridge/br_private.h
> @@ -89,6 +89,7 @@ struct net_port_vlan {
>   struct net_port_vlans {
>   	u16				port_idx;
>   	struct list_head		vlan_list;
> +	struct net_bridge_vlan __rcu	*pvlan;
>   };
>
>   struct net_bridge_fdb_entry
> @@ -472,8 +473,8 @@ extern int br_min_mtu(const struct net_bridge *br);
>   extern netdev_features_t br_features_recompute(struct net_bridge *br,
>   	netdev_features_t features);
>   extern struct net_bridge_vlan *br_vlan_find(struct net_bridge *br, u16 vid);
> -extern int nbp_vlan_add(struct net_port_vlans *v, u16 vid);
> -extern int nbp_vlan_delete(struct net_port_vlans *v, u16 vid);
> +extern int nbp_vlan_add(struct net_port_vlans *v, u16 vid, u16 flags);
> +extern int nbp_vlan_delete(struct net_port_vlans *v, u16 vid, u16 flags);
>   extern struct net_port_vlan *nbp_vlan_find(const struct net_port_vlans *v,
>   					   u16 vid);
>
>

  reply	other threads:[~2013-01-09 17:24 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-09 17:17 [PATCH net-next V5 00/14] Add basic VLAN support to bridges Vlad Yasevich
2013-01-09 17:18 ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 01/14] vlan: wrap hw-acceleration calls in separate functions Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-10 18:25   ` Stephen Hemminger
2013-01-10 18:25     ` Stephen Hemminger
2013-01-10 18:41     ` Vlad Yasevich
2013-01-10 18:42       ` [Bridge] " Vlad Yasevich
2013-01-10 22:07       ` Stephen Hemminger
2013-01-10 22:07         ` Stephen Hemminger
2013-01-11  1:08         ` Vlad Yasevich
2013-01-11  1:08           ` [Bridge] " Vlad Yasevich
2013-01-11 17:20           ` Stephen Hemminger
2013-01-11 17:20             ` Stephen Hemminger
2013-01-11 17:41             ` Vlad Yasevich
2013-01-11 17:41               ` [Bridge] " Vlad Yasevich
2013-01-11 18:23               ` Stephen Hemminger
2013-01-11 18:23                 ` Stephen Hemminger
2013-01-11 18:53                 ` Vlad Yasevich
2013-01-11 18:53                   ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 02/14] bridge: Add vlan filtering infrastructure Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-10 18:36   ` Stephen Hemminger
2013-01-10 18:36     ` Stephen Hemminger
2013-01-10 19:01     ` Vlad Yasevich
2013-01-10 19:01       ` [Bridge] " Vlad Yasevich
2013-01-10 19:23       ` Vlad Yasevich
2013-01-10 19:23         ` [Bridge] " Vlad Yasevich
2013-01-10 22:10         ` Stephen Hemminger
2013-01-10 22:10           ` Stephen Hemminger
2013-01-11  1:14           ` Vlad Yasevich
2013-01-11  1:14             ` [Bridge] " Vlad Yasevich
2013-01-11 13:53             ` Shmulik Ladkani
2013-01-11 13:54               ` [Bridge] " Shmulik Ladkani
2013-01-11 15:33               ` Vlad Yasevich
2013-01-11 15:33                 ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 03/14] bridge: Validate that vlan is permitted on ingress Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 04/14] bridge: Verify that a vlan is allowed to egress on give port Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 05/14] bridge: Cache vlan in the cb for faster egress lookup Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 06/14] bridge: Add vlan to unicast fdb entries Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 07/14] bridge: Add vlan id to multicast groups Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 08/14] bridge: Add netlink interface to configure vlans on bridge ports Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 09/14] bridge: Add vlan support to static neighbors Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 10/14] bridge: Add the ability to configure pvid Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:17 ` [PATCH 10/14] bridge: Add the ability to pvid Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:24   ` Vlad Yasevich [this message]
2013-01-09 17:24     ` Vlad Yasevich
2013-01-09 17:17 ` [PATCH net-next v5 11/14] bridge: API to configure egress policy Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:18 ` [PATCH net-next v5 12/14] bridge: Implement vlan ingress/egress policy Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:18 ` [PATCH net-next v5 13/14] bridge: Dump vlan information from a bridge port Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich
2013-01-09 17:18 ` [PATCH net-next v5 14/14] bridge: Add vlan support for local fdb entries Vlad Yasevich
2013-01-09 17:18   ` [Bridge] " Vlad Yasevich

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=50EDA7E2.1020005@redhat.com \
    --to=vyasevic@redhat.com \
    --cc=bridge@lists.linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=shmulik.ladkani@gmail.com \
    --cc=stephen@redhat.com \
    /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.