Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 90748
b: refs/heads/master
c: d9ed0f0
h: refs/heads/master
v: v3
  • Loading branch information
Pavel Emelyanov authored and David S. Miller committed Apr 16, 2008
1 parent 5816ae3 commit a5d3e55
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a9fde2607895667823e9d1172fc193087125ef68
refs/heads/master: d9ed0f0e2dba45eec79ffbdd841757f87712349b
46 changes: 46 additions & 0 deletions trunk/net/8021q/vlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <linux/rtnetlink.h>
#include <linux/notifier.h>
#include <net/net_namespace.h>
#include <net/netns/generic.h>

#include <linux/if_vlan.h>
#include "vlan.h"
Expand All @@ -41,6 +42,8 @@

/* Global VLAN variables */

int vlan_net_id;

/* Our listing of VLAN group(s) */
static struct hlist_head vlan_group_hash[VLAN_GRP_HASH_SIZE];

Expand Down Expand Up @@ -625,13 +628,52 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
return err;
}

static int vlan_init_net(struct net *net)
{
int err;
struct vlan_net *vn;

err = -ENOMEM;
vn = kzalloc(sizeof(struct vlan_net), GFP_KERNEL);
if (vn == NULL)
goto err_alloc;

err = net_assign_generic(net, vlan_net_id, vn);
if (err < 0)
goto err_assign;

return 0;

err_assign:
kfree(vn);
err_alloc:
return err;
}

static void vlan_exit_net(struct net *net)
{
struct vlan_net *vn;

vn = net_generic(net, vlan_net_id);
kfree(vn);
}

static struct pernet_operations vlan_net_ops = {
.init = vlan_init_net,
.exit = vlan_exit_net,
};

static int __init vlan_proto_init(void)
{
int err;

pr_info("%s v%s %s\n", vlan_fullname, vlan_version, vlan_copyright);
pr_info("All bugs added by %s\n", vlan_buggyright);

err = register_pernet_gen_device(&vlan_net_id, &vlan_net_ops);
if (err < 0)
goto err0;

err = vlan_proc_init();
if (err < 0)
goto err1;
Expand All @@ -653,6 +695,8 @@ static int __init vlan_proto_init(void)
err2:
vlan_proc_cleanup();
err1:
unregister_pernet_gen_device(vlan_net_id, &vlan_net_ops);
err0:
return err;
}

Expand All @@ -673,6 +717,8 @@ static void __exit vlan_cleanup_module(void)

vlan_proc_cleanup();

unregister_pernet_gen_device(vlan_net_id, &vlan_net_ops);

synchronize_net();
}

Expand Down
5 changes: 5 additions & 0 deletions trunk/net/8021q/vlan.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,9 @@ static inline int is_vlan_dev(struct net_device *dev)
return dev->priv_flags & IFF_802_1Q_VLAN;
}

extern int vlan_net_id;

struct vlan_net {
};

#endif /* !(__BEN_VLAN_802_1Q_INC__) */

0 comments on commit a5d3e55

Please sign in to comment.