From b7a4a83629c1ddde8c2e6a872618c66577cb20f0 Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:19:16 -0800 Subject: [VLAN]: Kill useless VLAN_NAME define The only user already includes __FUNCTION__ (vlan_proto_init) in the output, which is enough to identify what the message is about. Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- net/8021q/vlan.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 032bf44eca5e..af2525569424 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -89,8 +89,8 @@ static int __init vlan_proto_init(void) err = vlan_proc_init(); if (err < 0) { printk(KERN_ERR - "%s %s: can't create entry in proc filesystem!\n", - __FUNCTION__, VLAN_NAME); + "%s: can't create entry in proc filesystem!\n", + __FUNCTION__); return err; } -- cgit v1.2.3 From 7bd38d778e3f2250e96fc277040879d66c30ecb4 Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:19:31 -0800 Subject: [VLAN]: Use dev->stats Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- include/linux/if_vlan.h | 9 +-------- net/8021q/vlan.c | 2 -- net/8021q/vlan_dev.c | 8 ++++---- net/8021q/vlanproc.c | 5 +---- 4 files changed, 6 insertions(+), 18 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index 0325d6b17e07..07db4169463e 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h @@ -140,18 +140,11 @@ struct vlan_dev_info { struct proc_dir_entry *dent; /* Holds the proc data */ unsigned long cnt_inc_headroom_on_tx; /* How many times did we have to grow the skb on TX. */ unsigned long cnt_encap_on_xmit; /* How many times did we have to encapsulate the skb on TX. */ - struct net_device_stats dev_stats; /* Device stats (rx-bytes, tx-pkts, etc...) */ }; #define VLAN_DEV_INFO(x) ((struct vlan_dev_info *)(x->priv)) /* inline functions */ - -static inline struct net_device_stats *vlan_dev_get_stats(struct net_device *dev) -{ - return &(VLAN_DEV_INFO(dev)->dev_stats); -} - static inline __u32 vlan_get_ingress_priority(struct net_device *dev, unsigned short vlan_tag) { @@ -196,7 +189,7 @@ static inline int __vlan_hwaccel_rx(struct sk_buff *skb, skb->dev->last_rx = jiffies; - stats = vlan_dev_get_stats(skb->dev); + stats = &skb->dev->stats; stats->rx_packets++; stats->rx_bytes += skb->len; diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index af2525569424..54f234696411 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -366,8 +366,6 @@ void vlan_setup(struct net_device *new_dev) * the global list. * iflink is set as well. */ - new_dev->get_stats = vlan_dev_get_stats; - /* Make this thing known as a VLAN device */ new_dev->priv_flags |= IFF_802_1Q_VLAN; diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 4f99bb86af5c..9543e9182796 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -174,7 +174,7 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, skb->dev->last_rx = jiffies; /* Bump the rx counters for the VLAN device. */ - stats = vlan_dev_get_stats(skb->dev); + stats = &skb->dev->stats; stats->rx_packets++; stats->rx_bytes += skb->len; @@ -422,7 +422,7 @@ int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, skb = skb_realloc_headroom(sk_tmp, dev->hard_header_len); kfree_skb(sk_tmp); if (skb == NULL) { - struct net_device_stats *stats = vlan_dev_get_stats(vdev); + struct net_device_stats *stats = &vdev->stats; stats->tx_dropped++; return -ENOMEM; } @@ -453,7 +453,7 @@ int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { - struct net_device_stats *stats = vlan_dev_get_stats(dev); + struct net_device_stats *stats = &dev->stats; struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data); /* Handle non-VLAN frames if they are sent to us, for example by DHCP. @@ -514,7 +514,7 @@ int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) int vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { - struct net_device_stats *stats = vlan_dev_get_stats(dev); + struct net_device_stats *stats = &dev->stats; unsigned short veth_TCI; /* Construct the second two bytes. This field looks something diff --git a/net/8021q/vlanproc.c b/net/8021q/vlanproc.c index 6cefdf8e381a..1972d5cc34e4 100644 --- a/net/8021q/vlanproc.c +++ b/net/8021q/vlanproc.c @@ -316,7 +316,7 @@ static int vlandev_seq_show(struct seq_file *seq, void *offset) { struct net_device *vlandev = (struct net_device *) seq->private; const struct vlan_dev_info *dev_info = VLAN_DEV_INFO(vlandev); - struct net_device_stats *stats; + struct net_device_stats *stats = &vlandev->stats; static const char fmt[] = "%30s %12lu\n"; int i; @@ -327,9 +327,6 @@ static int vlandev_seq_show(struct seq_file *seq, void *offset) vlandev->name, dev_info->vlan_id, (int)(dev_info->flags & 1), vlandev->priv_flags); - - stats = vlan_dev_get_stats(vlandev); - seq_printf(seq, fmt, "total frames received", stats->rx_packets); seq_printf(seq, fmt, "total bytes received", stats->rx_bytes); seq_printf(seq, fmt, "Broadcast/Multicast Rcvd", stats->multicast); -- cgit v1.2.3 From ef3eb3e59bd5723895b2349edec98998198ef5bb Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:22:11 -0800 Subject: [VLAN]: Move device setup to vlan_dev.c Move device setup to vlan_dev.c and make all the VLAN device methods static. Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- net/8021q/vlan.c | 81 ----------------------------------------- net/8021q/vlan.h | 13 ------- net/8021q/vlan_dev.c | 100 +++++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 86 insertions(+), 108 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 54f234696411..8bc6385a06ee 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -307,87 +307,6 @@ int unregister_vlan_device(struct net_device *dev) return ret; } -/* - * vlan network devices have devices nesting below it, and are a special - * "super class" of normal network devices; split their locks off into a - * separate class since they always nest. - */ -static struct lock_class_key vlan_netdev_xmit_lock_key; - -static const struct header_ops vlan_header_ops = { - .create = vlan_dev_hard_header, - .rebuild = vlan_dev_rebuild_header, - .parse = eth_header_parse, -}; - -static int vlan_dev_init(struct net_device *dev) -{ - struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; - int subclass = 0; - - /* IFF_BROADCAST|IFF_MULTICAST; ??? */ - dev->flags = real_dev->flags & ~IFF_UP; - dev->iflink = real_dev->ifindex; - dev->state = (real_dev->state & ((1<<__LINK_STATE_NOCARRIER) | - (1<<__LINK_STATE_DORMANT))) | - (1<<__LINK_STATE_PRESENT); - - /* ipv6 shared card related stuff */ - dev->dev_id = real_dev->dev_id; - - if (is_zero_ether_addr(dev->dev_addr)) - memcpy(dev->dev_addr, real_dev->dev_addr, dev->addr_len); - if (is_zero_ether_addr(dev->broadcast)) - memcpy(dev->broadcast, real_dev->broadcast, dev->addr_len); - - if (real_dev->features & NETIF_F_HW_VLAN_TX) { - dev->header_ops = real_dev->header_ops; - dev->hard_header_len = real_dev->hard_header_len; - dev->hard_start_xmit = vlan_dev_hwaccel_hard_start_xmit; - } else { - dev->header_ops = &vlan_header_ops; - dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN; - dev->hard_start_xmit = vlan_dev_hard_start_xmit; - } - - if (real_dev->priv_flags & IFF_802_1Q_VLAN) - subclass = 1; - - lockdep_set_class_and_subclass(&dev->_xmit_lock, - &vlan_netdev_xmit_lock_key, subclass); - return 0; -} - -void vlan_setup(struct net_device *new_dev) -{ - ether_setup(new_dev); - - /* new_dev->ifindex = 0; it will be set when added to - * the global list. - * iflink is set as well. - */ - /* Make this thing known as a VLAN device */ - new_dev->priv_flags |= IFF_802_1Q_VLAN; - - /* Set us up to have no queue, as the underlying Hardware device - * can do all the queueing we could want. - */ - new_dev->tx_queue_len = 0; - - /* set up method calls */ - new_dev->change_mtu = vlan_dev_change_mtu; - new_dev->init = vlan_dev_init; - new_dev->open = vlan_dev_open; - new_dev->stop = vlan_dev_stop; - new_dev->set_mac_address = vlan_set_mac_address; - new_dev->set_multicast_list = vlan_dev_set_multicast_list; - new_dev->change_rx_flags = vlan_change_rx_flags; - new_dev->destructor = free_netdev; - new_dev->do_ioctl = vlan_dev_ioctl; - - memset(new_dev->broadcast, 0, ETH_ALEN); -} - static void vlan_transfer_operstate(const struct net_device *dev, struct net_device *vlandev) { /* Have to respect userspace enforced dormant state diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h index 2cd1393073ec..7b615d6b6f46 100644 --- a/net/8021q/vlan.h +++ b/net/8021q/vlan.h @@ -49,19 +49,8 @@ struct net_device *__find_vlan_dev(struct net_device* real_dev, unsigned short VID); /* vlan.c */ /* found in vlan_dev.c */ -int vlan_dev_rebuild_header(struct sk_buff *skb); int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *ptype, struct net_device *orig_dev); -int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, - unsigned short type, const void *daddr, - const void *saddr, unsigned len); -int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev); -int vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb, struct net_device *dev); -int vlan_dev_change_mtu(struct net_device *dev, int new_mtu); -int vlan_dev_open(struct net_device* dev); -int vlan_dev_stop(struct net_device* dev); -int vlan_set_mac_address(struct net_device *dev, void *p); -int vlan_dev_ioctl(struct net_device* dev, struct ifreq *ifr, int cmd); void vlan_dev_set_ingress_priority(const struct net_device *dev, u32 skb_prio, short vlan_prio); int vlan_dev_set_egress_priority(const struct net_device *dev, @@ -70,8 +59,6 @@ int vlan_dev_set_vlan_flag(const struct net_device *dev, u32 flag, short flag_val); void vlan_dev_get_realdev_name(const struct net_device *dev, char *result); void vlan_dev_get_vid(const struct net_device *dev, unsigned short *result); -void vlan_change_rx_flags(struct net_device *dev, int change); -void vlan_dev_set_multicast_list(struct net_device *vlan_dev); int vlan_check_real_dev(struct net_device *real_dev, unsigned short vlan_id); void vlan_setup(struct net_device *dev); diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 9543e9182796..51ce4217c039 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -47,7 +47,7 @@ * * TODO: This needs a checkup, I'm ignorant here. --BLG */ -int vlan_dev_rebuild_header(struct sk_buff *skb) +static int vlan_dev_rebuild_header(struct sk_buff *skb) { struct net_device *dev = skb->dev; struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data); @@ -342,9 +342,10 @@ static inline unsigned short vlan_dev_get_egress_qos_mask(struct net_device* dev * This is called when the SKB is moving down the stack towards the * physical devices. */ -int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, - unsigned short type, - const void *daddr, const void *saddr, unsigned len) +static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, + unsigned short type, + const void *daddr, const void *saddr, + unsigned int len) { struct vlan_hdr *vhdr; unsigned short veth_TCI = 0; @@ -451,7 +452,7 @@ int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, return rc; } -int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +static int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct net_device_stats *stats = &dev->stats; struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data); @@ -512,7 +513,8 @@ int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) return 0; } -int vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +static int vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb, + struct net_device *dev) { struct net_device_stats *stats = &dev->stats; unsigned short veth_TCI; @@ -536,7 +538,7 @@ int vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb, struct net_device *dev return 0; } -int vlan_dev_change_mtu(struct net_device *dev, int new_mtu) +static int vlan_dev_change_mtu(struct net_device *dev, int new_mtu) { /* TODO: gotta make sure the underlying layer can handle it, * maybe an IFF_VLAN_CAPABLE flag for devices? @@ -626,7 +628,7 @@ void vlan_dev_get_vid(const struct net_device *dev, unsigned short *result) *result = VLAN_DEV_INFO(dev)->vlan_id; } -int vlan_dev_open(struct net_device *dev) +static int vlan_dev_open(struct net_device *dev) { struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); struct net_device *real_dev = vlan->real_dev; @@ -650,7 +652,7 @@ int vlan_dev_open(struct net_device *dev) return 0; } -int vlan_dev_stop(struct net_device *dev) +static int vlan_dev_stop(struct net_device *dev) { struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; @@ -666,7 +668,7 @@ int vlan_dev_stop(struct net_device *dev) return 0; } -int vlan_set_mac_address(struct net_device *dev, void *p) +static int vlan_dev_set_mac_address(struct net_device *dev, void *p) { struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; struct sockaddr *addr = p; @@ -692,7 +694,7 @@ out: return 0; } -int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) +static int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; struct ifreq ifrr; @@ -716,7 +718,7 @@ int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) return err; } -void vlan_change_rx_flags(struct net_device *dev, int change) +static void vlan_dev_change_rx_flags(struct net_device *dev, int change) { struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; @@ -726,8 +728,78 @@ void vlan_change_rx_flags(struct net_device *dev, int change) dev_set_promiscuity(real_dev, dev->flags & IFF_PROMISC ? 1 : -1); } -/** Taken from Gleb + Lennert's VLAN code, and modified... */ -void vlan_dev_set_multicast_list(struct net_device *vlan_dev) +static void vlan_dev_set_multicast_list(struct net_device *vlan_dev) { dev_mc_sync(VLAN_DEV_INFO(vlan_dev)->real_dev, vlan_dev); } + +/* + * vlan network devices have devices nesting below it, and are a special + * "super class" of normal network devices; split their locks off into a + * separate class since they always nest. + */ +static struct lock_class_key vlan_netdev_xmit_lock_key; + +static const struct header_ops vlan_header_ops = { + .create = vlan_dev_hard_header, + .rebuild = vlan_dev_rebuild_header, + .parse = eth_header_parse, +}; + +static int vlan_dev_init(struct net_device *dev) +{ + struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; + int subclass = 0; + + /* IFF_BROADCAST|IFF_MULTICAST; ??? */ + dev->flags = real_dev->flags & ~IFF_UP; + dev->iflink = real_dev->ifindex; + dev->state = (real_dev->state & ((1<<__LINK_STATE_NOCARRIER) | + (1<<__LINK_STATE_DORMANT))) | + (1<<__LINK_STATE_PRESENT); + + /* ipv6 shared card related stuff */ + dev->dev_id = real_dev->dev_id; + + if (is_zero_ether_addr(dev->dev_addr)) + memcpy(dev->dev_addr, real_dev->dev_addr, dev->addr_len); + if (is_zero_ether_addr(dev->broadcast)) + memcpy(dev->broadcast, real_dev->broadcast, dev->addr_len); + + if (real_dev->features & NETIF_F_HW_VLAN_TX) { + dev->header_ops = real_dev->header_ops; + dev->hard_header_len = real_dev->hard_header_len; + dev->hard_start_xmit = vlan_dev_hwaccel_hard_start_xmit; + } else { + dev->header_ops = &vlan_header_ops; + dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN; + dev->hard_start_xmit = vlan_dev_hard_start_xmit; + } + + if (real_dev->priv_flags & IFF_802_1Q_VLAN) + subclass = 1; + + lockdep_set_class_and_subclass(&dev->_xmit_lock, + &vlan_netdev_xmit_lock_key, subclass); + return 0; +} + +void vlan_setup(struct net_device *dev) +{ + ether_setup(dev); + + dev->priv_flags |= IFF_802_1Q_VLAN; + dev->tx_queue_len = 0; + + dev->change_mtu = vlan_dev_change_mtu; + dev->init = vlan_dev_init; + dev->open = vlan_dev_open; + dev->stop = vlan_dev_stop; + dev->set_mac_address = vlan_dev_set_mac_address; + dev->set_multicast_list = vlan_dev_set_multicast_list; + dev->change_rx_flags = vlan_dev_change_rx_flags; + dev->do_ioctl = vlan_dev_ioctl; + dev->destructor = free_netdev; + + memset(dev->broadcast, 0, ETH_ALEN); +} -- cgit v1.2.3 From 40f98e1af4c6082f7f98391540a2a1ade030480a Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:24:30 -0800 Subject: [VLAN]: Clean up debugging and printks - use pr_* functions and common prefix for non-device related messages - remove VLAN_ printk levels - kill lots of useless debugging statements - remove a few unnecessary printks like for double VID registration (already returns -EEXIST) and kill of a number of unnecessary checks in vlan_proc_{add,rem}_dev() that are already performed by the caller Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- net/8021q/vlan.c | 58 ++++++++++------------------------------------------ net/8021q/vlan.h | 25 ---------------------- net/8021q/vlan_dev.c | 56 +++++++++++++++++--------------------------------- net/8021q/vlanproc.c | 29 -------------------------- 4 files changed, 30 insertions(+), 138 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 8bc6385a06ee..6edd1919d183 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -80,16 +80,13 @@ static int __init vlan_proto_init(void) { int err; - printk(VLAN_INF "%s v%s %s\n", - vlan_fullname, vlan_version, vlan_copyright); - printk(VLAN_INF "All bugs added by %s\n", - vlan_buggyright); + pr_info("%s v%s %s\n", vlan_fullname, vlan_version, vlan_copyright); + pr_info("All bugs added by %s\n", vlan_buggyright); /* proc file system initialization */ err = vlan_proc_init(); if (err < 0) { - printk(KERN_ERR - "%s: can't create entry in proc filesystem!\n", + pr_err("%s: can't create entry in proc filesystem!\n", __FUNCTION__); return err; } @@ -233,10 +230,6 @@ static int unregister_vlan_dev(struct net_device *real_dev, struct vlan_group *grp; int i, ret; -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: VID: %i\n", __FUNCTION__, vlan_id); -#endif - /* sanity check */ if (vlan_id >= VLAN_VID_MASK) return -EINVAL; @@ -329,23 +322,22 @@ static void vlan_transfer_operstate(const struct net_device *dev, struct net_dev int vlan_check_real_dev(struct net_device *real_dev, unsigned short vlan_id) { + char *name = real_dev->name; + if (real_dev->features & NETIF_F_VLAN_CHALLENGED) { - printk(VLAN_DBG "%s: VLANs not supported on %s.\n", - __FUNCTION__, real_dev->name); + pr_info("8021q: VLANs not supported on %s\n", name); return -EOPNOTSUPP; } if ((real_dev->features & NETIF_F_HW_VLAN_RX) && !real_dev->vlan_rx_register) { - printk(VLAN_DBG "%s: Device %s has buggy VLAN hw accel.\n", - __FUNCTION__, real_dev->name); + pr_info("8021q: device %s has buggy VLAN hw accel\n", name); return -EOPNOTSUPP; } if ((real_dev->features & NETIF_F_HW_VLAN_FILTER) && (!real_dev->vlan_rx_add_vid || !real_dev->vlan_rx_kill_vid)) { - printk(VLAN_DBG "%s: Device %s has buggy VLAN hw accel.\n", - __FUNCTION__, real_dev->name); + pr_info("8021q: Device %s has buggy VLAN hw accel\n", name); return -EOPNOTSUPP; } @@ -355,11 +347,8 @@ int vlan_check_real_dev(struct net_device *real_dev, unsigned short vlan_id) if (!(real_dev->flags & IFF_UP)) return -ENETDOWN; - if (__find_vlan_dev(real_dev, vlan_id) != NULL) { - /* was already registered. */ - printk(VLAN_DBG "%s: ALREADY had VLAN registered\n", __FUNCTION__); + if (__find_vlan_dev(real_dev, vlan_id) != NULL) return -EEXIST; - } return 0; } @@ -399,8 +388,8 @@ int register_vlan_dev(struct net_device *dev) real_dev->vlan_rx_add_vid(real_dev, vlan_id); if (vlan_proc_add_dev(dev) < 0) - printk(KERN_WARNING "VLAN: failed to add proc entry for %s\n", - dev->name); + pr_warning("8021q: failed to add proc entry for %s\n", + dev->name); return 0; out_free_group: @@ -419,11 +408,6 @@ static int register_vlan_device(struct net_device *real_dev, char name[IFNAMSIZ]; int err; -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: if_name -:%s:- vid: %i\n", - __FUNCTION__, eth_IF_name, VLAN_ID); -#endif - if (VLAN_ID >= VLAN_VID_MASK) return -ERANGE; @@ -432,10 +416,6 @@ static int register_vlan_device(struct net_device *real_dev, return err; /* Gotta set up the fields for the device. */ -#ifdef VLAN_DEBUG - printk(VLAN_DBG "About to allocate name, vlan_name_type: %i\n", - vlan_name_type); -#endif switch (vlan_name_type) { case VLAN_NAME_TYPE_RAW_PLUS_VID: /* name will look like: eth1.0005 */ @@ -472,13 +452,6 @@ static int register_vlan_device(struct net_device *real_dev, */ new_dev->mtu = real_dev->mtu; -#ifdef VLAN_DEBUG - printk(VLAN_DBG "Allocated new name -:%s:-\n", new_dev->name); - VLAN_MEM_DBG("new_dev->priv malloc, addr: %p size: %i\n", - new_dev->priv, - sizeof(struct vlan_dev_info)); -#endif - VLAN_DEV_INFO(new_dev)->vlan_id = VLAN_ID; /* 1 through VLAN_VID_MASK */ VLAN_DEV_INFO(new_dev)->real_dev = real_dev; VLAN_DEV_INFO(new_dev)->dent = NULL; @@ -489,9 +462,6 @@ static int register_vlan_device(struct net_device *real_dev, if (err < 0) goto out_free_newdev; -#ifdef VLAN_DEBUG - printk(VLAN_DBG "Allocated new device successfully, returning.\n"); -#endif return 0; out_free_newdev: @@ -641,10 +611,6 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg) args.device1[23] = 0; args.u.device2[23] = 0; -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: args.cmd: %x\n", __FUNCTION__, args.cmd); -#endif - rtnl_lock(); switch (args.cmd) { @@ -763,8 +729,6 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg) default: /* pass on to underlying device instead?? */ - printk(VLAN_DBG "%s: Unknown VLAN CMD: %x \n", - __FUNCTION__, args.cmd); err = -EINVAL; break; } diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h index 7b615d6b6f46..56378651cc46 100644 --- a/net/8021q/vlan.h +++ b/net/8021q/vlan.h @@ -3,31 +3,6 @@ #include -/* Uncomment this if you want debug traces to be shown. */ -/* #define VLAN_DEBUG */ - -#define VLAN_ERR KERN_ERR -#define VLAN_INF KERN_INFO -#define VLAN_DBG KERN_ALERT /* change these... to debug, having a hard time - * changing the log level at run-time..for some reason. - */ - -/* - -These I use for memory debugging. I feared a leak at one time, but -I never found it..and the problem seems to have dissappeared. Still, -I'll bet they might prove useful again... --Ben - - -#define VLAN_MEM_DBG(x, y, z) printk(VLAN_DBG "%s: " x, __FUNCTION__, y, z); -#define VLAN_FMEM_DBG(x, y) printk(VLAN_DBG "%s: " x, __FUNCTION__, y); -*/ - -/* This way they don't do anything! */ -#define VLAN_MEM_DBG(x, y, z) -#define VLAN_FMEM_DBG(x, y) - - extern unsigned short vlan_name_type; #define VLAN_GRP_HASH_SHIFT 5 diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 50d8edcbb897..756a71c1f4a5 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -60,9 +60,8 @@ static int vlan_dev_rebuild_header(struct sk_buff *skb) return arp_find(veth->h_dest, skb); #endif default: - printk(VLAN_DBG - "%s: unable to resolve type %X addresses.\n", - dev->name, ntohs(veth->h_vlan_encapsulated_proto)); + pr_debug("%s: unable to resolve type %X addresses.\n", + dev->name, ntohs(veth->h_vlan_encapsulated_proto)); memcpy(veth->h_source, dev->dev_addr, ETH_ALEN); break; @@ -142,11 +141,6 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, vid = (vlan_TCI & VLAN_VID_MASK); -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: skb: %p vlan_id: %hx\n", - __FUNCTION__, skb, vid); -#endif - /* Ok, we will find the correct VLAN device, strip the header, * and then go on as usual. */ @@ -162,11 +156,8 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, skb->dev = __find_vlan_dev(dev, vid); if (!skb->dev) { rcu_read_unlock(); - -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: ERROR: No net_device for VID: %i on dev: %s [%i]\n", - __FUNCTION__, (unsigned int)(vid), dev->name, dev->ifindex); -#endif + pr_debug("%s: ERROR: No net_device for VID: %u on dev: %s [%i]\n", + __FUNCTION__, (unsigned int)vid, dev->name, dev->ifindex); kfree_skb(skb); return -1; } @@ -186,11 +177,8 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, */ skb->priority = vlan_get_ingress_priority(skb->dev, ntohs(vhdr->h_vlan_TCI)); -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: priority: %lu for TCI: %hu (hbo)\n", - __FUNCTION__, (unsigned long)(skb->priority), - ntohs(vhdr->h_vlan_TCI)); -#endif + pr_debug("%s: priority: %u for TCI: %hu\n", + __FUNCTION__, skb->priority, ntohs(vhdr->h_vlan_TCI)); /* The ethernet driver already did the pkt_type calculations * for us... @@ -335,10 +323,8 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, int build_vlan_header = 0; struct net_device *vdev = dev; /* save this for the bottom of the method */ -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: skb: %p type: %hx len: %x vlan_id: %hx, daddr: %p\n", - __FUNCTION__, skb, type, len, VLAN_DEV_INFO(dev)->vlan_id, daddr); -#endif + pr_debug("%s: skb: %p type: %hx len: %u vlan_id: %hx, daddr: %p\n", + __FUNCTION__, skb, type, len, VLAN_DEV_INFO(dev)->vlan_id, daddr); /* build vlan header only if re_order_header flag is NOT set. This * fixes some programs that get confused when they see a VLAN device @@ -410,9 +396,7 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, return -ENOMEM; } VLAN_DEV_INFO(vdev)->cnt_inc_headroom_on_tx++; -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: %s: had to grow skb.\n", __FUNCTION__, vdev->name); -#endif + pr_debug("%s: %s: had to grow skb.\n", __FUNCTION__, vdev->name); } if (build_vlan_header) { @@ -453,10 +437,8 @@ static int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) /* This is not a VLAN frame...but we can fix that! */ VLAN_DEV_INFO(dev)->cnt_encap_on_xmit++; -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: proto to encap: 0x%hx (hbo)\n", - __FUNCTION__, htons(veth->h_vlan_proto)); -#endif + pr_debug("%s: proto to encap: 0x%hx\n", + __FUNCTION__, htons(veth->h_vlan_proto)); /* Construct the second two bytes. This field looks something * like: * usr_priority: 3 bits (high bits) @@ -477,14 +459,15 @@ static int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) } } -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: about to send skb: %p to dev: %s\n", + pr_debug("%s: about to send skb: %p to dev: %s\n", __FUNCTION__, skb, skb->dev->name); - printk(VLAN_DBG " %2hx.%2hx.%2hx.%2xh.%2hx.%2hx %2hx.%2hx.%2hx.%2hx.%2hx.%2hx %4hx %4hx %4hx\n", - veth->h_dest[0], veth->h_dest[1], veth->h_dest[2], veth->h_dest[3], veth->h_dest[4], veth->h_dest[5], - veth->h_source[0], veth->h_source[1], veth->h_source[2], veth->h_source[3], veth->h_source[4], veth->h_source[5], - veth->h_vlan_proto, veth->h_vlan_TCI, veth->h_vlan_encapsulated_proto); -#endif + pr_debug(" " MAC_FMT " " MAC_FMT " %4hx %4hx %4hx\n", + veth->h_dest[0], veth->h_dest[1], veth->h_dest[2], + veth->h_dest[3], veth->h_dest[4], veth->h_dest[5], + veth->h_source[0], veth->h_source[1], veth->h_source[2], + veth->h_source[3], veth->h_source[4], veth->h_source[5], + veth->h_vlan_proto, veth->h_vlan_TCI, + veth->h_vlan_encapsulated_proto); stats->tx_packets++; /* for statics only */ stats->tx_bytes += skb->len; @@ -596,7 +579,6 @@ int vlan_dev_set_vlan_flag(const struct net_device *dev, } return 0; } - printk(KERN_ERR "%s: flag %i is not valid.\n", __FUNCTION__, flag); return -EINVAL; } diff --git a/net/8021q/vlanproc.c b/net/8021q/vlanproc.c index 1972d5cc34e4..5da02e29a2c6 100644 --- a/net/8021q/vlanproc.c +++ b/net/8021q/vlanproc.c @@ -179,13 +179,6 @@ int vlan_proc_add_dev (struct net_device *vlandev) { struct vlan_dev_info *dev_info = VLAN_DEV_INFO(vlandev); - if (!(vlandev->priv_flags & IFF_802_1Q_VLAN)) { - printk(KERN_ERR - "ERROR: vlan_proc_add, device -:%s:- is NOT a VLAN\n", - vlandev->name); - return -EINVAL; - } - dev_info->dent = create_proc_entry(vlandev->name, S_IFREG|S_IRUSR|S_IWUSR, proc_vlan_dir); @@ -194,11 +187,6 @@ int vlan_proc_add_dev (struct net_device *vlandev) dev_info->dent->proc_fops = &vlandev_fops; dev_info->dent->data = vlandev; - -#ifdef VLAN_DEBUG - printk(KERN_ERR "vlan_proc_add, device -:%s:- being added.\n", - vlandev->name); -#endif return 0; } @@ -207,28 +195,11 @@ int vlan_proc_add_dev (struct net_device *vlandev) */ int vlan_proc_rem_dev(struct net_device *vlandev) { - if (!vlandev) { - printk(VLAN_ERR "%s: invalid argument: %p\n", - __FUNCTION__, vlandev); - return -EINVAL; - } - - if (!(vlandev->priv_flags & IFF_802_1Q_VLAN)) { - printk(VLAN_DBG "%s: invalid argument, device: %s is not a VLAN device, priv_flags: 0x%4hX.\n", - __FUNCTION__, vlandev->name, vlandev->priv_flags); - return -EINVAL; - } - -#ifdef VLAN_DEBUG - printk(VLAN_DBG "%s: dev: %p\n", __FUNCTION__, vlandev); -#endif - /** NOTE: This will consume the memory pointed to by dent, it seems. */ if (VLAN_DEV_INFO(vlandev)->dent) { remove_proc_entry(VLAN_DEV_INFO(vlandev)->dent->name, proc_vlan_dir); VLAN_DEV_INFO(vlandev)->dent = NULL; } - return 0; } -- cgit v1.2.3 From 198a291ce3a9103f4738600e3cf5416b66e009d9 Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:24:59 -0800 Subject: [VLAN]: Remove non-implemented ioctls The GET_VLAN_INGRESS_PRIORITY_CMD/GET_VLAN_EGRESS_PRIORITY_CMD ioctls are not implemented and won't be, new functionality will be added to the netlink interface. Remove the code and make the ioctl handler return -EOPNOTSUPP for unknown commands instead of -EINVAL. Also remove a comment about passing unknown commands to the underlying device, that doesn't make any sense since its a VLAN specific ioctl and if its not implemented here, its implemented nowhere. Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- net/8021q/vlan.c | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 6edd1919d183..69a9e0207b13 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -688,26 +688,6 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg) err = unregister_vlan_device(dev); break; - case GET_VLAN_INGRESS_PRIORITY_CMD: - /* TODO: Implement - err = vlan_dev_get_ingress_priority(args); - if (copy_to_user((void*)arg, &args, - sizeof(struct vlan_ioctl_args))) { - err = -EFAULT; - } - */ - err = -EINVAL; - break; - case GET_VLAN_EGRESS_PRIORITY_CMD: - /* TODO: Implement - err = vlan_dev_get_egress_priority(args.device1, &(args.args); - if (copy_to_user((void*)arg, &args, - sizeof(struct vlan_ioctl_args))) { - err = -EFAULT; - } - */ - err = -EINVAL; - break; case GET_VLAN_REALDEV_NAME_CMD: err = 0; vlan_dev_get_realdev_name(dev, args.u.device2); @@ -728,8 +708,7 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg) break; default: - /* pass on to underlying device instead?? */ - err = -EINVAL; + err = -EOPNOTSUPP; break; } out: -- cgit v1.2.3 From 69ab4b7d6db68396dbfa827daa8d6f30f9b546a8 Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:25:15 -0800 Subject: [VLAN]: Clean up initialization code - move module init/exit functions to end of file, remove some now unnecessary forward declarations - remove some obvious comments - clean up proc init function and move a proc-related printk there Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- net/8021q/vlan.c | 141 +++++++++++++++++++++------------------------------ net/8021q/vlanproc.c | 21 ++++---- 2 files changed, 70 insertions(+), 92 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 69a9e0207b13..006d9a9bac90 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -50,16 +50,6 @@ static char vlan_version[] = DRV_VERSION; static char vlan_copyright[] = "Ben Greear "; static char vlan_buggyright[] = "David S. Miller "; -static int vlan_device_event(struct notifier_block *, unsigned long, void *); -static int vlan_ioctl_handler(struct net *net, void __user *); -static int unregister_vlan_dev(struct net_device *, unsigned short ); - -static struct notifier_block vlan_notifier_block = { - .notifier_call = vlan_device_event, -}; - -/* These may be changed at run-time through IOCTLs */ - /* Determines interface naming scheme. */ unsigned short vlan_name_type = VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD; @@ -70,79 +60,6 @@ static struct packet_type vlan_packet_type = { /* End of global variables definitions. */ -/* - * Function vlan_proto_init (pro) - * - * Initialize VLAN protocol layer, - * - */ -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); - - /* proc file system initialization */ - err = vlan_proc_init(); - if (err < 0) { - pr_err("%s: can't create entry in proc filesystem!\n", - __FUNCTION__); - return err; - } - - dev_add_pack(&vlan_packet_type); - - /* Register us to receive netdevice events */ - err = register_netdevice_notifier(&vlan_notifier_block); - if (err < 0) - goto err1; - - err = vlan_netlink_init(); - if (err < 0) - goto err2; - - vlan_ioctl_set(vlan_ioctl_handler); - return 0; - -err2: - unregister_netdevice_notifier(&vlan_notifier_block); -err1: - vlan_proc_cleanup(); - dev_remove_pack(&vlan_packet_type); - return err; -} - -/* - * Module 'remove' entry point. - * o delete /proc/net/router directory and static entries. - */ -static void __exit vlan_cleanup_module(void) -{ - int i; - - vlan_ioctl_set(NULL); - vlan_netlink_fini(); - - /* Un-register us from receiving netdevice events */ - unregister_netdevice_notifier(&vlan_notifier_block); - - dev_remove_pack(&vlan_packet_type); - - /* This table must be empty if there are no module - * references left. - */ - for (i = 0; i < VLAN_GRP_HASH_SIZE; i++) { - BUG_ON(!hlist_empty(&vlan_group_hash[i])); - } - vlan_proc_cleanup(); - - synchronize_net(); -} - -module_init(vlan_proto_init); -module_exit(vlan_cleanup_module); - /* Must be invoked with RCU read lock (no preempt) */ static struct vlan_group *__vlan_find_group(int real_dev_ifindex) { @@ -592,6 +509,10 @@ out: return NOTIFY_DONE; } +static struct notifier_block vlan_notifier_block __read_mostly = { + .notifier_call = vlan_device_event, +}; + /* * VLAN IOCTL handler. * o execute requested action or pass command to the device driver @@ -716,5 +637,59 @@ out: return err; } +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 = vlan_proc_init(); + if (err < 0) + goto err1; + + err = register_netdevice_notifier(&vlan_notifier_block); + if (err < 0) + goto err2; + + err = vlan_netlink_init(); + if (err < 0) + goto err3; + + dev_add_pack(&vlan_packet_type); + vlan_ioctl_set(vlan_ioctl_handler); + return 0; + +err3: + unregister_netdevice_notifier(&vlan_notifier_block); +err2: + vlan_proc_cleanup(); +err1: + return err; +} + +static void __exit vlan_cleanup_module(void) +{ + unsigned int i; + + vlan_ioctl_set(NULL); + vlan_netlink_fini(); + + unregister_netdevice_notifier(&vlan_notifier_block); + + dev_remove_pack(&vlan_packet_type); + + /* This table must be empty if there are no module references left. */ + for (i = 0; i < VLAN_GRP_HASH_SIZE; i++) + BUG_ON(!hlist_empty(&vlan_group_hash[i])); + + vlan_proc_cleanup(); + + synchronize_net(); +} + +module_init(vlan_proto_init); +module_exit(vlan_cleanup_module); + MODULE_LICENSE("GPL"); MODULE_VERSION(DRV_VERSION); diff --git a/net/8021q/vlanproc.c b/net/8021q/vlanproc.c index 5da02e29a2c6..971e6233801e 100644 --- a/net/8021q/vlanproc.c +++ b/net/8021q/vlanproc.c @@ -158,15 +158,18 @@ void vlan_proc_cleanup(void) int __init vlan_proc_init(void) { proc_vlan_dir = proc_mkdir(name_root, init_net.proc_net); - if (proc_vlan_dir) { - proc_vlan_conf = create_proc_entry(name_conf, - S_IFREG|S_IRUSR|S_IWUSR, - proc_vlan_dir); - if (proc_vlan_conf) { - proc_vlan_conf->proc_fops = &vlan_fops; - return 0; - } - } + if (!proc_vlan_dir) + goto err; + + proc_vlan_conf = create_proc_entry(name_conf, S_IFREG|S_IRUSR|S_IWUSR, + proc_vlan_dir); + if (!proc_vlan_conf) + goto err; + proc_vlan_conf->proc_fops = &vlan_fops; + return 0; + +err: + pr_err("%s: can't create entry in proc filesystem!\n", __FUNCTION__); vlan_proc_cleanup(); return -ENOBUFS; } -- cgit v1.2.3 From acc5efbcd2a023c8801f2bba39971cf93812ce7c Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:25:31 -0800 Subject: [VLAN]: Clean up unregister_vlan_dev Save two levels of indentation by aborting on error conditions, remove unnecessary initialization to NULL and remove two obvious comments. Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- net/8021q/vlan.c | 72 +++++++++++++++++++++++++------------------------------- 1 file changed, 32 insertions(+), 40 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 006d9a9bac90..ad34e4a0326a 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -142,63 +142,55 @@ static void vlan_rcu_free(struct rcu_head *rcu) static int unregister_vlan_dev(struct net_device *real_dev, unsigned short vlan_id) { - struct net_device *dev = NULL; + struct net_device *dev; int real_dev_ifindex = real_dev->ifindex; struct vlan_group *grp; - int i, ret; + unsigned int i; + int ret; - /* sanity check */ if (vlan_id >= VLAN_VID_MASK) return -EINVAL; ASSERT_RTNL(); grp = __vlan_find_group(real_dev_ifindex); + if (!grp) + return -ENOENT; - ret = 0; - - if (grp) { - dev = vlan_group_get_device(grp, vlan_id); - if (dev) { - /* Remove proc entry */ - vlan_proc_rem_dev(dev); - - /* Take it out of our own structures, but be sure to - * interlock with HW accelerating devices or SW vlan - * input packet processing. - */ - if (real_dev->features & NETIF_F_HW_VLAN_FILTER) - real_dev->vlan_rx_kill_vid(real_dev, vlan_id); + dev = vlan_group_get_device(grp, vlan_id); + if (!dev) + return -ENOENT; - vlan_group_set_device(grp, vlan_id, NULL); - synchronize_net(); + vlan_proc_rem_dev(dev); + /* Take it out of our own structures, but be sure to interlock with + * HW accelerating devices or SW vlan input packet processing. + */ + if (real_dev->features & NETIF_F_HW_VLAN_FILTER) + real_dev->vlan_rx_kill_vid(real_dev, vlan_id); - /* Caller unregisters (and if necessary, puts) - * VLAN device, but we get rid of the reference to - * real_dev here. - */ - dev_put(real_dev); + vlan_group_set_device(grp, vlan_id, NULL); + synchronize_net(); - /* If the group is now empty, kill off the - * group. - */ - for (i = 0; i < VLAN_VID_MASK; i++) - if (vlan_group_get_device(grp, i)) - break; + /* Caller unregisters (and if necessary, puts) VLAN device, but we + * get rid of the reference to real_dev here. + */ + dev_put(real_dev); - if (i == VLAN_VID_MASK) { - if (real_dev->features & NETIF_F_HW_VLAN_RX) - real_dev->vlan_rx_register(real_dev, NULL); + /* If the group is now empty, kill off the group. */ + ret = 0; + for (i = 0; i < VLAN_VID_MASK; i++) + if (vlan_group_get_device(grp, i)) + break; - hlist_del_rcu(&grp->hlist); + if (i == VLAN_VID_MASK) { + if (real_dev->features & NETIF_F_HW_VLAN_RX) + real_dev->vlan_rx_register(real_dev, NULL); - /* Free the group, after all cpu's are done. */ - call_rcu(&grp->rcu, vlan_rcu_free); + hlist_del_rcu(&grp->hlist); - grp = NULL; - ret = 1; - } - } + /* Free the group, after all cpu's are done. */ + call_rcu(&grp->rcu, vlan_rcu_free); + ret = 1; } return ret; -- cgit v1.2.3 From af30151709bcace1ca844d4bb8b7e2e392ff81eb Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:25:50 -0800 Subject: [VLAN]: Simplify vlan unregistration Keep track of the number of VLAN devices in a vlan group. This allows to have the caller sense when the group is going to be destroyed and stop using it, which in turn allows to remove the wrapper around unregister_vlan_dev for the NETDEV_UNREGISTER notifier and avoid iterating over all possible VLAN ids whenever a device in unregistered. Also fix what looks like a use-after-free (but is actually safe since we're holding the RTNL), the real_dev reference should not be dropped while we still use it. Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- include/linux/if_vlan.h | 1 + net/8021q/vlan.c | 76 +++++++++++++----------------------------------- net/8021q/vlan.h | 2 +- net/8021q/vlan_netlink.c | 7 +---- 4 files changed, 23 insertions(+), 63 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index 07db4169463e..129fa876dbe4 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h @@ -82,6 +82,7 @@ extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *)); struct vlan_group { int real_dev_ifindex; /* The ifindex of the ethernet(like) device the vlan is attached to. */ + unsigned int nr_vlans; struct hlist_node hlist; /* linked list */ struct net_device **vlan_devices_arrays[VLAN_GROUP_ARRAY_SPLIT_PARTS]; struct rcu_head rcu; diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index ad34e4a0326a..ac7963854103 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -132,33 +132,17 @@ static void vlan_rcu_free(struct rcu_head *rcu) vlan_group_free(container_of(rcu, struct vlan_group, rcu)); } - -/* This returns 0 if everything went fine. - * It will return 1 if the group was killed as a result. - * A negative return indicates failure. - * - * The RTNL lock must be held. - */ -static int unregister_vlan_dev(struct net_device *real_dev, - unsigned short vlan_id) +void unregister_vlan_dev(struct net_device *dev) { - struct net_device *dev; - int real_dev_ifindex = real_dev->ifindex; + struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); + struct net_device *real_dev = vlan->real_dev; struct vlan_group *grp; - unsigned int i; - int ret; - - if (vlan_id >= VLAN_VID_MASK) - return -EINVAL; + unsigned short vlan_id = vlan->vlan_id; ASSERT_RTNL(); - grp = __vlan_find_group(real_dev_ifindex); - if (!grp) - return -ENOENT; - dev = vlan_group_get_device(grp, vlan_id); - if (!dev) - return -ENOENT; + grp = __vlan_find_group(real_dev->ifindex); + BUG_ON(!grp); vlan_proc_rem_dev(dev); @@ -169,20 +153,12 @@ static int unregister_vlan_dev(struct net_device *real_dev, real_dev->vlan_rx_kill_vid(real_dev, vlan_id); vlan_group_set_device(grp, vlan_id, NULL); - synchronize_net(); + grp->nr_vlans--; - /* Caller unregisters (and if necessary, puts) VLAN device, but we - * get rid of the reference to real_dev here. - */ - dev_put(real_dev); + synchronize_net(); /* If the group is now empty, kill off the group. */ - ret = 0; - for (i = 0; i < VLAN_VID_MASK; i++) - if (vlan_group_get_device(grp, i)) - break; - - if (i == VLAN_VID_MASK) { + if (grp->nr_vlans == 0) { if (real_dev->features & NETIF_F_HW_VLAN_RX) real_dev->vlan_rx_register(real_dev, NULL); @@ -190,23 +166,12 @@ static int unregister_vlan_dev(struct net_device *real_dev, /* Free the group, after all cpu's are done. */ call_rcu(&grp->rcu, vlan_rcu_free); - ret = 1; } - return ret; -} - -int unregister_vlan_device(struct net_device *dev) -{ - int ret; + /* Get rid of the vlan's reference to real_dev */ + dev_put(real_dev); - ret = unregister_vlan_dev(VLAN_DEV_INFO(dev)->real_dev, - VLAN_DEV_INFO(dev)->vlan_id); unregister_netdevice(dev); - - if (ret == 1) - ret = 0; - return ret; } static void vlan_transfer_operstate(const struct net_device *dev, struct net_device *vlandev) @@ -291,6 +256,8 @@ int register_vlan_dev(struct net_device *dev) * it into our local structure. */ vlan_group_set_device(grp, vlan_id, dev); + grp->nr_vlans++; + if (ngrp && real_dev->features & NETIF_F_HW_VLAN_RX) real_dev->vlan_rx_register(real_dev, ngrp); if (real_dev->features & NETIF_F_HW_VLAN_FILTER) @@ -479,20 +446,16 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, case NETDEV_UNREGISTER: /* Delete all VLANs for this dev. */ for (i = 0; i < VLAN_GROUP_ARRAY_LEN; i++) { - int ret; - vlandev = vlan_group_get_device(grp, i); if (!vlandev) continue; - ret = unregister_vlan_dev(dev, - VLAN_DEV_INFO(vlandev)->vlan_id); - - unregister_netdevice(vlandev); + /* unregistration of last vlan destroys group, abort + * afterwards */ + if (grp->nr_vlans == 1) + i = VLAN_GROUP_ARRAY_LEN; - /* Group was destroyed? */ - if (ret == 1) - break; + unregister_vlan_dev(vlandev); } break; } @@ -598,7 +561,8 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg) err = -EPERM; if (!capable(CAP_NET_ADMIN)) break; - err = unregister_vlan_device(dev); + unregister_vlan_dev(dev); + err = 0; break; case GET_VLAN_REALDEV_NAME_CMD: diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h index 56378651cc46..0cfdf77b497c 100644 --- a/net/8021q/vlan.h +++ b/net/8021q/vlan.h @@ -38,7 +38,7 @@ void vlan_dev_get_vid(const struct net_device *dev, unsigned short *result); int vlan_check_real_dev(struct net_device *real_dev, unsigned short vlan_id); void vlan_setup(struct net_device *dev); int register_vlan_dev(struct net_device *dev); -int unregister_vlan_device(struct net_device *dev); +void unregister_vlan_dev(struct net_device *dev); int vlan_netlink_init(void); void vlan_netlink_fini(void); diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c index 0996185e2ed5..9ee63583ed27 100644 --- a/net/8021q/vlan_netlink.c +++ b/net/8021q/vlan_netlink.c @@ -137,11 +137,6 @@ static int vlan_newlink(struct net_device *dev, return register_vlan_dev(dev); } -static void vlan_dellink(struct net_device *dev) -{ - unregister_vlan_device(dev); -} - static inline size_t vlan_qos_map_size(unsigned int n) { if (n == 0) @@ -226,7 +221,7 @@ struct rtnl_link_ops vlan_link_ops __read_mostly = { .validate = vlan_validate, .newlink = vlan_newlink, .changelink = vlan_changelink, - .dellink = vlan_dellink, + .dellink = unregister_vlan_dev, .get_size = vlan_get_size, .fill_info = vlan_fill_info, }; -- cgit v1.2.3 From 9dfebcc6479c55c001e4bb5fe7cc16b6799c43a7 Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:26:07 -0800 Subject: [VLAN]: Turn VLAN_DEV_INFO into inline function Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- drivers/net/cxgb3/l2t.c | 2 +- drivers/s390/net/qeth_main.c | 4 ++-- include/linux/if_vlan.h | 7 ++++-- net/8021q/vlan.c | 14 +++++------ net/8021q/vlan_dev.c | 56 ++++++++++++++++++++++---------------------- net/8021q/vlan_netlink.c | 10 ++++---- net/8021q/vlanproc.c | 12 +++++----- 7 files changed, 54 insertions(+), 51 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/drivers/net/cxgb3/l2t.c b/drivers/net/cxgb3/l2t.c index d660af74606e..17ed4c3527b7 100644 --- a/drivers/net/cxgb3/l2t.c +++ b/drivers/net/cxgb3/l2t.c @@ -337,7 +337,7 @@ struct l2t_entry *t3_l2t_get(struct t3cdev *cdev, struct neighbour *neigh, atomic_set(&e->refcnt, 1); neigh_replace(e, neigh); if (neigh->dev->priv_flags & IFF_802_1Q_VLAN) - e->vlan = VLAN_DEV_INFO(neigh->dev)->vlan_id; + e->vlan = vlan_dev_info(neigh->dev)->vlan_id; else e->vlan = VLAN_NONE; spin_unlock(&e->lock); diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index f1866a283850..62606ce26e55 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c @@ -3890,7 +3890,7 @@ qeth_verify_vlan_dev(struct net_device *dev, struct qeth_card *card) break; } } - if (rc && !(VLAN_DEV_INFO(dev)->real_dev->priv == (void *)card)) + if (rc && !(vlan_dev_info(dev)->real_dev->priv == (void *)card)) return 0; #endif @@ -3930,7 +3930,7 @@ qeth_get_card_from_dev(struct net_device *dev) card = (struct qeth_card *)dev->priv; else if (rc == QETH_VLAN_CARD) card = (struct qeth_card *) - VLAN_DEV_INFO(dev)->real_dev->priv; + vlan_dev_info(dev)->real_dev->priv; QETH_DBF_TEXT_(trace, 4, "%d", rc); return card ; diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index 129fa876dbe4..82c23522a46d 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h @@ -143,13 +143,16 @@ struct vlan_dev_info { unsigned long cnt_encap_on_xmit; /* How many times did we have to encapsulate the skb on TX. */ }; -#define VLAN_DEV_INFO(x) ((struct vlan_dev_info *)(x->priv)) +static inline struct vlan_dev_info *vlan_dev_info(const struct net_device *dev) +{ + return netdev_priv(dev); +} /* inline functions */ static inline __u32 vlan_get_ingress_priority(struct net_device *dev, unsigned short vlan_tag) { - struct vlan_dev_info *vip = VLAN_DEV_INFO(dev); + struct vlan_dev_info *vip = vlan_dev_info(dev); return vip->ingress_priority_map[(vlan_tag >> 13) & 0x7]; } diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index ac7963854103..d058c0ef3b6e 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -134,7 +134,7 @@ static void vlan_rcu_free(struct rcu_head *rcu) void unregister_vlan_dev(struct net_device *dev) { - struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); + struct vlan_dev_info *vlan = vlan_dev_info(dev); struct net_device *real_dev = vlan->real_dev; struct vlan_group *grp; unsigned short vlan_id = vlan->vlan_id; @@ -229,7 +229,7 @@ int vlan_check_real_dev(struct net_device *real_dev, unsigned short vlan_id) int register_vlan_dev(struct net_device *dev) { - struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); + struct vlan_dev_info *vlan = vlan_dev_info(dev); struct net_device *real_dev = vlan->real_dev; unsigned short vlan_id = vlan->vlan_id; struct vlan_group *grp, *ngrp = NULL; @@ -328,10 +328,10 @@ static int register_vlan_device(struct net_device *real_dev, */ new_dev->mtu = real_dev->mtu; - VLAN_DEV_INFO(new_dev)->vlan_id = VLAN_ID; /* 1 through VLAN_VID_MASK */ - VLAN_DEV_INFO(new_dev)->real_dev = real_dev; - VLAN_DEV_INFO(new_dev)->dent = NULL; - VLAN_DEV_INFO(new_dev)->flags = VLAN_FLAG_REORDER_HDR; + vlan_dev_info(new_dev)->vlan_id = VLAN_ID; /* 1 through VLAN_VID_MASK */ + vlan_dev_info(new_dev)->real_dev = real_dev; + vlan_dev_info(new_dev)->dent = NULL; + vlan_dev_info(new_dev)->flags = VLAN_FLAG_REORDER_HDR; new_dev->rtnl_link_ops = &vlan_link_ops; err = register_vlan_dev(new_dev); @@ -348,7 +348,7 @@ out_free_newdev: static void vlan_sync_address(struct net_device *dev, struct net_device *vlandev) { - struct vlan_dev_info *vlan = VLAN_DEV_INFO(vlandev); + struct vlan_dev_info *vlan = vlan_dev_info(vlandev); /* May be called without an actual change */ if (!compare_ether_addr(vlan->real_dev_addr, dev->dev_addr)) diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 756a71c1f4a5..a846559da85e 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -72,7 +72,7 @@ static int vlan_dev_rebuild_header(struct sk_buff *skb) static inline struct sk_buff *vlan_check_reorder_header(struct sk_buff *skb) { - if (VLAN_DEV_INFO(skb->dev)->flags & VLAN_FLAG_REORDER_HDR) { + if (vlan_dev_info(skb->dev)->flags & VLAN_FLAG_REORDER_HDR) { if (skb_shared(skb) || skb_cloned(skb)) { struct sk_buff *nskb = skb_copy(skb, GFP_ATOMIC); kfree_skb(skb); @@ -290,7 +290,7 @@ static inline unsigned short vlan_dev_get_egress_qos_mask(struct net_device* dev struct sk_buff* skb) { struct vlan_priority_tci_mapping *mp = - VLAN_DEV_INFO(dev)->egress_priority_map[(skb->priority & 0xF)]; + vlan_dev_info(dev)->egress_priority_map[(skb->priority & 0xF)]; while (mp) { if (mp->priority == skb->priority) { @@ -324,7 +324,7 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, struct net_device *vdev = dev; /* save this for the bottom of the method */ pr_debug("%s: skb: %p type: %hx len: %u vlan_id: %hx, daddr: %p\n", - __FUNCTION__, skb, type, len, VLAN_DEV_INFO(dev)->vlan_id, daddr); + __FUNCTION__, skb, type, len, vlan_dev_info(dev)->vlan_id, daddr); /* build vlan header only if re_order_header flag is NOT set. This * fixes some programs that get confused when they see a VLAN device @@ -334,7 +334,7 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, * header shuffling in the hard_start_xmit. Users can turn off this * REORDER behaviour with the vconfig tool. */ - if (!(VLAN_DEV_INFO(dev)->flags & VLAN_FLAG_REORDER_HDR)) + if (!(vlan_dev_info(dev)->flags & VLAN_FLAG_REORDER_HDR)) build_vlan_header = 1; if (build_vlan_header) { @@ -349,7 +349,7 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, * VLAN ID 12 bits (low bits) * */ - veth_TCI = VLAN_DEV_INFO(dev)->vlan_id; + veth_TCI = vlan_dev_info(dev)->vlan_id; veth_TCI |= vlan_dev_get_egress_qos_mask(dev, skb); vhdr->h_vlan_TCI = htons(veth_TCI); @@ -374,7 +374,7 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, if (saddr == NULL) saddr = dev->dev_addr; - dev = VLAN_DEV_INFO(dev)->real_dev; + dev = vlan_dev_info(dev)->real_dev; /* MPLS can send us skbuffs w/out enough space. This check will grow the * skb if it doesn't have enough headroom. Not a beautiful solution, so @@ -395,7 +395,7 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, stats->tx_dropped++; return -ENOMEM; } - VLAN_DEV_INFO(vdev)->cnt_inc_headroom_on_tx++; + vlan_dev_info(vdev)->cnt_inc_headroom_on_tx++; pr_debug("%s: %s: had to grow skb.\n", __FUNCTION__, vdev->name); } @@ -430,12 +430,12 @@ static int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) */ if (veth->h_vlan_proto != htons(ETH_P_8021Q) || - VLAN_DEV_INFO(dev)->flags & VLAN_FLAG_REORDER_HDR) { + vlan_dev_info(dev)->flags & VLAN_FLAG_REORDER_HDR) { int orig_headroom = skb_headroom(skb); unsigned short veth_TCI; /* This is not a VLAN frame...but we can fix that! */ - VLAN_DEV_INFO(dev)->cnt_encap_on_xmit++; + vlan_dev_info(dev)->cnt_encap_on_xmit++; pr_debug("%s: proto to encap: 0x%hx\n", __FUNCTION__, htons(veth->h_vlan_proto)); @@ -445,7 +445,7 @@ static int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) * CFI 1 bit * VLAN ID 12 bits (low bits) */ - veth_TCI = VLAN_DEV_INFO(dev)->vlan_id; + veth_TCI = vlan_dev_info(dev)->vlan_id; veth_TCI |= vlan_dev_get_egress_qos_mask(dev, skb); skb = __vlan_put_tag(skb, veth_TCI); @@ -455,7 +455,7 @@ static int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) } if (orig_headroom < VLAN_HLEN) { - VLAN_DEV_INFO(dev)->cnt_inc_headroom_on_tx++; + vlan_dev_info(dev)->cnt_inc_headroom_on_tx++; } } @@ -472,7 +472,7 @@ static int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) stats->tx_packets++; /* for statics only */ stats->tx_bytes += skb->len; - skb->dev = VLAN_DEV_INFO(dev)->real_dev; + skb->dev = vlan_dev_info(dev)->real_dev; dev_queue_xmit(skb); return 0; @@ -490,14 +490,14 @@ static int vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb, * CFI 1 bit * VLAN ID 12 bits (low bits) */ - veth_TCI = VLAN_DEV_INFO(dev)->vlan_id; + veth_TCI = vlan_dev_info(dev)->vlan_id; veth_TCI |= vlan_dev_get_egress_qos_mask(dev, skb); skb = __vlan_hwaccel_put_tag(skb, veth_TCI); stats->tx_packets++; stats->tx_bytes += skb->len; - skb->dev = VLAN_DEV_INFO(dev)->real_dev; + skb->dev = vlan_dev_info(dev)->real_dev; dev_queue_xmit(skb); return 0; @@ -508,7 +508,7 @@ static int vlan_dev_change_mtu(struct net_device *dev, int new_mtu) /* TODO: gotta make sure the underlying layer can handle it, * maybe an IFF_VLAN_CAPABLE flag for devices? */ - if (VLAN_DEV_INFO(dev)->real_dev->mtu < new_mtu) + if (vlan_dev_info(dev)->real_dev->mtu < new_mtu) return -ERANGE; dev->mtu = new_mtu; @@ -519,7 +519,7 @@ static int vlan_dev_change_mtu(struct net_device *dev, int new_mtu) void vlan_dev_set_ingress_priority(const struct net_device *dev, u32 skb_prio, short vlan_prio) { - struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); + struct vlan_dev_info *vlan = vlan_dev_info(dev); if (vlan->ingress_priority_map[vlan_prio & 0x7] && !skb_prio) vlan->nr_ingress_mappings--; @@ -532,7 +532,7 @@ void vlan_dev_set_ingress_priority(const struct net_device *dev, int vlan_dev_set_egress_priority(const struct net_device *dev, u32 skb_prio, short vlan_prio) { - struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); + struct vlan_dev_info *vlan = vlan_dev_info(dev); struct vlan_priority_tci_mapping *mp = NULL; struct vlan_priority_tci_mapping *np; u32 vlan_qos = (vlan_prio << 13) & 0xE000; @@ -573,9 +573,9 @@ int vlan_dev_set_vlan_flag(const struct net_device *dev, /* verify flag is supported */ if (flag == VLAN_FLAG_REORDER_HDR) { if (flag_val) { - VLAN_DEV_INFO(dev)->flags |= VLAN_FLAG_REORDER_HDR; + vlan_dev_info(dev)->flags |= VLAN_FLAG_REORDER_HDR; } else { - VLAN_DEV_INFO(dev)->flags &= ~VLAN_FLAG_REORDER_HDR; + vlan_dev_info(dev)->flags &= ~VLAN_FLAG_REORDER_HDR; } return 0; } @@ -584,17 +584,17 @@ int vlan_dev_set_vlan_flag(const struct net_device *dev, void vlan_dev_get_realdev_name(const struct net_device *dev, char *result) { - strncpy(result, VLAN_DEV_INFO(dev)->real_dev->name, 23); + strncpy(result, vlan_dev_info(dev)->real_dev->name, 23); } void vlan_dev_get_vid(const struct net_device *dev, unsigned short *result) { - *result = VLAN_DEV_INFO(dev)->vlan_id; + *result = vlan_dev_info(dev)->vlan_id; } static int vlan_dev_open(struct net_device *dev) { - struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); + struct vlan_dev_info *vlan = vlan_dev_info(dev); struct net_device *real_dev = vlan->real_dev; int err; @@ -618,7 +618,7 @@ static int vlan_dev_open(struct net_device *dev) static int vlan_dev_stop(struct net_device *dev) { - struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; + struct net_device *real_dev = vlan_dev_info(dev)->real_dev; dev_mc_unsync(real_dev, dev); if (dev->flags & IFF_ALLMULTI) @@ -634,7 +634,7 @@ static int vlan_dev_stop(struct net_device *dev) static int vlan_dev_set_mac_address(struct net_device *dev, void *p) { - struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; + struct net_device *real_dev = vlan_dev_info(dev)->real_dev; struct sockaddr *addr = p; int err; @@ -660,7 +660,7 @@ out: static int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { - struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; + struct net_device *real_dev = vlan_dev_info(dev)->real_dev; struct ifreq ifrr; int err = -EOPNOTSUPP; @@ -684,7 +684,7 @@ static int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) static void vlan_dev_change_rx_flags(struct net_device *dev, int change) { - struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; + struct net_device *real_dev = vlan_dev_info(dev)->real_dev; if (change & IFF_ALLMULTI) dev_set_allmulti(real_dev, dev->flags & IFF_ALLMULTI ? 1 : -1); @@ -694,7 +694,7 @@ static void vlan_dev_change_rx_flags(struct net_device *dev, int change) static void vlan_dev_set_multicast_list(struct net_device *vlan_dev) { - dev_mc_sync(VLAN_DEV_INFO(vlan_dev)->real_dev, vlan_dev); + dev_mc_sync(vlan_dev_info(vlan_dev)->real_dev, vlan_dev); } /* @@ -712,7 +712,7 @@ static const struct header_ops vlan_header_ops = { static int vlan_dev_init(struct net_device *dev) { - struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev; + struct net_device *real_dev = vlan_dev_info(dev)->real_dev; int subclass = 0; /* IFF_BROADCAST|IFF_MULTICAST; ??? */ diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c index 9ee63583ed27..e32eeb37987e 100644 --- a/net/8021q/vlan_netlink.c +++ b/net/8021q/vlan_netlink.c @@ -75,7 +75,7 @@ static int vlan_validate(struct nlattr *tb[], struct nlattr *data[]) static int vlan_changelink(struct net_device *dev, struct nlattr *tb[], struct nlattr *data[]) { - struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); + struct vlan_dev_info *vlan = vlan_dev_info(dev); struct ifla_vlan_flags *flags; struct ifla_vlan_qos_mapping *m; struct nlattr *attr; @@ -104,7 +104,7 @@ static int vlan_changelink(struct net_device *dev, static int vlan_newlink(struct net_device *dev, struct nlattr *tb[], struct nlattr *data[]) { - struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); + struct vlan_dev_info *vlan = vlan_dev_info(dev); struct net_device *real_dev; int err; @@ -148,7 +148,7 @@ static inline size_t vlan_qos_map_size(unsigned int n) static size_t vlan_get_size(const struct net_device *dev) { - struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); + struct vlan_dev_info *vlan = vlan_dev_info(dev); return nla_total_size(2) + /* IFLA_VLAN_ID */ vlan_qos_map_size(vlan->nr_ingress_mappings) + @@ -157,14 +157,14 @@ static size_t vlan_get_size(const struct net_device *dev) static int vlan_fill_info(struct sk_buff *skb, const struct net_device *dev) { - struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); + struct vlan_dev_info *vlan = vlan_dev_info(dev); struct vlan_priority_tci_mapping *pm; struct ifla_vlan_flags f; struct ifla_vlan_qos_mapping m; struct nlattr *nest; unsigned int i; - NLA_PUT_U16(skb, IFLA_VLAN_ID, VLAN_DEV_INFO(dev)->vlan_id); + NLA_PUT_U16(skb, IFLA_VLAN_ID, vlan_dev_info(dev)->vlan_id); if (vlan->flags) { f.flags = vlan->flags; f.mask = ~0; diff --git a/net/8021q/vlanproc.c b/net/8021q/vlanproc.c index 971e6233801e..b5202443b1a1 100644 --- a/net/8021q/vlanproc.c +++ b/net/8021q/vlanproc.c @@ -180,7 +180,7 @@ err: int vlan_proc_add_dev (struct net_device *vlandev) { - struct vlan_dev_info *dev_info = VLAN_DEV_INFO(vlandev); + struct vlan_dev_info *dev_info = vlan_dev_info(vlandev); dev_info->dent = create_proc_entry(vlandev->name, S_IFREG|S_IRUSR|S_IWUSR, @@ -199,9 +199,9 @@ int vlan_proc_add_dev (struct net_device *vlandev) int vlan_proc_rem_dev(struct net_device *vlandev) { /** NOTE: This will consume the memory pointed to by dent, it seems. */ - if (VLAN_DEV_INFO(vlandev)->dent) { - remove_proc_entry(VLAN_DEV_INFO(vlandev)->dent->name, proc_vlan_dir); - VLAN_DEV_INFO(vlandev)->dent = NULL; + if (vlan_dev_info(vlandev)->dent) { + remove_proc_entry(vlan_dev_info(vlandev)->dent->name, proc_vlan_dir); + vlan_dev_info(vlandev)->dent = NULL; } return 0; } @@ -278,7 +278,7 @@ static int vlan_seq_show(struct seq_file *seq, void *v) nmtype ? nmtype : "UNKNOWN" ); } else { const struct net_device *vlandev = v; - const struct vlan_dev_info *dev_info = VLAN_DEV_INFO(vlandev); + const struct vlan_dev_info *dev_info = vlan_dev_info(vlandev); seq_printf(seq, "%-15s| %d | %s\n", vlandev->name, dev_info->vlan_id, dev_info->real_dev->name); @@ -289,7 +289,7 @@ static int vlan_seq_show(struct seq_file *seq, void *v) static int vlandev_seq_show(struct seq_file *seq, void *offset) { struct net_device *vlandev = (struct net_device *) seq->private; - const struct vlan_dev_info *dev_info = VLAN_DEV_INFO(vlandev); + const struct vlan_dev_info *dev_info = vlan_dev_info(vlandev); struct net_device_stats *stats = &vlandev->stats; static const char fmt[] = "%30s %12lu\n"; int i; -- cgit v1.2.3 From 2029cc2c84fb1169c80c6cf6fc375f11194ed8b5 Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:26:41 -0800 Subject: [VLAN]: checkpatch cleanups Checkpatch cleanups, consisting mainly of overly long lines and missing spaces. Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- net/8021q/vlan.c | 20 ++++++----- net/8021q/vlan.h | 2 +- net/8021q/vlan_dev.c | 98 ++++++++++++++++++++++++++-------------------------- net/8021q/vlanproc.c | 42 +++++++++++----------- net/8021q/vlanproc.h | 11 +++--- 5 files changed, 89 insertions(+), 84 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index d058c0ef3b6e..8b93799c6a0d 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -43,7 +43,6 @@ /* Our listing of VLAN group(s) */ static struct hlist_head vlan_group_hash[VLAN_GRP_HASH_SIZE]; -#define vlan_grp_hashfn(IDX) ((((IDX) >> VLAN_GRP_HASH_SHIFT) ^ (IDX)) & VLAN_GRP_HASH_MASK) static char vlan_fullname[] = "802.1Q VLAN Support"; static char vlan_version[] = DRV_VERSION; @@ -60,6 +59,11 @@ static struct packet_type vlan_packet_type = { /* End of global variables definitions. */ +static inline unsigned int vlan_grp_hashfn(unsigned int idx) +{ + return ((idx >> VLAN_GRP_HASH_SHIFT) ^ idx) & VLAN_GRP_HASH_MASK; +} + /* Must be invoked with RCU read lock (no preempt) */ static struct vlan_group *__vlan_find_group(int real_dev_ifindex) { @@ -94,7 +98,7 @@ static void vlan_group_free(struct vlan_group *grp) { int i; - for (i=0; i < VLAN_GROUP_ARRAY_SPLIT_PARTS; i++) + for (i = 0; i < VLAN_GROUP_ARRAY_SPLIT_PARTS; i++) kfree(grp->vlan_devices_arrays[i]); kfree(grp); } @@ -174,7 +178,8 @@ void unregister_vlan_dev(struct net_device *dev) unregister_netdevice(dev); } -static void vlan_transfer_operstate(const struct net_device *dev, struct net_device *vlandev) +static void vlan_transfer_operstate(const struct net_device *dev, + struct net_device *vlandev) { /* Have to respect userspace enforced dormant state * of real device, also must allow supplicant running @@ -369,7 +374,8 @@ static void vlan_sync_address(struct net_device *dev, memcpy(vlan->real_dev_addr, dev->dev_addr, ETH_ALEN); } -static int vlan_device_event(struct notifier_block *unused, unsigned long event, void *ptr) +static int vlan_device_event(struct notifier_block *unused, unsigned long event, + void *ptr) { struct net_device *dev = ptr; struct vlan_group *grp = __vlan_find_group(dev->ifindex); @@ -569,9 +575,8 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg) err = 0; vlan_dev_get_realdev_name(dev, args.u.device2); if (copy_to_user(arg, &args, - sizeof(struct vlan_ioctl_args))) { + sizeof(struct vlan_ioctl_args))) err = -EFAULT; - } break; case GET_VLAN_VID_CMD: @@ -579,9 +584,8 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg) vlan_dev_get_vid(dev, &vid); args.u.VID = vid; if (copy_to_user(arg, &args, - sizeof(struct vlan_ioctl_args))) { + sizeof(struct vlan_ioctl_args))) err = -EFAULT; - } break; default: diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h index 0cfdf77b497c..73efcc715ccb 100644 --- a/net/8021q/vlan.h +++ b/net/8021q/vlan.h @@ -20,7 +20,7 @@ extern unsigned short vlan_name_type; * Must be invoked with rcu_read_lock (ie preempt disabled) * or with RTNL. */ -struct net_device *__find_vlan_dev(struct net_device* real_dev, +struct net_device *__find_vlan_dev(struct net_device *real_dev, unsigned short VID); /* vlan.c */ /* found in vlan_dev.c */ diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index a846559da85e..2ff7659b5e5f 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -106,13 +106,13 @@ static inline struct sk_buff *vlan_check_reorder_header(struct sk_buff *skb) * SANITY NOTE 2: We are referencing to the VLAN_HDR frields, which MAY be * stored UNALIGNED in the memory. RISC systems don't like * such cases very much... - * SANITY NOTE 2a: According to Dave Miller & Alexey, it will always be aligned, - * so there doesn't need to be any of the unaligned stuff. It has - * been commented out now... --Ben + * SANITY NOTE 2a: According to Dave Miller & Alexey, it will always be + * aligned, so there doesn't need to be any of the unaligned + * stuff. It has been commented out now... --Ben * */ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, - struct packet_type* ptype, struct net_device *orig_dev) + struct packet_type *ptype, struct net_device *orig_dev) { unsigned char *rawp = NULL; struct vlan_hdr *vhdr; @@ -126,7 +126,8 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, return -1; } - if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) + skb = skb_share_check(skb, GFP_ATOMIC); + if (skb == NULL) return -1; if (unlikely(!pskb_may_pull(skb, VLAN_HLEN))) { @@ -156,8 +157,8 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, skb->dev = __find_vlan_dev(dev, vid); if (!skb->dev) { rcu_read_unlock(); - pr_debug("%s: ERROR: No net_device for VID: %u on dev: %s [%i]\n", - __FUNCTION__, (unsigned int)vid, dev->name, dev->ifindex); + pr_debug("%s: ERROR: No net_device for VID: %u on dev: %s\n", + __FUNCTION__, (unsigned int)vid, dev->name); kfree_skb(skb); return -1; } @@ -175,7 +176,8 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, /* * Deal with ingress priority mapping. */ - skb->priority = vlan_get_ingress_priority(skb->dev, ntohs(vhdr->h_vlan_TCI)); + skb->priority = vlan_get_ingress_priority(skb->dev, + ntohs(vhdr->h_vlan_TCI)); pr_debug("%s: priority: %u for TCI: %hu\n", __FUNCTION__, skb->priority, ntohs(vhdr->h_vlan_TCI)); @@ -185,7 +187,7 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, */ switch (skb->pkt_type) { case PACKET_BROADCAST: /* Yeah, stats collect these together.. */ - // stats->broadcast ++; // no such counter :-( + /* stats->broadcast ++; // no such counter :-( */ break; case PACKET_MULTICAST: @@ -194,13 +196,13 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, case PACKET_OTHERHOST: /* Our lower layer thinks this is not local, let's make sure. - * This allows the VLAN to have a different MAC than the underlying - * device, and still route correctly. + * This allows the VLAN to have a different MAC than the + * underlying device, and still route correctly. */ - if (!compare_ether_addr(eth_hdr(skb)->h_dest, skb->dev->dev_addr)) { + if (!compare_ether_addr(eth_hdr(skb)->h_dest, + skb->dev->dev_addr)) /* It is for our (changed) MAC-address! */ skb->pkt_type = PACKET_HOST; - } break; default: break; @@ -244,8 +246,8 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, */ if (*(unsigned short *)rawp == 0xFFFF) { skb->protocol = htons(ETH_P_802_3); - /* place it back on the queue to be handled by true layer 3 protocols. - */ + /* place it back on the queue to be handled by true layer 3 + * protocols. */ /* See if we are configured to re-write the VLAN header * to make it look like ethernet... @@ -286,17 +288,17 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, return 0; } -static inline unsigned short vlan_dev_get_egress_qos_mask(struct net_device* dev, - struct sk_buff* skb) +static inline unsigned short +vlan_dev_get_egress_qos_mask(struct net_device *dev, struct sk_buff *skb) { - struct vlan_priority_tci_mapping *mp = - vlan_dev_info(dev)->egress_priority_map[(skb->priority & 0xF)]; + struct vlan_priority_tci_mapping *mp; + mp = vlan_dev_info(dev)->egress_priority_map[(skb->priority & 0xF)]; while (mp) { if (mp->priority == skb->priority) { - return mp->vlan_qos; /* This should already be shifted to mask - * correctly with the VLAN's TCI - */ + return mp->vlan_qos; /* This should already be shifted + * to mask correctly with the + * VLAN's TCI */ } mp = mp->next; } @@ -321,10 +323,11 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, unsigned short veth_TCI = 0; int rc = 0; int build_vlan_header = 0; - struct net_device *vdev = dev; /* save this for the bottom of the method */ + struct net_device *vdev = dev; pr_debug("%s: skb: %p type: %hx len: %u vlan_id: %hx, daddr: %p\n", - __FUNCTION__, skb, type, len, vlan_dev_info(dev)->vlan_id, daddr); + __FUNCTION__, skb, type, len, vlan_dev_info(dev)->vlan_id, + daddr); /* build vlan header only if re_order_header flag is NOT set. This * fixes some programs that get confused when they see a VLAN device @@ -342,8 +345,8 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, /* build the four bytes that make this a VLAN header. */ - /* Now, construct the second two bytes. This field looks something - * like: + /* Now, construct the second two bytes. This field looks + * something like: * usr_priority: 3 bits (high bits) * CFI 1 bit * VLAN ID 12 bits (low bits) @@ -355,16 +358,15 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, vhdr->h_vlan_TCI = htons(veth_TCI); /* - * Set the protocol type. - * For a packet of type ETH_P_802_3 we put the length in here instead. - * It is up to the 802.2 layer to carry protocol information. + * Set the protocol type. For a packet of type ETH_P_802_3 we + * put the length in here instead. It is up to the 802.2 + * layer to carry protocol information. */ - if (type != ETH_P_802_3) { + if (type != ETH_P_802_3) vhdr->h_vlan_encapsulated_proto = htons(type); - } else { + else vhdr->h_vlan_encapsulated_proto = htons(len); - } skb->protocol = htons(ETH_P_8021Q); skb_reset_network_header(skb); @@ -376,14 +378,14 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, dev = vlan_dev_info(dev)->real_dev; - /* MPLS can send us skbuffs w/out enough space. This check will grow the - * skb if it doesn't have enough headroom. Not a beautiful solution, so - * I'll tick a counter so that users can know it's happening... If they - * care... + /* MPLS can send us skbuffs w/out enough space. This check will grow + * the skb if it doesn't have enough headroom. Not a beautiful solution, + * so I'll tick a counter so that users can know it's happening... + * If they care... */ - /* NOTE: This may still break if the underlying device is not the final - * device (and thus there are more headers to add...) It should work for + /* NOTE: This may still break if the underlying device is not the final + * device (and thus there are more headers to add...) It should work for * good-ole-ethernet though. */ if (skb_headroom(skb) < dev->hard_header_len) { @@ -396,7 +398,7 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, return -ENOMEM; } vlan_dev_info(vdev)->cnt_inc_headroom_on_tx++; - pr_debug("%s: %s: had to grow skb.\n", __FUNCTION__, vdev->name); + pr_debug("%s: %s: had to grow skb\n", __FUNCTION__, vdev->name); } if (build_vlan_header) { @@ -408,10 +410,10 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, else if (rc < 0) rc -= VLAN_HLEN; } else - /* If here, then we'll just make a normal looking ethernet frame, - * but, the hard_start_xmit method will insert the tag (it has to - * be able to do this for bridged and other skbs that don't come - * down the protocol stack in an orderly manner. + /* If here, then we'll just make a normal looking ethernet + * frame, but, the hard_start_xmit method will insert the tag + * (it has to be able to do this for bridged and other skbs + * that don't come down the protocol stack in an orderly manner. */ rc = dev_hard_header(skb, dev, type, daddr, saddr, len); @@ -454,9 +456,8 @@ static int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) return 0; } - if (orig_headroom < VLAN_HLEN) { + if (orig_headroom < VLAN_HLEN) vlan_dev_info(dev)->cnt_inc_headroom_on_tx++; - } } pr_debug("%s: about to send skb: %p to dev: %s\n", @@ -572,11 +573,10 @@ int vlan_dev_set_vlan_flag(const struct net_device *dev, { /* verify flag is supported */ if (flag == VLAN_FLAG_REORDER_HDR) { - if (flag_val) { + if (flag_val) vlan_dev_info(dev)->flags |= VLAN_FLAG_REORDER_HDR; - } else { + else vlan_dev_info(dev)->flags &= ~VLAN_FLAG_REORDER_HDR; - } return 0; } return -EINVAL; @@ -667,7 +667,7 @@ static int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) strncpy(ifrr.ifr_name, real_dev->name, IFNAMSIZ); ifrr.ifr_ifru = ifr->ifr_ifru; - switch(cmd) { + switch (cmd) { case SIOCGMIIPHY: case SIOCGMIIREG: case SIOCSMIIREG: diff --git a/net/8021q/vlanproc.c b/net/8021q/vlanproc.c index b5202443b1a1..2a4e1aabb23b 100644 --- a/net/8021q/vlanproc.c +++ b/net/8021q/vlanproc.c @@ -125,10 +125,10 @@ static struct proc_dir_entry *proc_vlan_conf; /* Strings */ static const char *vlan_name_type_str[VLAN_NAME_TYPE_HIGHEST] = { - [VLAN_NAME_TYPE_RAW_PLUS_VID] = "VLAN_NAME_TYPE_RAW_PLUS_VID", - [VLAN_NAME_TYPE_PLUS_VID_NO_PAD] = "VLAN_NAME_TYPE_PLUS_VID_NO_PAD", - [VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD]= "VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD", - [VLAN_NAME_TYPE_PLUS_VID] = "VLAN_NAME_TYPE_PLUS_VID", + [VLAN_NAME_TYPE_RAW_PLUS_VID] = "VLAN_NAME_TYPE_RAW_PLUS_VID", + [VLAN_NAME_TYPE_PLUS_VID_NO_PAD] = "VLAN_NAME_TYPE_PLUS_VID_NO_PAD", + [VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD] = "VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD", + [VLAN_NAME_TYPE_PLUS_VID] = "VLAN_NAME_TYPE_PLUS_VID", }; /* * Interface functions @@ -178,7 +178,7 @@ err: * Add directory entry for VLAN device. */ -int vlan_proc_add_dev (struct net_device *vlandev) +int vlan_proc_add_dev(struct net_device *vlandev) { struct vlan_dev_info *dev_info = vlan_dev_info(vlandev); @@ -200,7 +200,8 @@ int vlan_proc_rem_dev(struct net_device *vlandev) { /** NOTE: This will consume the memory pointed to by dent, it seems. */ if (vlan_dev_info(vlandev)->dent) { - remove_proc_entry(vlan_dev_info(vlandev)->dent->name, proc_vlan_dir); + remove_proc_entry(vlan_dev_info(vlandev)->dent->name, + proc_vlan_dir); vlan_dev_info(vlandev)->dent = NULL; } return 0; @@ -275,7 +276,7 @@ static int vlan_seq_show(struct seq_file *seq, void *v) nmtype = vlan_name_type_str[vlan_name_type]; seq_printf(seq, "Name-Type: %s\n", - nmtype ? nmtype : "UNKNOWN" ); + nmtype ? nmtype : "UNKNOWN"); } else { const struct net_device *vlandev = v; const struct vlan_dev_info *dev_info = vlan_dev_info(vlandev); @@ -297,9 +298,10 @@ static int vlandev_seq_show(struct seq_file *seq, void *offset) if (!(vlandev->priv_flags & IFF_802_1Q_VLAN)) return 0; - seq_printf(seq, "%s VID: %d REORDER_HDR: %i dev->priv_flags: %hx\n", - vlandev->name, dev_info->vlan_id, - (int)(dev_info->flags & 1), vlandev->priv_flags); + seq_printf(seq, + "%s VID: %d REORDER_HDR: %i dev->priv_flags: %hx\n", + vlandev->name, dev_info->vlan_id, + (int)(dev_info->flags & 1), vlandev->priv_flags); seq_printf(seq, fmt, "total frames received", stats->rx_packets); seq_printf(seq, fmt, "total bytes received", stats->rx_bytes); @@ -313,16 +315,16 @@ static int vlandev_seq_show(struct seq_file *seq, void *offset) dev_info->cnt_encap_on_xmit); seq_printf(seq, "Device: %s", dev_info->real_dev->name); /* now show all PRIORITY mappings relating to this VLAN */ - seq_printf(seq, - "\nINGRESS priority mappings: 0:%u 1:%u 2:%u 3:%u 4:%u 5:%u 6:%u 7:%u\n", - dev_info->ingress_priority_map[0], - dev_info->ingress_priority_map[1], - dev_info->ingress_priority_map[2], - dev_info->ingress_priority_map[3], - dev_info->ingress_priority_map[4], - dev_info->ingress_priority_map[5], - dev_info->ingress_priority_map[6], - dev_info->ingress_priority_map[7]); + seq_printf(seq, "\nINGRESS priority mappings: " + "0:%u 1:%u 2:%u 3:%u 4:%u 5:%u 6:%u 7:%u\n", + dev_info->ingress_priority_map[0], + dev_info->ingress_priority_map[1], + dev_info->ingress_priority_map[2], + dev_info->ingress_priority_map[3], + dev_info->ingress_priority_map[4], + dev_info->ingress_priority_map[5], + dev_info->ingress_priority_map[6], + dev_info->ingress_priority_map[7]); seq_printf(seq, "EGRESSS priority Mappings: "); for (i = 0; i < 16; i++) { diff --git a/net/8021q/vlanproc.h b/net/8021q/vlanproc.h index f908ee332fd8..da542cacc5a5 100644 --- a/net/8021q/vlanproc.h +++ b/net/8021q/vlanproc.h @@ -4,16 +4,15 @@ #ifdef CONFIG_PROC_FS int vlan_proc_init(void); int vlan_proc_rem_dev(struct net_device *vlandev); -int vlan_proc_add_dev (struct net_device *vlandev); -void vlan_proc_cleanup (void); +int vlan_proc_add_dev(struct net_device *vlandev); +void vlan_proc_cleanup(void); #else /* No CONFIG_PROC_FS */ #define vlan_proc_init() (0) -#define vlan_proc_cleanup() do {} while(0) -#define vlan_proc_add_dev(dev) ({(void)(dev), 0;}) -#define vlan_proc_rem_dev(dev) ({(void)(dev), 0;}) - +#define vlan_proc_cleanup() do {} while (0) +#define vlan_proc_add_dev(dev) ({(void)(dev), 0; }) +#define vlan_proc_rem_dev(dev) ({(void)(dev), 0; }) #endif #endif /* !(__BEN_VLAN_PROC_INC__) */ -- cgit v1.2.3 From ad712087f78469a783281d0d15657edfbff69594 Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Mon, 21 Jan 2008 00:27:00 -0800 Subject: [VLAN]: Update list address VLAN related mail should go to netdev. Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- net/8021q/vlan.c | 2 +- net/8021q/vlan_dev.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'net/8021q/vlan.c') diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 8b93799c6a0d..dbc81b965096 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -3,7 +3,7 @@ * Ethernet-type device handling. * * Authors: Ben Greear - * Please send support related email to: vlan@scry.wanfear.com + * Please send support related email to: netdev@vger.kernel.org * VLAN Home Page: http://www.candelatech.com/~greear/vlan.html * * Fixes: diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 2ff7659b5e5f..e19e49184ae5 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -3,7 +3,7 @@ * Ethernet-type device handling. * * Authors: Ben Greear - * Please send support related email to: vlan@scry.wanfear.com + * Please send support related email to: netdev@vger.kernel.org * VLAN Home Page: http://www.candelatech.com/~greear/vlan.html * * Fixes: Mar 22 2001: Martin Bokaemper -- cgit v1.2.3