Re: [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/18/07, Denis Cheng <[email protected]> wrote:
- removed three function declarations from header file to mark them static,
- reduced one file

Signed-off-by: Denis Cheng <[email protected]>
---

this one is just merging by concatenating, and I'll try to adjust some
function definitions' order to make it more readable.

 include/linux/netdevice.h |    3 -
 net/core/Makefile         |    2 +-
 net/core/dev.c            |  239 +++++++++++++++++++++++++++++++++++++++++-
 net/core/dev_mcast.c      |  255 ---------------------------------------------
 4 files changed, 237 insertions(+), 262 deletions(-)
 delete mode 100644 net/core/dev_mcast.c

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 9820ca1..ca68c58 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1091,15 +1091,12 @@ extern int              register_netdev(struct net_device *dev);
 extern void            unregister_netdev(struct net_device *dev);
 /* Functions used for secondary unicast and multicast support */
 extern void            dev_set_rx_mode(struct net_device *dev);
-extern void            __dev_set_rx_mode(struct net_device *dev);
 extern int             dev_unicast_delete(struct net_device *dev, void *addr, int alen);
 extern int             dev_unicast_add(struct net_device *dev, void *addr, int alen);
 extern int             dev_mc_delete(struct net_device *dev, void *addr, int alen, int all);
 extern int             dev_mc_add(struct net_device *dev, void *addr, int alen, int newonly);
 extern int             dev_mc_sync(struct net_device *to, struct net_device *from);
 extern void            dev_mc_unsync(struct net_device *to, struct net_device *from);
-extern int             __dev_addr_delete(struct dev_addr_list **list, int *count, void *addr, int alen, int all);
-extern int             __dev_addr_add(struct dev_addr_list **list, int *count, void *addr, int alen, int newonly);
 extern void            dev_set_promiscuity(struct net_device *dev, int inc);
 extern void            dev_set_allmulti(struct net_device *dev, int inc);
 extern void            netdev_state_change(struct net_device *dev);
diff --git a/net/core/Makefile b/net/core/Makefile
index 4751613..54d28dd 100644
--- a/net/core/Makefile
+++ b/net/core/Makefile
@@ -7,7 +7,7 @@ obj-y := sock.o request_sock.o skbuff.o iovec.o datagram.o stream.o scm.o \

 obj-$(CONFIG_SYSCTL) += sysctl_net_core.o

-obj-y               += dev.o ethtool.o dev_mcast.o dst.o netevent.o \
+obj-y               += dev.o ethtool.o dst.o netevent.o \
                        neighbour.o rtnetlink.o utils.o link_watch.o filter.o

 obj-$(CONFIG_XFRM) += flow.o
diff --git a/net/core/dev.c b/net/core/dev.c
index 6357f54..16842af 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -18,6 +18,7 @@
  *             Alexey Kuznetsov <[email protected]>
  *             Adam Sulmicki <[email protected]>
  *              Pekka Riikonen <[email protected]>
+ *              Denis Cheng <[email protected]>
  *
  *     Changes:
  *              D.J. Barrow     :       Fixed bug where dev->refcnt gets set
@@ -70,6 +71,32 @@
  *                                     indefinitely on dev->refcnt
  *             J Hadi Salim    :       - Backlog queue sampling
  *                                     - netif_rx() feedback
+ *              Denis Cheng     :       Merge dev_mcast.c into it
+ */
+
+/*
+ *     The original information in dev_mcast.c:
+ *
+ *     Linux NET3:     Multicast List maintenance.
+ *
+ *     Authors:
+ *             Tim Kordas <[email protected]>
+ *             Richard Underwood <[email protected]>
+ *
+ *     Stir fried together from the IP multicast and CAP patches above
+ *             Alan Cox <[email protected]>
+ *
+ *     Fixes:
+ *             Alan Cox        :       Update the device on a real delete
+ *                                     rather than any time but...
+ *             Alan Cox        :       IFF_ALLMULTI support.
+ *             Alan Cox        :       New format set_multicast_list() calls.
+ *             Gleb Natapov    :       Remove dev_mc_lock.
+ *
+ *     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 <asm/uaccess.h>
@@ -2622,7 +2649,7 @@ void dev_set_allmulti(struct net_device *dev, int inc)
  *     filtering it is put in promiscous mode while unicast addresses
  *     are present.
  */
-void __dev_set_rx_mode(struct net_device *dev)
+static void __dev_set_rx_mode(struct net_device *dev)
 {
        /* dev_open will call this function so the list will stay sane. */
        if (!(dev->flags&IFF_UP))
@@ -2657,7 +2684,7 @@ void dev_set_rx_mode(struct net_device *dev)
        netif_tx_unlock_bh(dev);
 }

-int __dev_addr_delete(struct dev_addr_list **list, int *count,
+static int __dev_addr_delete(struct dev_addr_list **list, int *count,
                      void *addr, int alen, int glbl)
 {
        struct dev_addr_list *da;
@@ -2683,7 +2710,7 @@ int __dev_addr_delete(struct dev_addr_list **list, int *count,
        return -ENOENT;
 }

-int __dev_addr_add(struct dev_addr_list **list, int *count,
+static int __dev_addr_add(struct dev_addr_list **list, int *count,
                   void *addr, int alen, int glbl)
 {
        struct dev_addr_list *da;
@@ -4049,3 +4076,209 @@ EXPORT_SYMBOL(dev_load);
 #endif

 EXPORT_PER_CPU_SYMBOL(softnet_data);
+
+/*
+ *     Device multicast list maintenance.
+ *
+ *     This is used both by IP and by the user level maintenance functions.
+ *     Unlike BSD we maintain a usage count on a given multicast address so
+ *     that a casual user application can add/delete multicasts used by
+ *     protocols without doing damage to the protocols when it deletes the
+ *     entries. It also helps IP as it tracks overlapping maps.
+ *
+ *     Device mc lists are changed by bh at least if IPv6 is enabled,
+ *     so that it must be bh protected.
+ *
+ *     We block accesses to device mc filters with netif_tx_lock.
+ */
+
+/*
+ *     Delete a device level multicast
+ */
+
+int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl)
+{
+       int err;
+
+       netif_tx_lock_bh(dev);
+       err = __dev_addr_delete(&dev->mc_list, &dev->mc_count,
+                               addr, alen, glbl);
+       if (!err) {
+               /*
+                *      We have altered the list, so the card
+                *      loaded filter is now wrong. Fix it
+                */
+
+               __dev_set_rx_mode(dev);
+       }
+       netif_tx_unlock_bh(dev);
+       return err;
+}
+
+/*
+ *     Add a device level multicast
+ */
+
+int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl)
+{
+       int err;
+
+       netif_tx_lock_bh(dev);
+       err = __dev_addr_add(&dev->mc_list, &dev->mc_count, addr, alen, glbl);
+       if (!err)
+               __dev_set_rx_mode(dev);
+       netif_tx_unlock_bh(dev);
+       return err;
+}
+
+/**
+ *     dev_mc_sync     - Synchronize device's multicast list to another device
+ *     @to: destination device
+ *     @from: source device
+ *
+ *     Add newly added addresses to the destination device and release
+ *     addresses that have no users left. The source device must be
+ *     locked by netif_tx_lock_bh.
+ *
+ *     This function is intended to be called from the dev->set_multicast_list
+ *     function of layered software devices.
+ */
+int dev_mc_sync(struct net_device *to, struct net_device *from)
+{
+       struct dev_addr_list *da;
+       int err = 0;
+
+       netif_tx_lock_bh(to);
+       for (da = from->mc_list; da != NULL; da = da->next) {
+               if (!da->da_synced) {
+                       err = __dev_addr_add(&to->mc_list, &to->mc_count,
+                                            da->da_addr, da->da_addrlen, 0);
+                       if (err < 0)
+                               break;
+                       da->da_synced = 1;
+                       da->da_users++;
+               } else if (da->da_users == 1) {
+                       __dev_addr_delete(&to->mc_list, &to->mc_count,
+                                         da->da_addr, da->da_addrlen, 0);
+                       __dev_addr_delete(&from->mc_list, &from->mc_count,
+                                         da->da_addr, da->da_addrlen, 0);
+               }
+       }
+       if (!err)
+               __dev_set_rx_mode(to);
+       netif_tx_unlock_bh(to);
+
+       return err;
+}
+EXPORT_SYMBOL(dev_mc_sync);
+
+
+/**
+ *     dev_mc_unsync   - Remove synchronized addresses from the destination
+ *                       device
+ *     @to: destination device
+ *     @from: source device
+ *
+ *     Remove all addresses that were added to the destination device by
+ *     dev_mc_sync(). This function is intended to be called from the
+ *     dev->stop function of layered software devices.
+ */
+void dev_mc_unsync(struct net_device *to, struct net_device *from)
+{
+       struct dev_addr_list *da;
+
+       netif_tx_lock_bh(from);
+       netif_tx_lock_bh(to);
+
+       for (da = from->mc_list; da != NULL; da = da->next) {
+               if (!da->da_synced)
+                       continue;
+               __dev_addr_delete(&to->mc_list, &to->mc_count,
+                                 da->da_addr, da->da_addrlen, 0);
+               da->da_synced = 0;
+               __dev_addr_delete(&from->mc_list, &from->mc_count,
+                                 da->da_addr, da->da_addrlen, 0);
+       }
+       __dev_set_rx_mode(to);
+
+       netif_tx_unlock_bh(to);
+       netif_tx_unlock_bh(from);
+}
+EXPORT_SYMBOL(dev_mc_unsync);
+
+#ifdef CONFIG_PROC_FS
+static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos)
+{
+       struct net_device *dev;
+       loff_t off = 0;
+
+       read_lock(&dev_base_lock);
+       for_each_netdev(dev) {
+               if (off++ == *pos)
+                       return dev;
+       }
+       return NULL;
+}
+
+static void *dev_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos)
+{
+       ++*pos;
+       return next_net_device((struct net_device *)v);
+}
+
+static void dev_mc_seq_stop(struct seq_file *seq, void *v)
+{
+       read_unlock(&dev_base_lock);
+}
+
+
+static int dev_mc_seq_show(struct seq_file *seq, void *v)
+{
+       struct dev_addr_list *m;
+       struct net_device *dev = v;
+
+       netif_tx_lock_bh(dev);
+       for (m = dev->mc_list; m; m = m->next) {
+               int i;
+
+               seq_printf(seq, "%-4d %-15s %-5d %-5d ", dev->ifindex,
+                          dev->name, m->dmi_users, m->dmi_gusers);
+
+               for (i = 0; i < m->dmi_addrlen; i++)
+                       seq_printf(seq, "%02x", m->dmi_addr[i]);
+
+               seq_putc(seq, '\n');
+       }
+       netif_tx_unlock_bh(dev);
+       return 0;
+}
+
+static const struct seq_operations dev_mc_seq_ops = {
+       .start = dev_mc_seq_start,
+       .next  = dev_mc_seq_next,
+       .stop  = dev_mc_seq_stop,
+       .show  = dev_mc_seq_show,
+};
+
+static int dev_mc_seq_open(struct inode *inode, struct file *file)
+{
+       return seq_open(file, &dev_mc_seq_ops);
+}
+
+static const struct file_operations dev_mc_seq_fops = {
+       .owner   = THIS_MODULE,
+       .open    = dev_mc_seq_open,
+       .read    = seq_read,
+       .llseek  = seq_lseek,
+       .release = seq_release,
+};
+
+#endif
+
+void __init dev_mcast_init(void)
+{
+       proc_net_fops_create("dev_mcast", 0, &dev_mc_seq_fops);
+}
+
+EXPORT_SYMBOL(dev_mc_add);
+EXPORT_SYMBOL(dev_mc_delete);
diff --git a/net/core/dev_mcast.c b/net/core/dev_mcast.c
deleted file mode 100644
index 99aece1..0000000
--- a/net/core/dev_mcast.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- *     Linux NET3:     Multicast List maintenance.
- *
- *     Authors:
- *             Tim Kordas <[email protected]>
- *             Richard Underwood <[email protected]>
- *
- *     Stir fried together from the IP multicast and CAP patches above
- *             Alan Cox <[email protected]>
- *
- *     Fixes:
- *             Alan Cox        :       Update the device on a real delete
- *                                     rather than any time but...
- *             Alan Cox        :       IFF_ALLMULTI support.
- *             Alan Cox        :       New format set_multicast_list() calls.
- *             Gleb Natapov    :       Remove dev_mc_lock.
- *
- *     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/module.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-#include <linux/bitops.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/string.h>
-#include <linux/mm.h>
-#include <linux/socket.h>
-#include <linux/sockios.h>
-#include <linux/in.h>
-#include <linux/errno.h>
-#include <linux/interrupt.h>
-#include <linux/if_ether.h>
-#include <linux/inet.h>
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/proc_fs.h>
-#include <linux/seq_file.h>
-#include <linux/init.h>
-#include <net/ip.h>
-#include <net/route.h>
-#include <linux/skbuff.h>
-#include <net/sock.h>
-#include <net/arp.h>
-
-
-/*
- *     Device multicast list maintenance.
- *
- *     This is used both by IP and by the user level maintenance functions.
- *     Unlike BSD we maintain a usage count on a given multicast address so
- *     that a casual user application can add/delete multicasts used by
- *     protocols without doing damage to the protocols when it deletes the
- *     entries. It also helps IP as it tracks overlapping maps.
- *
- *     Device mc lists are changed by bh at least if IPv6 is enabled,
- *     so that it must be bh protected.
- *
- *     We block accesses to device mc filters with netif_tx_lock.
- */
-
-/*
- *     Delete a device level multicast
- */
-
-int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl)
-{
-       int err;
-
-       netif_tx_lock_bh(dev);
-       err = __dev_addr_delete(&dev->mc_list, &dev->mc_count,
-                               addr, alen, glbl);
-       if (!err) {
-               /*
-                *      We have altered the list, so the card
-                *      loaded filter is now wrong. Fix it
-                */
-
-               __dev_set_rx_mode(dev);
-       }
-       netif_tx_unlock_bh(dev);
-       return err;
-}
-
-/*
- *     Add a device level multicast
- */
-
-int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl)
-{
-       int err;
-
-       netif_tx_lock_bh(dev);
-       err = __dev_addr_add(&dev->mc_list, &dev->mc_count, addr, alen, glbl);
-       if (!err)
-               __dev_set_rx_mode(dev);
-       netif_tx_unlock_bh(dev);
-       return err;
-}
-
-/**
- *     dev_mc_sync     - Synchronize device's multicast list to another device
- *     @to: destination device
- *     @from: source device
- *
- *     Add newly added addresses to the destination device and release
- *     addresses that have no users left. The source device must be
- *     locked by netif_tx_lock_bh.
- *
- *     This function is intended to be called from the dev->set_multicast_list
- *     function of layered software devices.
- */
-int dev_mc_sync(struct net_device *to, struct net_device *from)
-{
-       struct dev_addr_list *da;
-       int err = 0;
-
-       netif_tx_lock_bh(to);
-       for (da = from->mc_list; da != NULL; da = da->next) {
-               if (!da->da_synced) {
-                       err = __dev_addr_add(&to->mc_list, &to->mc_count,
-                                            da->da_addr, da->da_addrlen, 0);
-                       if (err < 0)
-                               break;
-                       da->da_synced = 1;
-                       da->da_users++;
-               } else if (da->da_users == 1) {
-                       __dev_addr_delete(&to->mc_list, &to->mc_count,
-                                         da->da_addr, da->da_addrlen, 0);
-                       __dev_addr_delete(&from->mc_list, &from->mc_count,
-                                         da->da_addr, da->da_addrlen, 0);
-               }
-       }
-       if (!err)
-               __dev_set_rx_mode(to);
-       netif_tx_unlock_bh(to);
-
-       return err;
-}
-EXPORT_SYMBOL(dev_mc_sync);
-
-
-/**
- *     dev_mc_unsync   - Remove synchronized addresses from the destination
- *                       device
- *     @to: destination device
- *     @from: source device
- *
- *     Remove all addresses that were added to the destination device by
- *     dev_mc_sync(). This function is intended to be called from the
- *     dev->stop function of layered software devices.
- */
-void dev_mc_unsync(struct net_device *to, struct net_device *from)
-{
-       struct dev_addr_list *da;
-
-       netif_tx_lock_bh(from);
-       netif_tx_lock_bh(to);
-
-       for (da = from->mc_list; da != NULL; da = da->next) {
-               if (!da->da_synced)
-                       continue;
-               __dev_addr_delete(&to->mc_list, &to->mc_count,
-                                 da->da_addr, da->da_addrlen, 0);
-               da->da_synced = 0;
-               __dev_addr_delete(&from->mc_list, &from->mc_count,
-                                 da->da_addr, da->da_addrlen, 0);
-       }
-       __dev_set_rx_mode(to);
-
-       netif_tx_unlock_bh(to);
-       netif_tx_unlock_bh(from);
-}
-EXPORT_SYMBOL(dev_mc_unsync);
-
-#ifdef CONFIG_PROC_FS
-static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos)
-{
-       struct net_device *dev;
-       loff_t off = 0;
-
-       read_lock(&dev_base_lock);
-       for_each_netdev(dev) {
-               if (off++ == *pos)
-                       return dev;
-       }
-       return NULL;
-}
-
-static void *dev_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos)
-{
-       ++*pos;
-       return next_net_device((struct net_device *)v);
-}
-
-static void dev_mc_seq_stop(struct seq_file *seq, void *v)
-{
-       read_unlock(&dev_base_lock);
-}
-
-
-static int dev_mc_seq_show(struct seq_file *seq, void *v)
-{
-       struct dev_addr_list *m;
-       struct net_device *dev = v;
-
-       netif_tx_lock_bh(dev);
-       for (m = dev->mc_list; m; m = m->next) {
-               int i;
-
-               seq_printf(seq, "%-4d %-15s %-5d %-5d ", dev->ifindex,
-                          dev->name, m->dmi_users, m->dmi_gusers);
-
-               for (i = 0; i < m->dmi_addrlen; i++)
-                       seq_printf(seq, "%02x", m->dmi_addr[i]);
-
-               seq_putc(seq, '\n');
-       }
-       netif_tx_unlock_bh(dev);
-       return 0;
-}
-
-static const struct seq_operations dev_mc_seq_ops = {
-       .start = dev_mc_seq_start,
-       .next  = dev_mc_seq_next,
-       .stop  = dev_mc_seq_stop,
-       .show  = dev_mc_seq_show,
-};
-
-static int dev_mc_seq_open(struct inode *inode, struct file *file)
-{
-       return seq_open(file, &dev_mc_seq_ops);
-}
-
-static const struct file_operations dev_mc_seq_fops = {
-       .owner   = THIS_MODULE,
-       .open    = dev_mc_seq_open,
-       .read    = seq_read,
-       .llseek  = seq_lseek,
-       .release = seq_release,
-};
-
-#endif
-
-void __init dev_mcast_init(void)
-{
-       proc_net_fops_create("dev_mcast", 0, &dev_mc_seq_fops);
-}
-
-EXPORT_SYMBOL(dev_mc_add);
-EXPORT_SYMBOL(dev_mc_delete);
--
1.5.2.2
Is there any more comments on this?





--
Denis Cheng
Linux Application Developer

"One of my most productive days was throwing away 1000 lines of code."
- Ken Thompson.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux