Add basic sysfs support for vlan device. It creates an entry in the
vlan pseudo-device to display tag.
/sys/class/net/eth0.5/vlan_id
It would be nice at some future to have something like:
/sys/class/net/eth0/tags/5 -> ../../eth0.5
as well.
There is a race with udev though. The sysfs entry can't be created
until after the the class_device is registered but the registration
doesn't happen until rtnl_unlock after register_netdevice. The class_device
registration causes the hotplug event, so the hotplug user program
might get there before vlan_id is created.
--- vlan.orig/net/8021q/Makefile 2006-05-01 12:50:58.000000000 -0700
+++ vlan/net/8021q/Makefile 2006-05-01 14:04:56.000000000 -0700
@@ -6,7 +6,5 @@
8021q-objs := vlan.o vlan_dev.o
-ifeq ($(CONFIG_PROC_FS),y)
-8021q-objs += vlanproc.o
-endif
-
+8021q-$(CONFIG_PROC_FS) += vlanproc.o
+8021q-$(CONFIG_SYSFS) += vlan_sysfs.o
--- vlan.orig/net/8021q/vlan.c 2006-05-01 12:50:58.000000000 -0700
+++ vlan/net/8021q/vlan.c 2006-05-01 13:48:35.000000000 -0700
@@ -232,6 +232,8 @@
/* Remove proc entry */
vlan_proc_rem_dev(dev);
+ vlan_sysfs_remove(dev);
+
/* Take it out of our own structures, but be sure to
* interlock with HW accelerating devices or SW vlan
* input packet processing.
@@ -557,6 +559,9 @@
rtnl_unlock();
+ if (vlan_sysfs_add(new_dev))
+ printk(KERN_WARNING "VLAN: failed to create sysfs entry for
%s\n",
+ new_dev->name);
#ifdef VLAN_DEBUG
printk(VLAN_DBG "Allocated new device successfully, returning.\n");
--- vlan.orig/net/8021q/vlan.h 2006-05-01 12:50:58.000000000 -0700
+++ vlan/net/8021q/vlan.h 2006-05-01 13:17:16.000000000 -0700
@@ -69,4 +69,13 @@
int vlan_dev_get_vid(const char* dev_name, unsigned short* result);
void vlan_dev_set_multicast_list(struct net_device *vlan_dev);
+#ifdef CONFIG_SYSFS
+int vlan_sysfs_add(struct net_device *dev);
+void vlan_sysfs_remove(struct net_device *dev);
+#else
+#define vlan_sysfs_add(dev) (0)
+#define vlan_sysfs_remove(dev) do { } while (0)
+#endif
+
+
#endif /* !(__BEN_VLAN_802_1Q_INC__) */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ vlan/net/8021q/vlan_sysfs.c 2006-05-01 14:04:49.000000000 -0700
@@ -0,0 +1,38 @@
+/*
+ * VLAN sysfs interface.
+ *
+ * Basic access to vlan information via sysfs.
+ * Authors:
+ * Stephen Hemminger <[EMAIL PROTECTED]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <linux/kernel.h>
+#include <linux/netdevice.h>
+#include "vlan.h"
+
+static ssize_t show_vlan_id(struct class_device *cd, char *buf)
+{
+ struct net_device *vlandev = container_of(cd, struct net_device,
class_dev);
+
+ return sprintf(buf, "%d\n", VLAN_DEV_INFO(vlandev)->vlan_id);
+}
+
+static CLASS_DEVICE_ATTR(vlan_id, S_IRUGO, show_vlan_id, NULL);
+
+int vlan_sysfs_add(struct net_device *dev)
+{
+ return class_device_create_file(&dev->class_dev,
+ &class_device_attr_vlan_id);
+}
+
+void vlan_sysfs_remove(struct net_device *dev)
+{
+ return class_device_remove_file(&dev->class_dev,
+ &class_device_attr_vlan_id);
+
+}
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html