aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2008-04-16 03:54:39 -0400
committerDavid S. Miller <davem@davemloft.net>2008-04-16 03:56:18 -0400
commit7a17a2f79f54a988d08ffa33ec9e1038bffec42b (patch)
tree3d65b49a2d8b76851eb97a47c69e6481a884c8dc
parent80de2d982156b5f6f50ff97175dc94ccfe3d093f (diff)
[VLAN]: Make the vlan_name_type per-net.
This includes moving one on the struct vlan_net and s/vlan_name_type/vn->name_type/ over the code. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Acked-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/8021q/vlan.c14
-rw-r--r--net/8021q/vlan.h4
-rw-r--r--net/8021q/vlanproc.c7
3 files changed, 16 insertions, 9 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index 541542e2a2c1..5cacad0671db 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -52,9 +52,6 @@ static char vlan_version[] = DRV_VERSION;
52static char vlan_copyright[] = "Ben Greear <greearb@candelatech.com>"; 52static char vlan_copyright[] = "Ben Greear <greearb@candelatech.com>";
53static char vlan_buggyright[] = "David S. Miller <davem@redhat.com>"; 53static char vlan_buggyright[] = "David S. Miller <davem@redhat.com>";
54 54
55/* Determines interface naming scheme. */
56unsigned short vlan_name_type = VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD;
57
58static struct packet_type vlan_packet_type = { 55static struct packet_type vlan_packet_type = {
59 .type = __constant_htons(ETH_P_8021Q), 56 .type = __constant_htons(ETH_P_8021Q),
60 .func = vlan_skb_recv, /* VLAN receive method */ 57 .func = vlan_skb_recv, /* VLAN receive method */
@@ -299,6 +296,8 @@ static int register_vlan_device(struct net_device *real_dev,
299 unsigned short VLAN_ID) 296 unsigned short VLAN_ID)
300{ 297{
301 struct net_device *new_dev; 298 struct net_device *new_dev;
299 struct net *net = dev_net(real_dev);
300 struct vlan_net *vn = net_generic(net, vlan_net_id);
302 char name[IFNAMSIZ]; 301 char name[IFNAMSIZ];
303 int err; 302 int err;
304 303
@@ -310,7 +309,7 @@ static int register_vlan_device(struct net_device *real_dev,
310 return err; 309 return err;
311 310
312 /* Gotta set up the fields for the device. */ 311 /* Gotta set up the fields for the device. */
313 switch (vlan_name_type) { 312 switch (vn->name_type) {
314 case VLAN_NAME_TYPE_RAW_PLUS_VID: 313 case VLAN_NAME_TYPE_RAW_PLUS_VID:
315 /* name will look like: eth1.0005 */ 314 /* name will look like: eth1.0005 */
316 snprintf(name, IFNAMSIZ, "%s.%.4i", real_dev->name, VLAN_ID); 315 snprintf(name, IFNAMSIZ, "%s.%.4i", real_dev->name, VLAN_ID);
@@ -580,7 +579,10 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
580 break; 579 break;
581 if ((args.u.name_type >= 0) && 580 if ((args.u.name_type >= 0) &&
582 (args.u.name_type < VLAN_NAME_TYPE_HIGHEST)) { 581 (args.u.name_type < VLAN_NAME_TYPE_HIGHEST)) {
583 vlan_name_type = args.u.name_type; 582 struct vlan_net *vn;
583
584 vn = net_generic(net, vlan_net_id);
585 vn->name_type = args.u.name_type;
584 err = 0; 586 err = 0;
585 } else { 587 } else {
586 err = -EINVAL; 588 err = -EINVAL;
@@ -642,6 +644,8 @@ static int vlan_init_net(struct net *net)
642 if (err < 0) 644 if (err < 0)
643 goto err_assign; 645 goto err_assign;
644 646
647 vn->name_type = VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD;
648
645 err = vlan_proc_init(net); 649 err = vlan_proc_init(net);
646 if (err < 0) 650 if (err < 0)
647 goto err_proc; 651 goto err_proc;
diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h
index 7258357db847..5229a72c7ea1 100644
--- a/net/8021q/vlan.h
+++ b/net/8021q/vlan.h
@@ -3,8 +3,6 @@
3 3
4#include <linux/if_vlan.h> 4#include <linux/if_vlan.h>
5 5
6extern unsigned short vlan_name_type;
7
8#define VLAN_GRP_HASH_SHIFT 5 6#define VLAN_GRP_HASH_SHIFT 5
9#define VLAN_GRP_HASH_SIZE (1 << VLAN_GRP_HASH_SHIFT) 7#define VLAN_GRP_HASH_SIZE (1 << VLAN_GRP_HASH_SHIFT)
10#define VLAN_GRP_HASH_MASK (VLAN_GRP_HASH_SIZE - 1) 8#define VLAN_GRP_HASH_MASK (VLAN_GRP_HASH_SIZE - 1)
@@ -59,6 +57,8 @@ struct vlan_net {
59 struct proc_dir_entry *proc_vlan_dir; 57 struct proc_dir_entry *proc_vlan_dir;
60 /* /proc/net/vlan/config */ 58 /* /proc/net/vlan/config */
61 struct proc_dir_entry *proc_vlan_conf; 59 struct proc_dir_entry *proc_vlan_conf;
60 /* Determines interface naming scheme. */
61 unsigned short name_type;
62}; 62};
63 63
64#endif /* !(__BEN_VLAN_802_1Q_INC__) */ 64#endif /* !(__BEN_VLAN_802_1Q_INC__) */
diff --git a/net/8021q/vlanproc.c b/net/8021q/vlanproc.c
index cc17b722078a..daad0064e2c2 100644
--- a/net/8021q/vlanproc.c
+++ b/net/8021q/vlanproc.c
@@ -260,13 +260,16 @@ static void vlan_seq_stop(struct seq_file *seq, void *v)
260 260
261static int vlan_seq_show(struct seq_file *seq, void *v) 261static int vlan_seq_show(struct seq_file *seq, void *v)
262{ 262{
263 struct net *net = seq_file_net(seq);
264 struct vlan_net *vn = net_generic(net, vlan_net_id);
265
263 if (v == SEQ_START_TOKEN) { 266 if (v == SEQ_START_TOKEN) {
264 const char *nmtype = NULL; 267 const char *nmtype = NULL;
265 268
266 seq_puts(seq, "VLAN Dev name | VLAN ID\n"); 269 seq_puts(seq, "VLAN Dev name | VLAN ID\n");
267 270
268 if (vlan_name_type < ARRAY_SIZE(vlan_name_type_str)) 271 if (vn->name_type < ARRAY_SIZE(vlan_name_type_str))
269 nmtype = vlan_name_type_str[vlan_name_type]; 272 nmtype = vlan_name_type_str[vn->name_type];
270 273
271 seq_printf(seq, "Name-Type: %s\n", 274 seq_printf(seq, "Name-Type: %s\n",
272 nmtype ? nmtype : "UNKNOWN"); 275 nmtype ? nmtype : "UNKNOWN");