blob: 8d9ddb09f2081076ab6fbbdf2c9c13f4f2e31beb [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * NET3 Protocol independent device support routines.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version
7 * 2 of the License, or (at your option) any later version.
8 *
9 * Derived from the non IP parts of dev.c 1.0.19
Jesper Juhl02c30a82005-05-05 16:16:16 -070010 * Authors: Ross Biro
Linus Torvalds1da177e2005-04-16 15:20:36 -070011 * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
12 * Mark Evans, <evansmp@uhura.aston.ac.uk>
13 *
14 * Additional Authors:
15 * Florian la Roche <rzsfl@rz.uni-sb.de>
16 * Alan Cox <gw4pts@gw4pts.ampr.org>
17 * David Hinds <dahinds@users.sourceforge.net>
18 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
19 * Adam Sulmicki <adam@cfar.umd.edu>
20 * Pekka Riikonen <priikone@poesidon.pspt.fi>
21 *
22 * Changes:
23 * D.J. Barrow : Fixed bug where dev->refcnt gets set
24 * to 2 if register_netdev gets called
25 * before net_dev_init & also removed a
26 * few lines of code in the process.
27 * Alan Cox : device private ioctl copies fields back.
28 * Alan Cox : Transmit queue code does relevant
29 * stunts to keep the queue safe.
30 * Alan Cox : Fixed double lock.
31 * Alan Cox : Fixed promisc NULL pointer trap
32 * ???????? : Support the full private ioctl range
33 * Alan Cox : Moved ioctl permission check into
34 * drivers
35 * Tim Kordas : SIOCADDMULTI/SIOCDELMULTI
36 * Alan Cox : 100 backlog just doesn't cut it when
37 * you start doing multicast video 8)
38 * Alan Cox : Rewrote net_bh and list manager.
39 * Alan Cox : Fix ETH_P_ALL echoback lengths.
40 * Alan Cox : Took out transmit every packet pass
41 * Saved a few bytes in the ioctl handler
42 * Alan Cox : Network driver sets packet type before
43 * calling netif_rx. Saves a function
44 * call a packet.
45 * Alan Cox : Hashed net_bh()
46 * Richard Kooijman: Timestamp fixes.
47 * Alan Cox : Wrong field in SIOCGIFDSTADDR
48 * Alan Cox : Device lock protection.
49 * Alan Cox : Fixed nasty side effect of device close
50 * changes.
51 * Rudi Cilibrasi : Pass the right thing to
52 * set_mac_address()
53 * Dave Miller : 32bit quantity for the device lock to
54 * make it work out on a Sparc.
55 * Bjorn Ekwall : Added KERNELD hack.
56 * Alan Cox : Cleaned up the backlog initialise.
57 * Craig Metz : SIOCGIFCONF fix if space for under
58 * 1 device.
59 * Thomas Bogendoerfer : Return ENODEV for dev_open, if there
60 * is no device open function.
61 * Andi Kleen : Fix error reporting for SIOCGIFCONF
62 * Michael Chastain : Fix signed/unsigned for SIOCGIFCONF
63 * Cyrus Durgin : Cleaned for KMOD
64 * Adam Sulmicki : Bug Fix : Network Device Unload
65 * A network device unload needs to purge
66 * the backlog queue.
67 * Paul Rusty Russell : SIOCSIFNAME
68 * Pekka Riikonen : Netdev boot-time settings code
69 * Andrew Morton : Make unregister_netdevice wait
70 * indefinitely on dev->refcnt
71 * J Hadi Salim : - Backlog queue sampling
72 * - netif_rx() feedback
73 */
74
75#include <asm/uaccess.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070076#include <linux/bitops.h>
Randy Dunlap4fc268d2006-01-11 12:17:47 -080077#include <linux/capability.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070078#include <linux/cpu.h>
79#include <linux/types.h>
80#include <linux/kernel.h>
stephen hemminger08e98972009-11-10 07:20:34 +000081#include <linux/hash.h>
Tejun Heo5a0e3ad2010-03-24 17:04:11 +090082#include <linux/slab.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070083#include <linux/sched.h>
Arjan van de Ven4a3e2f72006-03-20 22:33:17 -080084#include <linux/mutex.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070085#include <linux/string.h>
86#include <linux/mm.h>
87#include <linux/socket.h>
88#include <linux/sockios.h>
89#include <linux/errno.h>
90#include <linux/interrupt.h>
91#include <linux/if_ether.h>
92#include <linux/netdevice.h>
93#include <linux/etherdevice.h>
Ben Hutchings0187bdf2008-06-19 16:15:47 -070094#include <linux/ethtool.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070095#include <linux/notifier.h>
96#include <linux/skbuff.h>
Eric W. Biederman457c4cb2007-09-12 12:01:34 +020097#include <net/net_namespace.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070098#include <net/sock.h>
99#include <linux/rtnetlink.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -0700100#include <linux/stat.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -0700101#include <net/dst.h>
102#include <net/pkt_sched.h>
103#include <net/checksum.h>
Arnd Bergmann44540962009-11-26 06:07:08 +0000104#include <net/xfrm.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -0700105#include <linux/highmem.h>
106#include <linux/init.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -0700107#include <linux/module.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -0700108#include <linux/netpoll.h>
109#include <linux/rcupdate.h>
110#include <linux/delay.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -0700111#include <net/iw_handler.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -0700112#include <asm/current.h>
Steve Grubb5bdb9882005-12-03 08:39:35 -0500113#include <linux/audit.h>
Chris Leechdb217332006-06-17 21:24:58 -0700114#include <linux/dmaengine.h>
Herbert Xuf6a78bf2006-06-22 02:57:17 -0700115#include <linux/err.h>
David S. Millerc7fa9d12006-08-15 16:34:13 -0700116#include <linux/ctype.h>
Jarek Poplawski723e98b2007-05-15 22:46:18 -0700117#include <linux/if_arp.h>
Ben Hutchings6de329e2008-06-16 17:02:28 -0700118#include <linux/if_vlan.h>
David S. Miller8f0f2222008-07-15 03:47:03 -0700119#include <linux/ip.h>
Alexander Duyckad55dca2008-09-20 22:05:50 -0700120#include <net/ip.h>
David S. Miller8f0f2222008-07-15 03:47:03 -0700121#include <linux/ipv6.h>
122#include <linux/in.h>
David S. Millerb6b2fed2008-07-21 09:48:06 -0700123#include <linux/jhash.h>
124#include <linux/random.h>
David S. Miller9cbc1cb2009-06-15 03:02:23 -0700125#include <trace/events/napi.h>
Koki Sanagicf66ba52010-08-23 18:45:02 +0900126#include <trace/events/net.h>
Koki Sanagi07dc22e2010-08-23 18:46:12 +0900127#include <trace/events/skb.h>
FUJITA Tomonori5acbbd42010-03-30 22:35:50 +0000128#include <linux/pci.h>
Stephen Rothwellcaeda9b2010-09-16 21:39:16 -0700129#include <linux/inetdevice.h>
Ben Hutchingsc4454772011-01-19 11:03:53 +0000130#include <linux/cpu_rmap.h>
Ingo Molnarc5905af2012-02-24 08:31:31 +0100131#include <linux/static_key.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -0700132
Pavel Emelyanov342709e2007-10-23 21:14:45 -0700133#include "net-sysfs.h"
134
Herbert Xud565b0a2008-12-15 23:38:52 -0800135/* Instead of increasing this, you should create a hash table. */
136#define MAX_GRO_SKBS 8
137
Herbert Xu5d38a072009-01-04 16:13:40 -0800138/* This should be increased if a protocol with a bigger head is added. */
139#define GRO_MAX_HEAD (MAX_HEADER + 128)
140
Linus Torvalds1da177e2005-04-16 15:20:36 -0700141static DEFINE_SPINLOCK(ptype_lock);
Vlad Yasevich62532da2012-11-15 08:49:10 +0000142static DEFINE_SPINLOCK(offload_lock);
Cong Wang900ff8c2013-02-18 19:20:33 +0000143struct list_head ptype_base[PTYPE_HASH_SIZE] __read_mostly;
144struct list_head ptype_all __read_mostly; /* Taps */
Vlad Yasevich62532da2012-11-15 08:49:10 +0000145static struct list_head offload_base __read_mostly;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700146
Linus Torvalds1da177e2005-04-16 15:20:36 -0700147/*
Pavel Emelianov7562f872007-05-03 15:13:45 -0700148 * The @dev_base_head list is protected by @dev_base_lock and the rtnl
Linus Torvalds1da177e2005-04-16 15:20:36 -0700149 * semaphore.
150 *
Eric Dumazetc6d14c82009-11-04 05:43:23 -0800151 * Pure readers hold dev_base_lock for reading, or rcu_read_lock()
Linus Torvalds1da177e2005-04-16 15:20:36 -0700152 *
153 * Writers must hold the rtnl semaphore while they loop through the
Pavel Emelianov7562f872007-05-03 15:13:45 -0700154 * dev_base_head list, and hold dev_base_lock for writing when they do the
Linus Torvalds1da177e2005-04-16 15:20:36 -0700155 * actual updates. This allows pure readers to access the list even
156 * while a writer is preparing to update it.
157 *
158 * To put it another way, dev_base_lock is held for writing only to
159 * protect against pure readers; the rtnl semaphore provides the
160 * protection against other writers.
161 *
162 * See, for example usages, register_netdevice() and
163 * unregister_netdevice(), which must be called with the rtnl
164 * semaphore held.
165 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700166DEFINE_RWLOCK(dev_base_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700167EXPORT_SYMBOL(dev_base_lock);
168
Eric Dumazet30e6c9f2012-12-20 17:25:08 +0000169seqcount_t devnet_rename_seq;
Brian Haleyc91f6df2012-11-26 05:21:08 +0000170
Thomas Graf4e985ad2011-06-21 03:11:20 +0000171static inline void dev_base_seq_inc(struct net *net)
172{
173 while (++net->dev_base_seq == 0);
174}
175
Eric W. Biederman881d9662007-09-17 11:56:21 -0700176static inline struct hlist_head *dev_name_hash(struct net *net, const char *name)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700177{
Eric Dumazet95c96172012-04-15 05:58:06 +0000178 unsigned int hash = full_name_hash(name, strnlen(name, IFNAMSIZ));
179
stephen hemminger08e98972009-11-10 07:20:34 +0000180 return &net->dev_name_head[hash_32(hash, NETDEV_HASHBITS)];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700181}
182
Eric W. Biederman881d9662007-09-17 11:56:21 -0700183static inline struct hlist_head *dev_index_hash(struct net *net, int ifindex)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700184{
Eric Dumazet7c28bd02009-10-24 06:13:17 -0700185 return &net->dev_index_head[ifindex & (NETDEV_HASHENTRIES - 1)];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700186}
187
Eric Dumazete36fa2f2010-04-19 21:17:14 +0000188static inline void rps_lock(struct softnet_data *sd)
Changli Gao152102c2010-03-30 20:16:22 +0000189{
190#ifdef CONFIG_RPS
Eric Dumazete36fa2f2010-04-19 21:17:14 +0000191 spin_lock(&sd->input_pkt_queue.lock);
Changli Gao152102c2010-03-30 20:16:22 +0000192#endif
193}
194
Eric Dumazete36fa2f2010-04-19 21:17:14 +0000195static inline void rps_unlock(struct softnet_data *sd)
Changli Gao152102c2010-03-30 20:16:22 +0000196{
197#ifdef CONFIG_RPS
Eric Dumazete36fa2f2010-04-19 21:17:14 +0000198 spin_unlock(&sd->input_pkt_queue.lock);
Changli Gao152102c2010-03-30 20:16:22 +0000199#endif
200}
201
Eric W. Biedermance286d32007-09-12 13:53:49 +0200202/* Device list insertion */
203static int list_netdevice(struct net_device *dev)
204{
YOSHIFUJI Hideakic346dca2008-03-25 21:47:49 +0900205 struct net *net = dev_net(dev);
Eric W. Biedermance286d32007-09-12 13:53:49 +0200206
207 ASSERT_RTNL();
208
209 write_lock_bh(&dev_base_lock);
Eric Dumazetc6d14c82009-11-04 05:43:23 -0800210 list_add_tail_rcu(&dev->dev_list, &net->dev_base_head);
Eric Dumazet72c95282009-10-30 07:11:27 +0000211 hlist_add_head_rcu(&dev->name_hlist, dev_name_hash(net, dev->name));
Eric Dumazetfb699dfd2009-10-19 19:18:49 +0000212 hlist_add_head_rcu(&dev->index_hlist,
213 dev_index_hash(net, dev->ifindex));
Eric W. Biedermance286d32007-09-12 13:53:49 +0200214 write_unlock_bh(&dev_base_lock);
Thomas Graf4e985ad2011-06-21 03:11:20 +0000215
216 dev_base_seq_inc(net);
217
Eric W. Biedermance286d32007-09-12 13:53:49 +0200218 return 0;
219}
220
Eric Dumazetfb699dfd2009-10-19 19:18:49 +0000221/* Device list removal
222 * caller must respect a RCU grace period before freeing/reusing dev
223 */
Eric W. Biedermance286d32007-09-12 13:53:49 +0200224static void unlist_netdevice(struct net_device *dev)
225{
226 ASSERT_RTNL();
227
228 /* Unlink dev from the device chain */
229 write_lock_bh(&dev_base_lock);
Eric Dumazetc6d14c82009-11-04 05:43:23 -0800230 list_del_rcu(&dev->dev_list);
Eric Dumazet72c95282009-10-30 07:11:27 +0000231 hlist_del_rcu(&dev->name_hlist);
Eric Dumazetfb699dfd2009-10-19 19:18:49 +0000232 hlist_del_rcu(&dev->index_hlist);
Eric W. Biedermance286d32007-09-12 13:53:49 +0200233 write_unlock_bh(&dev_base_lock);
Thomas Graf4e985ad2011-06-21 03:11:20 +0000234
235 dev_base_seq_inc(dev_net(dev));
Eric W. Biedermance286d32007-09-12 13:53:49 +0200236}
237
Linus Torvalds1da177e2005-04-16 15:20:36 -0700238/*
239 * Our notifier list
240 */
241
Alan Sternf07d5b92006-05-09 15:23:03 -0700242static RAW_NOTIFIER_HEAD(netdev_chain);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700243
244/*
245 * Device drivers call our routines to queue packets here. We empty the
246 * queue in the local softnet handler.
247 */
Stephen Hemmingerbea33482007-10-03 16:41:36 -0700248
Eric Dumazet9958da02010-04-17 04:17:02 +0000249DEFINE_PER_CPU_ALIGNED(struct softnet_data, softnet_data);
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700250EXPORT_PER_CPU_SYMBOL(softnet_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700251
David S. Millercf508b12008-07-22 14:16:42 -0700252#ifdef CONFIG_LOCKDEP
Jarek Poplawski723e98b2007-05-15 22:46:18 -0700253/*
David S. Millerc773e842008-07-08 23:13:53 -0700254 * register_netdevice() inits txq->_xmit_lock and sets lockdep class
Jarek Poplawski723e98b2007-05-15 22:46:18 -0700255 * according to dev->type
256 */
257static const unsigned short netdev_lock_type[] =
258 {ARPHRD_NETROM, ARPHRD_ETHER, ARPHRD_EETHER, ARPHRD_AX25,
259 ARPHRD_PRONET, ARPHRD_CHAOS, ARPHRD_IEEE802, ARPHRD_ARCNET,
260 ARPHRD_APPLETLK, ARPHRD_DLCI, ARPHRD_ATM, ARPHRD_METRICOM,
261 ARPHRD_IEEE1394, ARPHRD_EUI64, ARPHRD_INFINIBAND, ARPHRD_SLIP,
262 ARPHRD_CSLIP, ARPHRD_SLIP6, ARPHRD_CSLIP6, ARPHRD_RSRVD,
263 ARPHRD_ADAPT, ARPHRD_ROSE, ARPHRD_X25, ARPHRD_HWX25,
264 ARPHRD_PPP, ARPHRD_CISCO, ARPHRD_LAPB, ARPHRD_DDCMP,
265 ARPHRD_RAWHDLC, ARPHRD_TUNNEL, ARPHRD_TUNNEL6, ARPHRD_FRAD,
266 ARPHRD_SKIP, ARPHRD_LOOPBACK, ARPHRD_LOCALTLK, ARPHRD_FDDI,
267 ARPHRD_BIF, ARPHRD_SIT, ARPHRD_IPDDP, ARPHRD_IPGRE,
268 ARPHRD_PIMREG, ARPHRD_HIPPI, ARPHRD_ASH, ARPHRD_ECONET,
269 ARPHRD_IRDA, ARPHRD_FCPP, ARPHRD_FCAL, ARPHRD_FCPL,
Paul Gortmaker211ed862012-05-10 17:14:35 -0400270 ARPHRD_FCFABRIC, ARPHRD_IEEE80211, ARPHRD_IEEE80211_PRISM,
271 ARPHRD_IEEE80211_RADIOTAP, ARPHRD_PHONET, ARPHRD_PHONET_PIPE,
272 ARPHRD_IEEE802154, ARPHRD_VOID, ARPHRD_NONE};
Jarek Poplawski723e98b2007-05-15 22:46:18 -0700273
Jan Engelhardt36cbd3d2009-08-05 10:42:58 -0700274static const char *const netdev_lock_name[] =
Jarek Poplawski723e98b2007-05-15 22:46:18 -0700275 {"_xmit_NETROM", "_xmit_ETHER", "_xmit_EETHER", "_xmit_AX25",
276 "_xmit_PRONET", "_xmit_CHAOS", "_xmit_IEEE802", "_xmit_ARCNET",
277 "_xmit_APPLETLK", "_xmit_DLCI", "_xmit_ATM", "_xmit_METRICOM",
278 "_xmit_IEEE1394", "_xmit_EUI64", "_xmit_INFINIBAND", "_xmit_SLIP",
279 "_xmit_CSLIP", "_xmit_SLIP6", "_xmit_CSLIP6", "_xmit_RSRVD",
280 "_xmit_ADAPT", "_xmit_ROSE", "_xmit_X25", "_xmit_HWX25",
281 "_xmit_PPP", "_xmit_CISCO", "_xmit_LAPB", "_xmit_DDCMP",
282 "_xmit_RAWHDLC", "_xmit_TUNNEL", "_xmit_TUNNEL6", "_xmit_FRAD",
283 "_xmit_SKIP", "_xmit_LOOPBACK", "_xmit_LOCALTLK", "_xmit_FDDI",
284 "_xmit_BIF", "_xmit_SIT", "_xmit_IPDDP", "_xmit_IPGRE",
285 "_xmit_PIMREG", "_xmit_HIPPI", "_xmit_ASH", "_xmit_ECONET",
286 "_xmit_IRDA", "_xmit_FCPP", "_xmit_FCAL", "_xmit_FCPL",
Paul Gortmaker211ed862012-05-10 17:14:35 -0400287 "_xmit_FCFABRIC", "_xmit_IEEE80211", "_xmit_IEEE80211_PRISM",
288 "_xmit_IEEE80211_RADIOTAP", "_xmit_PHONET", "_xmit_PHONET_PIPE",
289 "_xmit_IEEE802154", "_xmit_VOID", "_xmit_NONE"};
Jarek Poplawski723e98b2007-05-15 22:46:18 -0700290
291static struct lock_class_key netdev_xmit_lock_key[ARRAY_SIZE(netdev_lock_type)];
David S. Millercf508b12008-07-22 14:16:42 -0700292static struct lock_class_key netdev_addr_lock_key[ARRAY_SIZE(netdev_lock_type)];
Jarek Poplawski723e98b2007-05-15 22:46:18 -0700293
294static inline unsigned short netdev_lock_pos(unsigned short dev_type)
295{
296 int i;
297
298 for (i = 0; i < ARRAY_SIZE(netdev_lock_type); i++)
299 if (netdev_lock_type[i] == dev_type)
300 return i;
301 /* the last key is used by default */
302 return ARRAY_SIZE(netdev_lock_type) - 1;
303}
304
David S. Millercf508b12008-07-22 14:16:42 -0700305static inline void netdev_set_xmit_lockdep_class(spinlock_t *lock,
306 unsigned short dev_type)
Jarek Poplawski723e98b2007-05-15 22:46:18 -0700307{
308 int i;
309
310 i = netdev_lock_pos(dev_type);
311 lockdep_set_class_and_name(lock, &netdev_xmit_lock_key[i],
312 netdev_lock_name[i]);
313}
David S. Millercf508b12008-07-22 14:16:42 -0700314
315static inline void netdev_set_addr_lockdep_class(struct net_device *dev)
316{
317 int i;
318
319 i = netdev_lock_pos(dev->type);
320 lockdep_set_class_and_name(&dev->addr_list_lock,
321 &netdev_addr_lock_key[i],
322 netdev_lock_name[i]);
323}
Jarek Poplawski723e98b2007-05-15 22:46:18 -0700324#else
David S. Millercf508b12008-07-22 14:16:42 -0700325static inline void netdev_set_xmit_lockdep_class(spinlock_t *lock,
326 unsigned short dev_type)
327{
328}
329static inline void netdev_set_addr_lockdep_class(struct net_device *dev)
Jarek Poplawski723e98b2007-05-15 22:46:18 -0700330{
331}
332#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -0700333
334/*******************************************************************************
335
336 Protocol management and registration routines
337
338*******************************************************************************/
339
340/*
Linus Torvalds1da177e2005-04-16 15:20:36 -0700341 * Add a protocol ID to the list. Now that the input handler is
342 * smarter we can dispense with all the messy stuff that used to be
343 * here.
344 *
345 * BEWARE!!! Protocol handlers, mangling input packets,
346 * MUST BE last in hash buckets and checking protocol handlers
347 * MUST start from promiscuous ptype_all chain in net_bh.
348 * It is true now, do not change it.
349 * Explanation follows: if protocol handler, mangling packet, will
350 * be the first on list, it is not able to sense, that packet
351 * is cloned and should be copied-on-write, so that it will
352 * change it and subsequent readers will get broken packet.
353 * --ANK (980803)
354 */
355
Eric Dumazetc07b68e2010-09-02 03:53:46 +0000356static inline struct list_head *ptype_head(const struct packet_type *pt)
357{
358 if (pt->type == htons(ETH_P_ALL))
359 return &ptype_all;
360 else
361 return &ptype_base[ntohs(pt->type) & PTYPE_HASH_MASK];
362}
363
Linus Torvalds1da177e2005-04-16 15:20:36 -0700364/**
365 * dev_add_pack - add packet handler
366 * @pt: packet type declaration
367 *
368 * Add a protocol handler to the networking stack. The passed &packet_type
369 * is linked into kernel lists and may not be freed until it has been
370 * removed from the kernel lists.
371 *
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +0900372 * This call does not sleep therefore it can not
Linus Torvalds1da177e2005-04-16 15:20:36 -0700373 * guarantee all CPU's that are in middle of receiving packets
374 * will see the new packet type (until the next received packet).
375 */
376
377void dev_add_pack(struct packet_type *pt)
378{
Eric Dumazetc07b68e2010-09-02 03:53:46 +0000379 struct list_head *head = ptype_head(pt);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700380
Eric Dumazetc07b68e2010-09-02 03:53:46 +0000381 spin_lock(&ptype_lock);
382 list_add_rcu(&pt->list, head);
383 spin_unlock(&ptype_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700384}
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700385EXPORT_SYMBOL(dev_add_pack);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700386
Linus Torvalds1da177e2005-04-16 15:20:36 -0700387/**
388 * __dev_remove_pack - remove packet handler
389 * @pt: packet type declaration
390 *
391 * Remove a protocol handler that was previously added to the kernel
392 * protocol handlers by dev_add_pack(). The passed &packet_type is removed
393 * from the kernel lists and can be freed or reused once this function
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +0900394 * returns.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700395 *
396 * The packet type might still be in use by receivers
397 * and must not be freed until after all the CPU's have gone
398 * through a quiescent state.
399 */
400void __dev_remove_pack(struct packet_type *pt)
401{
Eric Dumazetc07b68e2010-09-02 03:53:46 +0000402 struct list_head *head = ptype_head(pt);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700403 struct packet_type *pt1;
404
Eric Dumazetc07b68e2010-09-02 03:53:46 +0000405 spin_lock(&ptype_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700406
407 list_for_each_entry(pt1, head, list) {
408 if (pt == pt1) {
409 list_del_rcu(&pt->list);
410 goto out;
411 }
412 }
413
Joe Perches7b6cd1c2012-02-01 10:54:43 +0000414 pr_warn("dev_remove_pack: %p not found\n", pt);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700415out:
Eric Dumazetc07b68e2010-09-02 03:53:46 +0000416 spin_unlock(&ptype_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700417}
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700418EXPORT_SYMBOL(__dev_remove_pack);
419
Linus Torvalds1da177e2005-04-16 15:20:36 -0700420/**
421 * dev_remove_pack - remove packet handler
422 * @pt: packet type declaration
423 *
424 * Remove a protocol handler that was previously added to the kernel
425 * protocol handlers by dev_add_pack(). The passed &packet_type is removed
426 * from the kernel lists and can be freed or reused once this function
427 * returns.
428 *
429 * This call sleeps to guarantee that no CPU is looking at the packet
430 * type after return.
431 */
432void dev_remove_pack(struct packet_type *pt)
433{
434 __dev_remove_pack(pt);
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +0900435
Linus Torvalds1da177e2005-04-16 15:20:36 -0700436 synchronize_net();
437}
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700438EXPORT_SYMBOL(dev_remove_pack);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700439
Vlad Yasevich62532da2012-11-15 08:49:10 +0000440
441/**
442 * dev_add_offload - register offload handlers
443 * @po: protocol offload declaration
444 *
445 * Add protocol offload handlers to the networking stack. The passed
446 * &proto_offload is linked into kernel lists and may not be freed until
447 * it has been removed from the kernel lists.
448 *
449 * This call does not sleep therefore it can not
450 * guarantee all CPU's that are in middle of receiving packets
451 * will see the new offload handlers (until the next received packet).
452 */
453void dev_add_offload(struct packet_offload *po)
454{
455 struct list_head *head = &offload_base;
456
457 spin_lock(&offload_lock);
458 list_add_rcu(&po->list, head);
459 spin_unlock(&offload_lock);
460}
461EXPORT_SYMBOL(dev_add_offload);
462
463/**
464 * __dev_remove_offload - remove offload handler
465 * @po: packet offload declaration
466 *
467 * Remove a protocol offload handler that was previously added to the
468 * kernel offload handlers by dev_add_offload(). The passed &offload_type
469 * is removed from the kernel lists and can be freed or reused once this
470 * function returns.
471 *
472 * The packet type might still be in use by receivers
473 * and must not be freed until after all the CPU's have gone
474 * through a quiescent state.
475 */
476void __dev_remove_offload(struct packet_offload *po)
477{
478 struct list_head *head = &offload_base;
479 struct packet_offload *po1;
480
Eric Dumazetc53aa502012-11-16 08:08:23 +0000481 spin_lock(&offload_lock);
Vlad Yasevich62532da2012-11-15 08:49:10 +0000482
483 list_for_each_entry(po1, head, list) {
484 if (po == po1) {
485 list_del_rcu(&po->list);
486 goto out;
487 }
488 }
489
490 pr_warn("dev_remove_offload: %p not found\n", po);
491out:
Eric Dumazetc53aa502012-11-16 08:08:23 +0000492 spin_unlock(&offload_lock);
Vlad Yasevich62532da2012-11-15 08:49:10 +0000493}
494EXPORT_SYMBOL(__dev_remove_offload);
495
496/**
497 * dev_remove_offload - remove packet offload handler
498 * @po: packet offload declaration
499 *
500 * Remove a packet offload handler that was previously added to the kernel
501 * offload handlers by dev_add_offload(). The passed &offload_type is
502 * removed from the kernel lists and can be freed or reused once this
503 * function returns.
504 *
505 * This call sleeps to guarantee that no CPU is looking at the packet
506 * type after return.
507 */
508void dev_remove_offload(struct packet_offload *po)
509{
510 __dev_remove_offload(po);
511
512 synchronize_net();
513}
514EXPORT_SYMBOL(dev_remove_offload);
515
Linus Torvalds1da177e2005-04-16 15:20:36 -0700516/******************************************************************************
517
518 Device Boot-time Settings Routines
519
520*******************************************************************************/
521
522/* Boot time configuration table */
523static struct netdev_boot_setup dev_boot_setup[NETDEV_BOOT_SETUP_MAX];
524
525/**
526 * netdev_boot_setup_add - add new setup entry
527 * @name: name of the device
528 * @map: configured settings for the device
529 *
530 * Adds new setup entry to the dev_boot_setup list. The function
531 * returns 0 on error and 1 on success. This is a generic routine to
532 * all netdevices.
533 */
534static int netdev_boot_setup_add(char *name, struct ifmap *map)
535{
536 struct netdev_boot_setup *s;
537 int i;
538
539 s = dev_boot_setup;
540 for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
541 if (s[i].name[0] == '\0' || s[i].name[0] == ' ') {
542 memset(s[i].name, 0, sizeof(s[i].name));
Wang Chen93b3cff2008-07-01 19:57:19 -0700543 strlcpy(s[i].name, name, IFNAMSIZ);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700544 memcpy(&s[i].map, map, sizeof(s[i].map));
545 break;
546 }
547 }
548
549 return i >= NETDEV_BOOT_SETUP_MAX ? 0 : 1;
550}
551
552/**
553 * netdev_boot_setup_check - check boot time settings
554 * @dev: the netdevice
555 *
556 * Check boot time settings for the device.
557 * The found settings are set for the device to be used
558 * later in the device probing.
559 * Returns 0 if no settings found, 1 if they are.
560 */
561int netdev_boot_setup_check(struct net_device *dev)
562{
563 struct netdev_boot_setup *s = dev_boot_setup;
564 int i;
565
566 for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
567 if (s[i].name[0] != '\0' && s[i].name[0] != ' ' &&
Wang Chen93b3cff2008-07-01 19:57:19 -0700568 !strcmp(dev->name, s[i].name)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700569 dev->irq = s[i].map.irq;
570 dev->base_addr = s[i].map.base_addr;
571 dev->mem_start = s[i].map.mem_start;
572 dev->mem_end = s[i].map.mem_end;
573 return 1;
574 }
575 }
576 return 0;
577}
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700578EXPORT_SYMBOL(netdev_boot_setup_check);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700579
580
581/**
582 * netdev_boot_base - get address from boot time settings
583 * @prefix: prefix for network device
584 * @unit: id for network device
585 *
586 * Check boot time settings for the base address of device.
587 * The found settings are set for the device to be used
588 * later in the device probing.
589 * Returns 0 if no settings found.
590 */
591unsigned long netdev_boot_base(const char *prefix, int unit)
592{
593 const struct netdev_boot_setup *s = dev_boot_setup;
594 char name[IFNAMSIZ];
595 int i;
596
597 sprintf(name, "%s%d", prefix, unit);
598
599 /*
600 * If device already registered then return base of 1
601 * to indicate not to probe for this interface
602 */
Eric W. Biederman881d9662007-09-17 11:56:21 -0700603 if (__dev_get_by_name(&init_net, name))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700604 return 1;
605
606 for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++)
607 if (!strcmp(name, s[i].name))
608 return s[i].map.base_addr;
609 return 0;
610}
611
612/*
613 * Saves at boot time configured settings for any netdevice.
614 */
615int __init netdev_boot_setup(char *str)
616{
617 int ints[5];
618 struct ifmap map;
619
620 str = get_options(str, ARRAY_SIZE(ints), ints);
621 if (!str || !*str)
622 return 0;
623
624 /* Save settings */
625 memset(&map, 0, sizeof(map));
626 if (ints[0] > 0)
627 map.irq = ints[1];
628 if (ints[0] > 1)
629 map.base_addr = ints[2];
630 if (ints[0] > 2)
631 map.mem_start = ints[3];
632 if (ints[0] > 3)
633 map.mem_end = ints[4];
634
635 /* Add new entry to the list */
636 return netdev_boot_setup_add(str, &map);
637}
638
639__setup("netdev=", netdev_boot_setup);
640
641/*******************************************************************************
642
643 Device Interface Subroutines
644
645*******************************************************************************/
646
647/**
648 * __dev_get_by_name - find a device by its name
Randy Dunlapc4ea43c2007-10-12 21:17:49 -0700649 * @net: the applicable net namespace
Linus Torvalds1da177e2005-04-16 15:20:36 -0700650 * @name: name to find
651 *
652 * Find an interface by name. Must be called under RTNL semaphore
653 * or @dev_base_lock. If the name is found a pointer to the device
654 * is returned. If the name is not found then %NULL is returned. The
655 * reference counters are not incremented so the caller must be
656 * careful with locks.
657 */
658
Eric W. Biederman881d9662007-09-17 11:56:21 -0700659struct net_device *__dev_get_by_name(struct net *net, const char *name)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700660{
661 struct hlist_node *p;
Eric Dumazet0bd8d532009-10-30 01:40:11 -0700662 struct net_device *dev;
663 struct hlist_head *head = dev_name_hash(net, name);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700664
Eric Dumazet0bd8d532009-10-30 01:40:11 -0700665 hlist_for_each_entry(dev, p, head, name_hlist)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700666 if (!strncmp(dev->name, name, IFNAMSIZ))
667 return dev;
Eric Dumazet0bd8d532009-10-30 01:40:11 -0700668
Linus Torvalds1da177e2005-04-16 15:20:36 -0700669 return NULL;
670}
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700671EXPORT_SYMBOL(__dev_get_by_name);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700672
673/**
Eric Dumazet72c95282009-10-30 07:11:27 +0000674 * dev_get_by_name_rcu - find a device by its name
675 * @net: the applicable net namespace
676 * @name: name to find
677 *
678 * Find an interface by name.
679 * If the name is found a pointer to the device is returned.
680 * If the name is not found then %NULL is returned.
681 * The reference counters are not incremented so the caller must be
682 * careful with locks. The caller must hold RCU lock.
683 */
684
685struct net_device *dev_get_by_name_rcu(struct net *net, const char *name)
686{
687 struct hlist_node *p;
688 struct net_device *dev;
689 struct hlist_head *head = dev_name_hash(net, name);
690
691 hlist_for_each_entry_rcu(dev, p, head, name_hlist)
692 if (!strncmp(dev->name, name, IFNAMSIZ))
693 return dev;
694
695 return NULL;
696}
697EXPORT_SYMBOL(dev_get_by_name_rcu);
698
699/**
Linus Torvalds1da177e2005-04-16 15:20:36 -0700700 * dev_get_by_name - find a device by its name
Randy Dunlapc4ea43c2007-10-12 21:17:49 -0700701 * @net: the applicable net namespace
Linus Torvalds1da177e2005-04-16 15:20:36 -0700702 * @name: name to find
703 *
704 * Find an interface by name. This can be called from any
705 * context and does its own locking. The returned handle has
706 * the usage count incremented and the caller must use dev_put() to
707 * release it when it is no longer needed. %NULL is returned if no
708 * matching device is found.
709 */
710
Eric W. Biederman881d9662007-09-17 11:56:21 -0700711struct net_device *dev_get_by_name(struct net *net, const char *name)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700712{
713 struct net_device *dev;
714
Eric Dumazet72c95282009-10-30 07:11:27 +0000715 rcu_read_lock();
716 dev = dev_get_by_name_rcu(net, name);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700717 if (dev)
718 dev_hold(dev);
Eric Dumazet72c95282009-10-30 07:11:27 +0000719 rcu_read_unlock();
Linus Torvalds1da177e2005-04-16 15:20:36 -0700720 return dev;
721}
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700722EXPORT_SYMBOL(dev_get_by_name);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700723
724/**
725 * __dev_get_by_index - find a device by its ifindex
Randy Dunlapc4ea43c2007-10-12 21:17:49 -0700726 * @net: the applicable net namespace
Linus Torvalds1da177e2005-04-16 15:20:36 -0700727 * @ifindex: index of device
728 *
729 * Search for an interface by index. Returns %NULL if the device
730 * is not found or a pointer to the device. The device has not
731 * had its reference counter increased so the caller must be careful
732 * about locking. The caller must hold either the RTNL semaphore
733 * or @dev_base_lock.
734 */
735
Eric W. Biederman881d9662007-09-17 11:56:21 -0700736struct net_device *__dev_get_by_index(struct net *net, int ifindex)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700737{
738 struct hlist_node *p;
Eric Dumazet0bd8d532009-10-30 01:40:11 -0700739 struct net_device *dev;
740 struct hlist_head *head = dev_index_hash(net, ifindex);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700741
Eric Dumazet0bd8d532009-10-30 01:40:11 -0700742 hlist_for_each_entry(dev, p, head, index_hlist)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700743 if (dev->ifindex == ifindex)
744 return dev;
Eric Dumazet0bd8d532009-10-30 01:40:11 -0700745
Linus Torvalds1da177e2005-04-16 15:20:36 -0700746 return NULL;
747}
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700748EXPORT_SYMBOL(__dev_get_by_index);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700749
Eric Dumazetfb699dfd2009-10-19 19:18:49 +0000750/**
751 * dev_get_by_index_rcu - find a device by its ifindex
752 * @net: the applicable net namespace
753 * @ifindex: index of device
754 *
755 * Search for an interface by index. Returns %NULL if the device
756 * is not found or a pointer to the device. The device has not
757 * had its reference counter increased so the caller must be careful
758 * about locking. The caller must hold RCU lock.
759 */
760
761struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex)
762{
763 struct hlist_node *p;
764 struct net_device *dev;
765 struct hlist_head *head = dev_index_hash(net, ifindex);
766
767 hlist_for_each_entry_rcu(dev, p, head, index_hlist)
768 if (dev->ifindex == ifindex)
769 return dev;
770
771 return NULL;
772}
773EXPORT_SYMBOL(dev_get_by_index_rcu);
774
Linus Torvalds1da177e2005-04-16 15:20:36 -0700775
776/**
777 * dev_get_by_index - find a device by its ifindex
Randy Dunlapc4ea43c2007-10-12 21:17:49 -0700778 * @net: the applicable net namespace
Linus Torvalds1da177e2005-04-16 15:20:36 -0700779 * @ifindex: index of device
780 *
781 * Search for an interface by index. Returns NULL if the device
782 * is not found or a pointer to the device. The device returned has
783 * had a reference added and the pointer is safe until the user calls
784 * dev_put to indicate they have finished with it.
785 */
786
Eric W. Biederman881d9662007-09-17 11:56:21 -0700787struct net_device *dev_get_by_index(struct net *net, int ifindex)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700788{
789 struct net_device *dev;
790
Eric Dumazetfb699dfd2009-10-19 19:18:49 +0000791 rcu_read_lock();
792 dev = dev_get_by_index_rcu(net, ifindex);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700793 if (dev)
794 dev_hold(dev);
Eric Dumazetfb699dfd2009-10-19 19:18:49 +0000795 rcu_read_unlock();
Linus Torvalds1da177e2005-04-16 15:20:36 -0700796 return dev;
797}
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700798EXPORT_SYMBOL(dev_get_by_index);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700799
800/**
Eric Dumazet941666c2010-12-05 01:23:53 +0000801 * dev_getbyhwaddr_rcu - find a device by its hardware address
Randy Dunlapc4ea43c2007-10-12 21:17:49 -0700802 * @net: the applicable net namespace
Linus Torvalds1da177e2005-04-16 15:20:36 -0700803 * @type: media type of device
804 * @ha: hardware address
805 *
806 * Search for an interface by MAC address. Returns NULL if the device
Eric Dumazetc5066532011-01-24 13:16:16 -0800807 * is not found or a pointer to the device.
808 * The caller must hold RCU or RTNL.
Eric Dumazet941666c2010-12-05 01:23:53 +0000809 * The returned device has not had its ref count increased
Linus Torvalds1da177e2005-04-16 15:20:36 -0700810 * and the caller must therefore be careful about locking
811 *
Linus Torvalds1da177e2005-04-16 15:20:36 -0700812 */
813
Eric Dumazet941666c2010-12-05 01:23:53 +0000814struct net_device *dev_getbyhwaddr_rcu(struct net *net, unsigned short type,
815 const char *ha)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700816{
817 struct net_device *dev;
818
Eric Dumazet941666c2010-12-05 01:23:53 +0000819 for_each_netdev_rcu(net, dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700820 if (dev->type == type &&
821 !memcmp(dev->dev_addr, ha, dev->addr_len))
Pavel Emelianov7562f872007-05-03 15:13:45 -0700822 return dev;
823
824 return NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700825}
Eric Dumazet941666c2010-12-05 01:23:53 +0000826EXPORT_SYMBOL(dev_getbyhwaddr_rcu);
Jochen Friedrichcf309e32005-09-22 04:44:55 -0300827
Eric W. Biederman881d9662007-09-17 11:56:21 -0700828struct net_device *__dev_getfirstbyhwtype(struct net *net, unsigned short type)
Patrick McHardy4e9cac22007-05-03 03:28:13 -0700829{
830 struct net_device *dev;
831
832 ASSERT_RTNL();
Eric W. Biederman881d9662007-09-17 11:56:21 -0700833 for_each_netdev(net, dev)
Patrick McHardy4e9cac22007-05-03 03:28:13 -0700834 if (dev->type == type)
Pavel Emelianov7562f872007-05-03 15:13:45 -0700835 return dev;
836
837 return NULL;
Patrick McHardy4e9cac22007-05-03 03:28:13 -0700838}
Patrick McHardy4e9cac22007-05-03 03:28:13 -0700839EXPORT_SYMBOL(__dev_getfirstbyhwtype);
840
Eric W. Biederman881d9662007-09-17 11:56:21 -0700841struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700842{
Eric Dumazet99fe3c32010-03-18 11:27:25 +0000843 struct net_device *dev, *ret = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700844
Eric Dumazet99fe3c32010-03-18 11:27:25 +0000845 rcu_read_lock();
846 for_each_netdev_rcu(net, dev)
847 if (dev->type == type) {
848 dev_hold(dev);
849 ret = dev;
850 break;
851 }
852 rcu_read_unlock();
853 return ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700854}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700855EXPORT_SYMBOL(dev_getfirstbyhwtype);
856
857/**
Eric Dumazetbb69ae02010-06-07 11:42:13 +0000858 * dev_get_by_flags_rcu - find any device with given flags
Randy Dunlapc4ea43c2007-10-12 21:17:49 -0700859 * @net: the applicable net namespace
Linus Torvalds1da177e2005-04-16 15:20:36 -0700860 * @if_flags: IFF_* values
861 * @mask: bitmask of bits in if_flags to check
862 *
863 * Search for any interface with the given flags. Returns NULL if a device
Eric Dumazetbb69ae02010-06-07 11:42:13 +0000864 * is not found or a pointer to the device. Must be called inside
865 * rcu_read_lock(), and result refcount is unchanged.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700866 */
867
Eric Dumazetbb69ae02010-06-07 11:42:13 +0000868struct net_device *dev_get_by_flags_rcu(struct net *net, unsigned short if_flags,
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700869 unsigned short mask)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700870{
Pavel Emelianov7562f872007-05-03 15:13:45 -0700871 struct net_device *dev, *ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700872
Pavel Emelianov7562f872007-05-03 15:13:45 -0700873 ret = NULL;
Eric Dumazetc6d14c82009-11-04 05:43:23 -0800874 for_each_netdev_rcu(net, dev) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700875 if (((dev->flags ^ if_flags) & mask) == 0) {
Pavel Emelianov7562f872007-05-03 15:13:45 -0700876 ret = dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700877 break;
878 }
879 }
Pavel Emelianov7562f872007-05-03 15:13:45 -0700880 return ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700881}
Eric Dumazetbb69ae02010-06-07 11:42:13 +0000882EXPORT_SYMBOL(dev_get_by_flags_rcu);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700883
884/**
885 * dev_valid_name - check if name is okay for network device
886 * @name: name string
887 *
888 * Network device names need to be valid file names to
David S. Millerc7fa9d12006-08-15 16:34:13 -0700889 * to allow sysfs to work. We also disallow any kind of
890 * whitespace.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700891 */
David S. Miller95f050b2012-03-06 16:12:15 -0500892bool dev_valid_name(const char *name)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700893{
David S. Millerc7fa9d12006-08-15 16:34:13 -0700894 if (*name == '\0')
David S. Miller95f050b2012-03-06 16:12:15 -0500895 return false;
Stephen Hemmingerb6fe17d2006-08-29 17:06:13 -0700896 if (strlen(name) >= IFNAMSIZ)
David S. Miller95f050b2012-03-06 16:12:15 -0500897 return false;
David S. Millerc7fa9d12006-08-15 16:34:13 -0700898 if (!strcmp(name, ".") || !strcmp(name, ".."))
David S. Miller95f050b2012-03-06 16:12:15 -0500899 return false;
David S. Millerc7fa9d12006-08-15 16:34:13 -0700900
901 while (*name) {
902 if (*name == '/' || isspace(*name))
David S. Miller95f050b2012-03-06 16:12:15 -0500903 return false;
David S. Millerc7fa9d12006-08-15 16:34:13 -0700904 name++;
905 }
David S. Miller95f050b2012-03-06 16:12:15 -0500906 return true;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700907}
Eric Dumazetd1b19df2009-09-03 01:29:39 -0700908EXPORT_SYMBOL(dev_valid_name);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700909
910/**
Eric W. Biedermanb267b172007-09-12 13:48:45 +0200911 * __dev_alloc_name - allocate a name for a device
912 * @net: network namespace to allocate the device name in
Linus Torvalds1da177e2005-04-16 15:20:36 -0700913 * @name: name format string
Eric W. Biedermanb267b172007-09-12 13:48:45 +0200914 * @buf: scratch buffer and result name string
Linus Torvalds1da177e2005-04-16 15:20:36 -0700915 *
916 * Passed a format string - eg "lt%d" it will try and find a suitable
Stephen Hemminger3041a062006-05-26 13:25:24 -0700917 * id. It scans list of devices to build up a free map, then chooses
918 * the first empty slot. The caller must hold the dev_base or rtnl lock
919 * while allocating the name and adding the device in order to avoid
920 * duplicates.
921 * Limited to bits_per_byte * page size devices (ie 32K on most platforms).
922 * Returns the number of the unit assigned or a negative errno code.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700923 */
924
Eric W. Biedermanb267b172007-09-12 13:48:45 +0200925static int __dev_alloc_name(struct net *net, const char *name, char *buf)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700926{
927 int i = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700928 const char *p;
929 const int max_netdevices = 8*PAGE_SIZE;
Stephen Hemmingercfcabdc2007-10-09 01:59:42 -0700930 unsigned long *inuse;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700931 struct net_device *d;
932
933 p = strnchr(name, IFNAMSIZ-1, '%');
934 if (p) {
935 /*
936 * Verify the string as this thing may have come from
937 * the user. There must be either one "%d" and no other "%"
938 * characters.
939 */
940 if (p[1] != 'd' || strchr(p + 2, '%'))
941 return -EINVAL;
942
943 /* Use one page as a bit array of possible slots */
Stephen Hemmingercfcabdc2007-10-09 01:59:42 -0700944 inuse = (unsigned long *) get_zeroed_page(GFP_ATOMIC);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700945 if (!inuse)
946 return -ENOMEM;
947
Eric W. Biederman881d9662007-09-17 11:56:21 -0700948 for_each_netdev(net, d) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700949 if (!sscanf(d->name, name, &i))
950 continue;
951 if (i < 0 || i >= max_netdevices)
952 continue;
953
954 /* avoid cases where sscanf is not exact inverse of printf */
Eric W. Biedermanb267b172007-09-12 13:48:45 +0200955 snprintf(buf, IFNAMSIZ, name, i);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700956 if (!strncmp(buf, d->name, IFNAMSIZ))
957 set_bit(i, inuse);
958 }
959
960 i = find_first_zero_bit(inuse, max_netdevices);
961 free_page((unsigned long) inuse);
962 }
963
Octavian Purdilad9031022009-11-18 02:36:59 +0000964 if (buf != name)
965 snprintf(buf, IFNAMSIZ, name, i);
Eric W. Biedermanb267b172007-09-12 13:48:45 +0200966 if (!__dev_get_by_name(net, buf))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700967 return i;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700968
969 /* It is possible to run out of possible slots
970 * when the name is long and there isn't enough space left
971 * for the digits, or if all bits are used.
972 */
973 return -ENFILE;
974}
975
Eric W. Biedermanb267b172007-09-12 13:48:45 +0200976/**
977 * dev_alloc_name - allocate a name for a device
978 * @dev: device
979 * @name: name format string
980 *
981 * Passed a format string - eg "lt%d" it will try and find a suitable
982 * id. It scans list of devices to build up a free map, then chooses
983 * the first empty slot. The caller must hold the dev_base or rtnl lock
984 * while allocating the name and adding the device in order to avoid
985 * duplicates.
986 * Limited to bits_per_byte * page size devices (ie 32K on most platforms).
987 * Returns the number of the unit assigned or a negative errno code.
988 */
989
990int dev_alloc_name(struct net_device *dev, const char *name)
991{
992 char buf[IFNAMSIZ];
993 struct net *net;
994 int ret;
995
YOSHIFUJI Hideakic346dca2008-03-25 21:47:49 +0900996 BUG_ON(!dev_net(dev));
997 net = dev_net(dev);
Eric W. Biedermanb267b172007-09-12 13:48:45 +0200998 ret = __dev_alloc_name(net, name, buf);
999 if (ret >= 0)
1000 strlcpy(dev->name, buf, IFNAMSIZ);
1001 return ret;
1002}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07001003EXPORT_SYMBOL(dev_alloc_name);
Eric W. Biedermanb267b172007-09-12 13:48:45 +02001004
Gao feng828de4f2012-09-13 20:58:27 +00001005static int dev_alloc_name_ns(struct net *net,
1006 struct net_device *dev,
1007 const char *name)
Octavian Purdilad9031022009-11-18 02:36:59 +00001008{
Gao feng828de4f2012-09-13 20:58:27 +00001009 char buf[IFNAMSIZ];
1010 int ret;
Daniel Lezcano8ce6cebc2010-05-19 10:12:19 +00001011
Gao feng828de4f2012-09-13 20:58:27 +00001012 ret = __dev_alloc_name(net, name, buf);
1013 if (ret >= 0)
1014 strlcpy(dev->name, buf, IFNAMSIZ);
1015 return ret;
1016}
1017
1018static int dev_get_valid_name(struct net *net,
1019 struct net_device *dev,
1020 const char *name)
1021{
1022 BUG_ON(!net);
Daniel Lezcano8ce6cebc2010-05-19 10:12:19 +00001023
Octavian Purdilad9031022009-11-18 02:36:59 +00001024 if (!dev_valid_name(name))
1025 return -EINVAL;
1026
Jiri Pirko1c5cae82011-04-30 01:21:32 +00001027 if (strchr(name, '%'))
Gao feng828de4f2012-09-13 20:58:27 +00001028 return dev_alloc_name_ns(net, dev, name);
Octavian Purdilad9031022009-11-18 02:36:59 +00001029 else if (__dev_get_by_name(net, name))
1030 return -EEXIST;
Daniel Lezcano8ce6cebc2010-05-19 10:12:19 +00001031 else if (dev->name != name)
1032 strlcpy(dev->name, name, IFNAMSIZ);
Octavian Purdilad9031022009-11-18 02:36:59 +00001033
1034 return 0;
1035}
Linus Torvalds1da177e2005-04-16 15:20:36 -07001036
1037/**
1038 * dev_change_name - change name of a device
1039 * @dev: device
1040 * @newname: name (or format string) must be at least IFNAMSIZ
1041 *
1042 * Change name of a device, can pass format strings "eth%d".
1043 * for wildcarding.
1044 */
Stephen Hemmingercf04a4c72008-09-30 02:22:14 -07001045int dev_change_name(struct net_device *dev, const char *newname)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001046{
Herbert Xufcc5a032007-07-30 17:03:38 -07001047 char oldname[IFNAMSIZ];
Linus Torvalds1da177e2005-04-16 15:20:36 -07001048 int err = 0;
Herbert Xufcc5a032007-07-30 17:03:38 -07001049 int ret;
Eric W. Biederman881d9662007-09-17 11:56:21 -07001050 struct net *net;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001051
1052 ASSERT_RTNL();
YOSHIFUJI Hideakic346dca2008-03-25 21:47:49 +09001053 BUG_ON(!dev_net(dev));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001054
YOSHIFUJI Hideakic346dca2008-03-25 21:47:49 +09001055 net = dev_net(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001056 if (dev->flags & IFF_UP)
1057 return -EBUSY;
1058
Eric Dumazet30e6c9f2012-12-20 17:25:08 +00001059 write_seqcount_begin(&devnet_rename_seq);
Brian Haleyc91f6df2012-11-26 05:21:08 +00001060
1061 if (strncmp(newname, dev->name, IFNAMSIZ) == 0) {
Eric Dumazet30e6c9f2012-12-20 17:25:08 +00001062 write_seqcount_end(&devnet_rename_seq);
Stephen Hemmingerc8d90dc2007-10-26 03:53:42 -07001063 return 0;
Brian Haleyc91f6df2012-11-26 05:21:08 +00001064 }
Stephen Hemmingerc8d90dc2007-10-26 03:53:42 -07001065
Herbert Xufcc5a032007-07-30 17:03:38 -07001066 memcpy(oldname, dev->name, IFNAMSIZ);
1067
Gao feng828de4f2012-09-13 20:58:27 +00001068 err = dev_get_valid_name(net, dev, newname);
Brian Haleyc91f6df2012-11-26 05:21:08 +00001069 if (err < 0) {
Eric Dumazet30e6c9f2012-12-20 17:25:08 +00001070 write_seqcount_end(&devnet_rename_seq);
Octavian Purdilad9031022009-11-18 02:36:59 +00001071 return err;
Brian Haleyc91f6df2012-11-26 05:21:08 +00001072 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001073
Herbert Xufcc5a032007-07-30 17:03:38 -07001074rollback:
Eric W. Biedermana1b3f592010-05-04 17:36:49 -07001075 ret = device_rename(&dev->dev, dev->name);
1076 if (ret) {
1077 memcpy(dev->name, oldname, IFNAMSIZ);
Eric Dumazet30e6c9f2012-12-20 17:25:08 +00001078 write_seqcount_end(&devnet_rename_seq);
Eric W. Biedermana1b3f592010-05-04 17:36:49 -07001079 return ret;
Stephen Hemmingerdcc99772008-05-14 22:33:38 -07001080 }
Herbert Xu7f988ea2007-07-30 16:35:46 -07001081
Eric Dumazet30e6c9f2012-12-20 17:25:08 +00001082 write_seqcount_end(&devnet_rename_seq);
Brian Haleyc91f6df2012-11-26 05:21:08 +00001083
Herbert Xu7f988ea2007-07-30 16:35:46 -07001084 write_lock_bh(&dev_base_lock);
Eric Dumazet372b2312011-05-17 13:56:59 -04001085 hlist_del_rcu(&dev->name_hlist);
Eric Dumazet72c95282009-10-30 07:11:27 +00001086 write_unlock_bh(&dev_base_lock);
1087
1088 synchronize_rcu();
1089
1090 write_lock_bh(&dev_base_lock);
1091 hlist_add_head_rcu(&dev->name_hlist, dev_name_hash(net, dev->name));
Herbert Xu7f988ea2007-07-30 16:35:46 -07001092 write_unlock_bh(&dev_base_lock);
1093
Pavel Emelyanov056925a2007-09-16 15:42:43 -07001094 ret = call_netdevice_notifiers(NETDEV_CHANGENAME, dev);
Herbert Xufcc5a032007-07-30 17:03:38 -07001095 ret = notifier_to_errno(ret);
1096
1097 if (ret) {
Eric Dumazet91e9c07b2009-11-15 23:30:24 +00001098 /* err >= 0 after dev_alloc_name() or stores the first errno */
1099 if (err >= 0) {
Herbert Xufcc5a032007-07-30 17:03:38 -07001100 err = ret;
Eric Dumazet30e6c9f2012-12-20 17:25:08 +00001101 write_seqcount_begin(&devnet_rename_seq);
Herbert Xufcc5a032007-07-30 17:03:38 -07001102 memcpy(dev->name, oldname, IFNAMSIZ);
1103 goto rollback;
Eric Dumazet91e9c07b2009-11-15 23:30:24 +00001104 } else {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00001105 pr_err("%s: name change rollback failed: %d\n",
Eric Dumazet91e9c07b2009-11-15 23:30:24 +00001106 dev->name, ret);
Herbert Xufcc5a032007-07-30 17:03:38 -07001107 }
1108 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001109
1110 return err;
1111}
1112
1113/**
Stephen Hemminger0b815a12008-09-22 21:28:11 -07001114 * dev_set_alias - change ifalias of a device
1115 * @dev: device
1116 * @alias: name up to IFALIASZ
Stephen Hemmingerf0db2752008-09-30 02:23:58 -07001117 * @len: limit of bytes to copy from info
Stephen Hemminger0b815a12008-09-22 21:28:11 -07001118 *
1119 * Set ifalias for a device,
1120 */
1121int dev_set_alias(struct net_device *dev, const char *alias, size_t len)
1122{
Alexey Khoroshilov7364e442012-08-08 00:33:25 +00001123 char *new_ifalias;
1124
Stephen Hemminger0b815a12008-09-22 21:28:11 -07001125 ASSERT_RTNL();
1126
1127 if (len >= IFALIASZ)
1128 return -EINVAL;
1129
Oliver Hartkopp96ca4a22008-09-23 21:23:19 -07001130 if (!len) {
Sachin Kamat388dfc22012-11-20 00:57:04 +00001131 kfree(dev->ifalias);
1132 dev->ifalias = NULL;
Oliver Hartkopp96ca4a22008-09-23 21:23:19 -07001133 return 0;
1134 }
1135
Alexey Khoroshilov7364e442012-08-08 00:33:25 +00001136 new_ifalias = krealloc(dev->ifalias, len + 1, GFP_KERNEL);
1137 if (!new_ifalias)
Stephen Hemminger0b815a12008-09-22 21:28:11 -07001138 return -ENOMEM;
Alexey Khoroshilov7364e442012-08-08 00:33:25 +00001139 dev->ifalias = new_ifalias;
Stephen Hemminger0b815a12008-09-22 21:28:11 -07001140
1141 strlcpy(dev->ifalias, alias, len+1);
1142 return len;
1143}
1144
1145
1146/**
Stephen Hemminger3041a062006-05-26 13:25:24 -07001147 * netdev_features_change - device changes features
Stephen Hemmingerd8a33ac2005-05-29 14:13:47 -07001148 * @dev: device to cause notification
1149 *
1150 * Called to indicate a device has changed features.
1151 */
1152void netdev_features_change(struct net_device *dev)
1153{
Pavel Emelyanov056925a2007-09-16 15:42:43 -07001154 call_netdevice_notifiers(NETDEV_FEAT_CHANGE, dev);
Stephen Hemmingerd8a33ac2005-05-29 14:13:47 -07001155}
1156EXPORT_SYMBOL(netdev_features_change);
1157
1158/**
Linus Torvalds1da177e2005-04-16 15:20:36 -07001159 * netdev_state_change - device changes state
1160 * @dev: device to cause notification
1161 *
1162 * Called to indicate a device has changed state. This function calls
1163 * the notifier chains for netdev_chain and sends a NEWLINK message
1164 * to the routing socket.
1165 */
1166void netdev_state_change(struct net_device *dev)
1167{
1168 if (dev->flags & IFF_UP) {
Pavel Emelyanov056925a2007-09-16 15:42:43 -07001169 call_netdevice_notifiers(NETDEV_CHANGE, dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001170 rtmsg_ifinfo(RTM_NEWLINK, dev, 0);
1171 }
1172}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07001173EXPORT_SYMBOL(netdev_state_change);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001174
Amerigo Wangee89bab2012-08-09 22:14:56 +00001175/**
1176 * netdev_notify_peers - notify network peers about existence of @dev
1177 * @dev: network device
1178 *
1179 * Generate traffic such that interested network peers are aware of
1180 * @dev, such as by generating a gratuitous ARP. This may be used when
1181 * a device wants to inform the rest of the network about some sort of
1182 * reconfiguration such as a failover event or virtual machine
1183 * migration.
1184 */
1185void netdev_notify_peers(struct net_device *dev)
Or Gerlitzc1da4ac2008-06-13 18:12:00 -07001186{
Amerigo Wangee89bab2012-08-09 22:14:56 +00001187 rtnl_lock();
1188 call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, dev);
1189 rtnl_unlock();
Or Gerlitzc1da4ac2008-06-13 18:12:00 -07001190}
Amerigo Wangee89bab2012-08-09 22:14:56 +00001191EXPORT_SYMBOL(netdev_notify_peers);
Or Gerlitzc1da4ac2008-06-13 18:12:00 -07001192
Patrick McHardybd380812010-02-26 06:34:53 +00001193static int __dev_open(struct net_device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001194{
Stephen Hemmingerd3147742008-11-19 21:32:24 -08001195 const struct net_device_ops *ops = dev->netdev_ops;
Johannes Berg3b8bcfd2009-05-30 01:39:53 +02001196 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001197
Ben Hutchingse46b66b2008-05-08 02:53:17 -07001198 ASSERT_RTNL();
1199
Linus Torvalds1da177e2005-04-16 15:20:36 -07001200 if (!netif_device_present(dev))
1201 return -ENODEV;
1202
Neil Hormanca99ca12013-02-05 08:05:43 +00001203 /* Block netpoll from trying to do any rx path servicing.
1204 * If we don't do this there is a chance ndo_poll_controller
1205 * or ndo_poll may be running while we open the device
1206 */
1207 ret = netpoll_rx_disable(dev);
1208 if (ret)
1209 return ret;
1210
Johannes Berg3b8bcfd2009-05-30 01:39:53 +02001211 ret = call_netdevice_notifiers(NETDEV_PRE_UP, dev);
1212 ret = notifier_to_errno(ret);
1213 if (ret)
1214 return ret;
1215
Linus Torvalds1da177e2005-04-16 15:20:36 -07001216 set_bit(__LINK_STATE_START, &dev->state);
Jeff Garzikbada3392007-10-23 20:19:37 -07001217
Stephen Hemmingerd3147742008-11-19 21:32:24 -08001218 if (ops->ndo_validate_addr)
1219 ret = ops->ndo_validate_addr(dev);
Jeff Garzikbada3392007-10-23 20:19:37 -07001220
Stephen Hemmingerd3147742008-11-19 21:32:24 -08001221 if (!ret && ops->ndo_open)
1222 ret = ops->ndo_open(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001223
Neil Hormanca99ca12013-02-05 08:05:43 +00001224 netpoll_rx_enable(dev);
1225
Jeff Garzikbada3392007-10-23 20:19:37 -07001226 if (ret)
1227 clear_bit(__LINK_STATE_START, &dev->state);
1228 else {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001229 dev->flags |= IFF_UP;
David S. Millerb4bd07c2009-02-06 22:06:43 -08001230 net_dmaengine_get();
Patrick McHardy4417da62007-06-27 01:28:10 -07001231 dev_set_rx_mode(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001232 dev_activate(dev);
Theodore Ts'o7bf23572012-07-04 21:23:25 -04001233 add_device_randomness(dev->dev_addr, dev->addr_len);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001234 }
Jeff Garzikbada3392007-10-23 20:19:37 -07001235
Linus Torvalds1da177e2005-04-16 15:20:36 -07001236 return ret;
1237}
Patrick McHardybd380812010-02-26 06:34:53 +00001238
1239/**
1240 * dev_open - prepare an interface for use.
1241 * @dev: device to open
1242 *
1243 * Takes a device from down to up state. The device's private open
1244 * function is invoked and then the multicast lists are loaded. Finally
1245 * the device is moved into the up state and a %NETDEV_UP message is
1246 * sent to the netdev notifier chain.
1247 *
1248 * Calling this function on an active interface is a nop. On a failure
1249 * a negative errno code is returned.
1250 */
1251int dev_open(struct net_device *dev)
1252{
1253 int ret;
1254
Patrick McHardybd380812010-02-26 06:34:53 +00001255 if (dev->flags & IFF_UP)
1256 return 0;
1257
Patrick McHardybd380812010-02-26 06:34:53 +00001258 ret = __dev_open(dev);
1259 if (ret < 0)
1260 return ret;
1261
Patrick McHardybd380812010-02-26 06:34:53 +00001262 rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_UP|IFF_RUNNING);
1263 call_netdevice_notifiers(NETDEV_UP, dev);
1264
1265 return ret;
1266}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07001267EXPORT_SYMBOL(dev_open);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001268
Octavian Purdila44345722010-12-13 12:44:07 +00001269static int __dev_close_many(struct list_head *head)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001270{
Octavian Purdila44345722010-12-13 12:44:07 +00001271 struct net_device *dev;
Patrick McHardybd380812010-02-26 06:34:53 +00001272
Ben Hutchingse46b66b2008-05-08 02:53:17 -07001273 ASSERT_RTNL();
David S. Miller9d5010d2007-09-12 14:33:25 +02001274 might_sleep();
1275
Octavian Purdila44345722010-12-13 12:44:07 +00001276 list_for_each_entry(dev, head, unreg_list) {
Octavian Purdila44345722010-12-13 12:44:07 +00001277 call_netdevice_notifiers(NETDEV_GOING_DOWN, dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001278
Octavian Purdila44345722010-12-13 12:44:07 +00001279 clear_bit(__LINK_STATE_START, &dev->state);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001280
Octavian Purdila44345722010-12-13 12:44:07 +00001281 /* Synchronize to scheduled poll. We cannot touch poll list, it
1282 * can be even on different cpu. So just clear netif_running().
1283 *
1284 * dev->stop() will invoke napi_disable() on all of it's
1285 * napi_struct instances on this device.
1286 */
1287 smp_mb__after_clear_bit(); /* Commit netif_running(). */
1288 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001289
Octavian Purdila44345722010-12-13 12:44:07 +00001290 dev_deactivate_many(head);
1291
1292 list_for_each_entry(dev, head, unreg_list) {
1293 const struct net_device_ops *ops = dev->netdev_ops;
1294
1295 /*
1296 * Call the device specific close. This cannot fail.
1297 * Only if device is UP
1298 *
1299 * We allow it to be called even after a DETACH hot-plug
1300 * event.
1301 */
1302 if (ops->ndo_stop)
1303 ops->ndo_stop(dev);
1304
Octavian Purdila44345722010-12-13 12:44:07 +00001305 dev->flags &= ~IFF_UP;
Octavian Purdila44345722010-12-13 12:44:07 +00001306 net_dmaengine_put();
1307 }
1308
1309 return 0;
1310}
1311
1312static int __dev_close(struct net_device *dev)
1313{
Linus Torvaldsf87e6f42011-02-17 22:54:38 +00001314 int retval;
Octavian Purdila44345722010-12-13 12:44:07 +00001315 LIST_HEAD(single);
1316
Neil Hormanca99ca12013-02-05 08:05:43 +00001317 /* Temporarily disable netpoll until the interface is down */
1318 retval = netpoll_rx_disable(dev);
1319 if (retval)
1320 return retval;
1321
Octavian Purdila44345722010-12-13 12:44:07 +00001322 list_add(&dev->unreg_list, &single);
Linus Torvaldsf87e6f42011-02-17 22:54:38 +00001323 retval = __dev_close_many(&single);
1324 list_del(&single);
Neil Hormanca99ca12013-02-05 08:05:43 +00001325
1326 netpoll_rx_enable(dev);
Linus Torvaldsf87e6f42011-02-17 22:54:38 +00001327 return retval;
Octavian Purdila44345722010-12-13 12:44:07 +00001328}
1329
Eric Dumazet3fbd8752011-01-19 21:23:22 +00001330static int dev_close_many(struct list_head *head)
Octavian Purdila44345722010-12-13 12:44:07 +00001331{
1332 struct net_device *dev, *tmp;
1333 LIST_HEAD(tmp_list);
1334
1335 list_for_each_entry_safe(dev, tmp, head, unreg_list)
1336 if (!(dev->flags & IFF_UP))
1337 list_move(&dev->unreg_list, &tmp_list);
1338
1339 __dev_close_many(head);
Matti Linnanvuorid8b2a4d2008-02-12 23:10:11 -08001340
Octavian Purdila44345722010-12-13 12:44:07 +00001341 list_for_each_entry(dev, head, unreg_list) {
1342 rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_UP|IFF_RUNNING);
1343 call_netdevice_notifiers(NETDEV_DOWN, dev);
1344 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001345
Octavian Purdila44345722010-12-13 12:44:07 +00001346 /* rollback_registered_many needs the complete original list */
1347 list_splice(&tmp_list, head);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001348 return 0;
1349}
Patrick McHardybd380812010-02-26 06:34:53 +00001350
1351/**
1352 * dev_close - shutdown an interface.
1353 * @dev: device to shutdown
1354 *
1355 * This function moves an active device into down state. A
1356 * %NETDEV_GOING_DOWN is sent to the netdev notifier chain. The device
1357 * is then deactivated and finally a %NETDEV_DOWN is sent to the notifier
1358 * chain.
1359 */
1360int dev_close(struct net_device *dev)
1361{
Neil Hormanca99ca12013-02-05 08:05:43 +00001362 int ret = 0;
Eric Dumazete14a5992011-05-10 12:26:06 -07001363 if (dev->flags & IFF_UP) {
1364 LIST_HEAD(single);
Patrick McHardybd380812010-02-26 06:34:53 +00001365
Neil Hormanca99ca12013-02-05 08:05:43 +00001366 /* Block netpoll rx while the interface is going down */
1367 ret = netpoll_rx_disable(dev);
1368 if (ret)
1369 return ret;
1370
Eric Dumazete14a5992011-05-10 12:26:06 -07001371 list_add(&dev->unreg_list, &single);
1372 dev_close_many(&single);
1373 list_del(&single);
Neil Hormanca99ca12013-02-05 08:05:43 +00001374
1375 netpoll_rx_enable(dev);
Eric Dumazete14a5992011-05-10 12:26:06 -07001376 }
Neil Hormanca99ca12013-02-05 08:05:43 +00001377 return ret;
Patrick McHardybd380812010-02-26 06:34:53 +00001378}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07001379EXPORT_SYMBOL(dev_close);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001380
1381
Ben Hutchings0187bdf2008-06-19 16:15:47 -07001382/**
1383 * dev_disable_lro - disable Large Receive Offload on a device
1384 * @dev: device
1385 *
1386 * Disable Large Receive Offload (LRO) on a net device. Must be
1387 * called under RTNL. This is needed if received packets may be
1388 * forwarded to another interface.
1389 */
1390void dev_disable_lro(struct net_device *dev)
1391{
Neil Hormanf11970e2011-05-24 08:31:09 +00001392 /*
1393 * If we're trying to disable lro on a vlan device
1394 * use the underlying physical device instead
1395 */
1396 if (is_vlan_dev(dev))
1397 dev = vlan_dev_real_dev(dev);
1398
Michał Mirosławbc5787c62011-11-15 15:29:55 +00001399 dev->wanted_features &= ~NETIF_F_LRO;
1400 netdev_update_features(dev);
Michał Mirosław27660512011-03-18 16:56:34 +00001401
Michał Mirosław22d59692011-04-21 12:42:15 +00001402 if (unlikely(dev->features & NETIF_F_LRO))
1403 netdev_WARN(dev, "failed to disable LRO!\n");
Ben Hutchings0187bdf2008-06-19 16:15:47 -07001404}
1405EXPORT_SYMBOL(dev_disable_lro);
1406
1407
Eric W. Biederman881d9662007-09-17 11:56:21 -07001408static int dev_boot_phase = 1;
1409
Linus Torvalds1da177e2005-04-16 15:20:36 -07001410/**
1411 * register_netdevice_notifier - register a network notifier block
1412 * @nb: notifier
1413 *
1414 * Register a notifier to be called when network device events occur.
1415 * The notifier passed is linked into the kernel structures and must
1416 * not be reused until it has been unregistered. A negative errno code
1417 * is returned on a failure.
1418 *
1419 * When registered all registration and up events are replayed
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09001420 * to the new notifier to allow device to have a race free
Linus Torvalds1da177e2005-04-16 15:20:36 -07001421 * view of the network device list.
1422 */
1423
1424int register_netdevice_notifier(struct notifier_block *nb)
1425{
1426 struct net_device *dev;
Herbert Xufcc5a032007-07-30 17:03:38 -07001427 struct net_device *last;
Eric W. Biederman881d9662007-09-17 11:56:21 -07001428 struct net *net;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001429 int err;
1430
1431 rtnl_lock();
Alan Sternf07d5b92006-05-09 15:23:03 -07001432 err = raw_notifier_chain_register(&netdev_chain, nb);
Herbert Xufcc5a032007-07-30 17:03:38 -07001433 if (err)
1434 goto unlock;
Eric W. Biederman881d9662007-09-17 11:56:21 -07001435 if (dev_boot_phase)
1436 goto unlock;
1437 for_each_net(net) {
1438 for_each_netdev(net, dev) {
1439 err = nb->notifier_call(nb, NETDEV_REGISTER, dev);
1440 err = notifier_to_errno(err);
1441 if (err)
1442 goto rollback;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001443
Eric W. Biederman881d9662007-09-17 11:56:21 -07001444 if (!(dev->flags & IFF_UP))
1445 continue;
Herbert Xufcc5a032007-07-30 17:03:38 -07001446
Eric W. Biederman881d9662007-09-17 11:56:21 -07001447 nb->notifier_call(nb, NETDEV_UP, dev);
1448 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001449 }
Herbert Xufcc5a032007-07-30 17:03:38 -07001450
1451unlock:
Linus Torvalds1da177e2005-04-16 15:20:36 -07001452 rtnl_unlock();
1453 return err;
Herbert Xufcc5a032007-07-30 17:03:38 -07001454
1455rollback:
1456 last = dev;
Eric W. Biederman881d9662007-09-17 11:56:21 -07001457 for_each_net(net) {
1458 for_each_netdev(net, dev) {
1459 if (dev == last)
RongQing.Li8f891482011-11-30 23:43:07 -05001460 goto outroll;
Herbert Xufcc5a032007-07-30 17:03:38 -07001461
Eric W. Biederman881d9662007-09-17 11:56:21 -07001462 if (dev->flags & IFF_UP) {
1463 nb->notifier_call(nb, NETDEV_GOING_DOWN, dev);
1464 nb->notifier_call(nb, NETDEV_DOWN, dev);
1465 }
1466 nb->notifier_call(nb, NETDEV_UNREGISTER, dev);
Herbert Xufcc5a032007-07-30 17:03:38 -07001467 }
Herbert Xufcc5a032007-07-30 17:03:38 -07001468 }
Pavel Emelyanovc67625a2007-11-14 15:53:16 -08001469
RongQing.Li8f891482011-11-30 23:43:07 -05001470outroll:
Pavel Emelyanovc67625a2007-11-14 15:53:16 -08001471 raw_notifier_chain_unregister(&netdev_chain, nb);
Herbert Xufcc5a032007-07-30 17:03:38 -07001472 goto unlock;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001473}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07001474EXPORT_SYMBOL(register_netdevice_notifier);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001475
1476/**
1477 * unregister_netdevice_notifier - unregister a network notifier block
1478 * @nb: notifier
1479 *
1480 * Unregister a notifier previously registered by
1481 * register_netdevice_notifier(). The notifier is unlinked into the
1482 * kernel structures and may then be reused. A negative errno code
1483 * is returned on a failure.
Eric W. Biederman7d3d43d2012-04-06 15:33:35 +00001484 *
1485 * After unregistering unregister and down device events are synthesized
1486 * for all devices on the device list to the removed notifier to remove
1487 * the need for special case cleanup code.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001488 */
1489
1490int unregister_netdevice_notifier(struct notifier_block *nb)
1491{
Eric W. Biederman7d3d43d2012-04-06 15:33:35 +00001492 struct net_device *dev;
1493 struct net *net;
Herbert Xu9f514952006-03-25 01:24:25 -08001494 int err;
1495
1496 rtnl_lock();
Alan Sternf07d5b92006-05-09 15:23:03 -07001497 err = raw_notifier_chain_unregister(&netdev_chain, nb);
Eric W. Biederman7d3d43d2012-04-06 15:33:35 +00001498 if (err)
1499 goto unlock;
1500
1501 for_each_net(net) {
1502 for_each_netdev(net, dev) {
1503 if (dev->flags & IFF_UP) {
1504 nb->notifier_call(nb, NETDEV_GOING_DOWN, dev);
1505 nb->notifier_call(nb, NETDEV_DOWN, dev);
1506 }
1507 nb->notifier_call(nb, NETDEV_UNREGISTER, dev);
Eric W. Biederman7d3d43d2012-04-06 15:33:35 +00001508 }
1509 }
1510unlock:
Herbert Xu9f514952006-03-25 01:24:25 -08001511 rtnl_unlock();
1512 return err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001513}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07001514EXPORT_SYMBOL(unregister_netdevice_notifier);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001515
1516/**
1517 * call_netdevice_notifiers - call all network notifier blocks
1518 * @val: value passed unmodified to notifier function
Randy Dunlapc4ea43c2007-10-12 21:17:49 -07001519 * @dev: net_device pointer passed unmodified to notifier function
Linus Torvalds1da177e2005-04-16 15:20:36 -07001520 *
1521 * Call all network notifier blocks. Parameters and return value
Alan Sternf07d5b92006-05-09 15:23:03 -07001522 * are as for raw_notifier_call_chain().
Linus Torvalds1da177e2005-04-16 15:20:36 -07001523 */
1524
Eric W. Biedermanad7379d2007-09-16 15:33:32 -07001525int call_netdevice_notifiers(unsigned long val, struct net_device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001526{
Jiri Pirkoab930472010-04-20 01:45:37 -07001527 ASSERT_RTNL();
Eric W. Biedermanad7379d2007-09-16 15:33:32 -07001528 return raw_notifier_call_chain(&netdev_chain, val, dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001529}
stephen hemmingeredf947f2011-03-24 13:24:01 +00001530EXPORT_SYMBOL(call_netdevice_notifiers);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001531
Ingo Molnarc5905af2012-02-24 08:31:31 +01001532static struct static_key netstamp_needed __read_mostly;
Eric Dumazetb90e5792011-11-28 11:16:50 +00001533#ifdef HAVE_JUMP_LABEL
Ingo Molnarc5905af2012-02-24 08:31:31 +01001534/* We are not allowed to call static_key_slow_dec() from irq context
Eric Dumazetb90e5792011-11-28 11:16:50 +00001535 * If net_disable_timestamp() is called from irq context, defer the
Ingo Molnarc5905af2012-02-24 08:31:31 +01001536 * static_key_slow_dec() calls.
Eric Dumazetb90e5792011-11-28 11:16:50 +00001537 */
1538static atomic_t netstamp_needed_deferred;
1539#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -07001540
1541void net_enable_timestamp(void)
1542{
Eric Dumazetb90e5792011-11-28 11:16:50 +00001543#ifdef HAVE_JUMP_LABEL
1544 int deferred = atomic_xchg(&netstamp_needed_deferred, 0);
1545
1546 if (deferred) {
1547 while (--deferred)
Ingo Molnarc5905af2012-02-24 08:31:31 +01001548 static_key_slow_dec(&netstamp_needed);
Eric Dumazetb90e5792011-11-28 11:16:50 +00001549 return;
1550 }
1551#endif
1552 WARN_ON(in_interrupt());
Ingo Molnarc5905af2012-02-24 08:31:31 +01001553 static_key_slow_inc(&netstamp_needed);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001554}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07001555EXPORT_SYMBOL(net_enable_timestamp);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001556
1557void net_disable_timestamp(void)
1558{
Eric Dumazetb90e5792011-11-28 11:16:50 +00001559#ifdef HAVE_JUMP_LABEL
1560 if (in_interrupt()) {
1561 atomic_inc(&netstamp_needed_deferred);
1562 return;
1563 }
1564#endif
Ingo Molnarc5905af2012-02-24 08:31:31 +01001565 static_key_slow_dec(&netstamp_needed);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001566}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07001567EXPORT_SYMBOL(net_disable_timestamp);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001568
Eric Dumazet3b098e22010-05-15 23:57:10 -07001569static inline void net_timestamp_set(struct sk_buff *skb)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001570{
Eric Dumazet588f0332011-11-15 04:12:55 +00001571 skb->tstamp.tv64 = 0;
Ingo Molnarc5905af2012-02-24 08:31:31 +01001572 if (static_key_false(&netstamp_needed))
Patrick McHardya61bbcf2005-08-14 17:24:31 -07001573 __net_timestamp(skb);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001574}
1575
Eric Dumazet588f0332011-11-15 04:12:55 +00001576#define net_timestamp_check(COND, SKB) \
Ingo Molnarc5905af2012-02-24 08:31:31 +01001577 if (static_key_false(&netstamp_needed)) { \
Eric Dumazet588f0332011-11-15 04:12:55 +00001578 if ((COND) && !(SKB)->tstamp.tv64) \
1579 __net_timestamp(SKB); \
1580 } \
Eric Dumazet3b098e22010-05-15 23:57:10 -07001581
Daniel Lezcano79b569f2011-03-30 02:42:17 -07001582static inline bool is_skb_forwardable(struct net_device *dev,
1583 struct sk_buff *skb)
1584{
1585 unsigned int len;
1586
1587 if (!(dev->flags & IFF_UP))
1588 return false;
1589
1590 len = dev->mtu + dev->hard_header_len + VLAN_HLEN;
1591 if (skb->len <= len)
1592 return true;
1593
1594 /* if TSO is enabled, we don't care about the length as the packet
1595 * could be forwarded without being segmented before
1596 */
1597 if (skb_is_gso(skb))
1598 return true;
1599
1600 return false;
1601}
1602
Arnd Bergmann44540962009-11-26 06:07:08 +00001603/**
1604 * dev_forward_skb - loopback an skb to another netif
1605 *
1606 * @dev: destination network device
1607 * @skb: buffer to forward
1608 *
1609 * return values:
1610 * NET_RX_SUCCESS (no congestion)
Eric Dumazet6ec82562010-05-06 00:53:53 -07001611 * NET_RX_DROP (packet was dropped, but freed)
Arnd Bergmann44540962009-11-26 06:07:08 +00001612 *
1613 * dev_forward_skb can be used for injecting an skb from the
1614 * start_xmit function of one device into the receive queue
1615 * of another device.
1616 *
1617 * The receiving device may be in another namespace, so
1618 * we have to clear all information in the skb that could
1619 * impact namespace isolation.
1620 */
1621int dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
1622{
Michael S. Tsirkin48c83012011-08-31 08:03:29 +00001623 if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) {
1624 if (skb_copy_ubufs(skb, GFP_ATOMIC)) {
1625 atomic_long_inc(&dev->rx_dropped);
1626 kfree_skb(skb);
1627 return NET_RX_DROP;
1628 }
1629 }
1630
Arnd Bergmann44540962009-11-26 06:07:08 +00001631 skb_orphan(skb);
Ben Greearc736eef2010-07-22 09:54:47 +00001632 nf_reset(skb);
Arnd Bergmann44540962009-11-26 06:07:08 +00001633
Daniel Lezcano79b569f2011-03-30 02:42:17 -07001634 if (unlikely(!is_skb_forwardable(dev, skb))) {
Eric Dumazetcaf586e2010-09-30 21:06:55 +00001635 atomic_long_inc(&dev->rx_dropped);
Eric Dumazet6ec82562010-05-06 00:53:53 -07001636 kfree_skb(skb);
Arnd Bergmann44540962009-11-26 06:07:08 +00001637 return NET_RX_DROP;
Eric Dumazet6ec82562010-05-06 00:53:53 -07001638 }
Benjamin LaHaise3b9785c2012-03-27 15:55:44 +00001639 skb->skb_iif = 0;
David S. Miller59b99972012-05-10 23:03:34 -04001640 skb->dev = dev;
1641 skb_dst_drop(skb);
Arnd Bergmann44540962009-11-26 06:07:08 +00001642 skb->tstamp.tv64 = 0;
1643 skb->pkt_type = PACKET_HOST;
1644 skb->protocol = eth_type_trans(skb, dev);
David S. Miller59b99972012-05-10 23:03:34 -04001645 skb->mark = 0;
1646 secpath_reset(skb);
1647 nf_reset(skb);
Arnd Bergmann44540962009-11-26 06:07:08 +00001648 return netif_rx(skb);
1649}
1650EXPORT_SYMBOL_GPL(dev_forward_skb);
1651
Changli Gao71d9dec2010-12-15 19:57:25 +00001652static inline int deliver_skb(struct sk_buff *skb,
1653 struct packet_type *pt_prev,
1654 struct net_device *orig_dev)
1655{
Michael S. Tsirkin1080e512012-07-20 09:23:17 +00001656 if (unlikely(skb_orphan_frags(skb, GFP_ATOMIC)))
1657 return -ENOMEM;
Changli Gao71d9dec2010-12-15 19:57:25 +00001658 atomic_inc(&skb->users);
1659 return pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
1660}
1661
Eric Leblondc0de08d2012-08-16 22:02:58 +00001662static inline bool skb_loop_sk(struct packet_type *ptype, struct sk_buff *skb)
1663{
Eric Leblonda3d744e2012-11-06 02:10:10 +00001664 if (!ptype->af_packet_priv || !skb->sk)
Eric Leblondc0de08d2012-08-16 22:02:58 +00001665 return false;
1666
1667 if (ptype->id_match)
1668 return ptype->id_match(ptype, skb->sk);
1669 else if ((struct sock *)ptype->af_packet_priv == skb->sk)
1670 return true;
1671
1672 return false;
1673}
1674
Linus Torvalds1da177e2005-04-16 15:20:36 -07001675/*
1676 * Support routine. Sends outgoing frames to any network
1677 * taps currently in use.
1678 */
1679
Herbert Xuf6a78bf2006-06-22 02:57:17 -07001680static void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001681{
1682 struct packet_type *ptype;
Changli Gao71d9dec2010-12-15 19:57:25 +00001683 struct sk_buff *skb2 = NULL;
1684 struct packet_type *pt_prev = NULL;
Patrick McHardya61bbcf2005-08-14 17:24:31 -07001685
Linus Torvalds1da177e2005-04-16 15:20:36 -07001686 rcu_read_lock();
1687 list_for_each_entry_rcu(ptype, &ptype_all, list) {
1688 /* Never send packets back to the socket
1689 * they originated from - MvS (miquels@drinkel.ow.org)
1690 */
1691 if ((ptype->dev == dev || !ptype->dev) &&
Eric Leblondc0de08d2012-08-16 22:02:58 +00001692 (!skb_loop_sk(ptype, skb))) {
Changli Gao71d9dec2010-12-15 19:57:25 +00001693 if (pt_prev) {
1694 deliver_skb(skb2, pt_prev, skb->dev);
1695 pt_prev = ptype;
1696 continue;
1697 }
1698
1699 skb2 = skb_clone(skb, GFP_ATOMIC);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001700 if (!skb2)
1701 break;
1702
Eric Dumazet70978182010-12-20 21:22:51 +00001703 net_timestamp_set(skb2);
1704
Linus Torvalds1da177e2005-04-16 15:20:36 -07001705 /* skb->nh should be correctly
1706 set by sender, so that the second statement is
1707 just protection against buggy protocols.
1708 */
Arnaldo Carvalho de Melo459a98e2007-03-19 15:30:44 -07001709 skb_reset_mac_header(skb2);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001710
Arnaldo Carvalho de Melod56f90a2007-04-10 20:50:43 -07001711 if (skb_network_header(skb2) < skb2->data ||
Arnaldo Carvalho de Melo27a884d2007-04-19 20:29:13 -07001712 skb2->network_header > skb2->tail) {
Joe Perchese87cc472012-05-13 21:56:26 +00001713 net_crit_ratelimited("protocol %04x is buggy, dev %s\n",
1714 ntohs(skb2->protocol),
1715 dev->name);
Arnaldo Carvalho de Meloc1d2bbe2007-04-10 20:45:18 -07001716 skb_reset_network_header(skb2);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001717 }
1718
Arnaldo Carvalho de Melob0e380b2007-04-10 21:21:55 -07001719 skb2->transport_header = skb2->network_header;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001720 skb2->pkt_type = PACKET_OUTGOING;
Changli Gao71d9dec2010-12-15 19:57:25 +00001721 pt_prev = ptype;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001722 }
1723 }
Changli Gao71d9dec2010-12-15 19:57:25 +00001724 if (pt_prev)
1725 pt_prev->func(skb2, skb->dev, pt_prev, skb->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001726 rcu_read_unlock();
1727}
1728
Ben Hutchings2c530402012-07-10 10:55:09 +00001729/**
1730 * netif_setup_tc - Handle tc mappings on real_num_tx_queues change
John Fastabend4f57c082011-01-17 08:06:04 +00001731 * @dev: Network device
1732 * @txq: number of queues available
1733 *
1734 * If real_num_tx_queues is changed the tc mappings may no longer be
1735 * valid. To resolve this verify the tc mapping remains valid and if
1736 * not NULL the mapping. With no priorities mapping to this
1737 * offset/count pair it will no longer be used. In the worst case TC0
1738 * is invalid nothing can be done so disable priority mappings. If is
1739 * expected that drivers will fix this mapping if they can before
1740 * calling netif_set_real_num_tx_queues.
1741 */
Eric Dumazetbb134d22011-01-20 19:18:08 +00001742static void netif_setup_tc(struct net_device *dev, unsigned int txq)
John Fastabend4f57c082011-01-17 08:06:04 +00001743{
1744 int i;
1745 struct netdev_tc_txq *tc = &dev->tc_to_txq[0];
1746
1747 /* If TC0 is invalidated disable TC mapping */
1748 if (tc->offset + tc->count > txq) {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00001749 pr_warn("Number of in use tx queues changed invalidating tc mappings. Priority traffic classification disabled!\n");
John Fastabend4f57c082011-01-17 08:06:04 +00001750 dev->num_tc = 0;
1751 return;
1752 }
1753
1754 /* Invalidated prio to tc mappings set to TC0 */
1755 for (i = 1; i < TC_BITMASK + 1; i++) {
1756 int q = netdev_get_prio_tc_map(dev, i);
1757
1758 tc = &dev->tc_to_txq[q];
1759 if (tc->offset + tc->count > txq) {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00001760 pr_warn("Number of in use tx queues changed. Priority %i to tc mapping %i is no longer valid. Setting map to 0\n",
1761 i, q);
John Fastabend4f57c082011-01-17 08:06:04 +00001762 netdev_set_prio_tc_map(dev, i, 0);
1763 }
1764 }
1765}
1766
Alexander Duyck537c00d2013-01-10 08:57:02 +00001767#ifdef CONFIG_XPS
1768static DEFINE_MUTEX(xps_map_mutex);
1769#define xmap_dereference(P) \
1770 rcu_dereference_protected((P), lockdep_is_held(&xps_map_mutex))
1771
Alexander Duyck10cdc3f2013-01-10 08:57:17 +00001772static struct xps_map *remove_xps_queue(struct xps_dev_maps *dev_maps,
1773 int cpu, u16 index)
1774{
1775 struct xps_map *map = NULL;
1776 int pos;
1777
1778 if (dev_maps)
1779 map = xmap_dereference(dev_maps->cpu_map[cpu]);
1780
1781 for (pos = 0; map && pos < map->len; pos++) {
1782 if (map->queues[pos] == index) {
1783 if (map->len > 1) {
1784 map->queues[pos] = map->queues[--map->len];
1785 } else {
1786 RCU_INIT_POINTER(dev_maps->cpu_map[cpu], NULL);
1787 kfree_rcu(map, rcu);
1788 map = NULL;
1789 }
1790 break;
1791 }
1792 }
1793
1794 return map;
1795}
1796
Alexander Duyck024e9672013-01-10 08:57:46 +00001797static void netif_reset_xps_queues_gt(struct net_device *dev, u16 index)
Alexander Duyck537c00d2013-01-10 08:57:02 +00001798{
1799 struct xps_dev_maps *dev_maps;
Alexander Duyck024e9672013-01-10 08:57:46 +00001800 int cpu, i;
Alexander Duyck10cdc3f2013-01-10 08:57:17 +00001801 bool active = false;
Alexander Duyck537c00d2013-01-10 08:57:02 +00001802
1803 mutex_lock(&xps_map_mutex);
1804 dev_maps = xmap_dereference(dev->xps_maps);
1805
1806 if (!dev_maps)
1807 goto out_no_maps;
1808
Alexander Duyck10cdc3f2013-01-10 08:57:17 +00001809 for_each_possible_cpu(cpu) {
Alexander Duyck024e9672013-01-10 08:57:46 +00001810 for (i = index; i < dev->num_tx_queues; i++) {
1811 if (!remove_xps_queue(dev_maps, cpu, i))
1812 break;
1813 }
1814 if (i == dev->num_tx_queues)
Alexander Duyck10cdc3f2013-01-10 08:57:17 +00001815 active = true;
Alexander Duyck537c00d2013-01-10 08:57:02 +00001816 }
1817
Alexander Duyck10cdc3f2013-01-10 08:57:17 +00001818 if (!active) {
Alexander Duyck537c00d2013-01-10 08:57:02 +00001819 RCU_INIT_POINTER(dev->xps_maps, NULL);
1820 kfree_rcu(dev_maps, rcu);
1821 }
1822
Alexander Duyck024e9672013-01-10 08:57:46 +00001823 for (i = index; i < dev->num_tx_queues; i++)
1824 netdev_queue_numa_node_write(netdev_get_tx_queue(dev, i),
1825 NUMA_NO_NODE);
1826
Alexander Duyck537c00d2013-01-10 08:57:02 +00001827out_no_maps:
1828 mutex_unlock(&xps_map_mutex);
1829}
1830
Alexander Duyck01c5f862013-01-10 08:57:35 +00001831static struct xps_map *expand_xps_map(struct xps_map *map,
1832 int cpu, u16 index)
1833{
1834 struct xps_map *new_map;
1835 int alloc_len = XPS_MIN_MAP_ALLOC;
1836 int i, pos;
1837
1838 for (pos = 0; map && pos < map->len; pos++) {
1839 if (map->queues[pos] != index)
1840 continue;
1841 return map;
1842 }
1843
1844 /* Need to add queue to this CPU's existing map */
1845 if (map) {
1846 if (pos < map->alloc_len)
1847 return map;
1848
1849 alloc_len = map->alloc_len * 2;
1850 }
1851
1852 /* Need to allocate new map to store queue on this CPU's map */
1853 new_map = kzalloc_node(XPS_MAP_SIZE(alloc_len), GFP_KERNEL,
1854 cpu_to_node(cpu));
1855 if (!new_map)
1856 return NULL;
1857
1858 for (i = 0; i < pos; i++)
1859 new_map->queues[i] = map->queues[i];
1860 new_map->alloc_len = alloc_len;
1861 new_map->len = pos;
1862
1863 return new_map;
1864}
1865
Alexander Duyck537c00d2013-01-10 08:57:02 +00001866int netif_set_xps_queue(struct net_device *dev, struct cpumask *mask, u16 index)
1867{
Alexander Duyck01c5f862013-01-10 08:57:35 +00001868 struct xps_dev_maps *dev_maps, *new_dev_maps = NULL;
Alexander Duyck537c00d2013-01-10 08:57:02 +00001869 struct xps_map *map, *new_map;
Alexander Duyck537c00d2013-01-10 08:57:02 +00001870 int maps_sz = max_t(unsigned int, XPS_DEV_MAPS_SIZE, L1_CACHE_BYTES);
Alexander Duyck01c5f862013-01-10 08:57:35 +00001871 int cpu, numa_node_id = -2;
1872 bool active = false;
Alexander Duyck537c00d2013-01-10 08:57:02 +00001873
1874 mutex_lock(&xps_map_mutex);
1875
1876 dev_maps = xmap_dereference(dev->xps_maps);
1877
Alexander Duyck01c5f862013-01-10 08:57:35 +00001878 /* allocate memory for queue storage */
1879 for_each_online_cpu(cpu) {
1880 if (!cpumask_test_cpu(cpu, mask))
1881 continue;
Alexander Duyck537c00d2013-01-10 08:57:02 +00001882
Alexander Duyck01c5f862013-01-10 08:57:35 +00001883 if (!new_dev_maps)
1884 new_dev_maps = kzalloc(maps_sz, GFP_KERNEL);
1885 if (!new_dev_maps)
1886 return -ENOMEM;
1887
1888 map = dev_maps ? xmap_dereference(dev_maps->cpu_map[cpu]) :
1889 NULL;
1890
1891 map = expand_xps_map(map, cpu, index);
1892 if (!map)
1893 goto error;
1894
1895 RCU_INIT_POINTER(new_dev_maps->cpu_map[cpu], map);
1896 }
1897
1898 if (!new_dev_maps)
1899 goto out_no_new_maps;
1900
1901 for_each_possible_cpu(cpu) {
1902 if (cpumask_test_cpu(cpu, mask) && cpu_online(cpu)) {
1903 /* add queue to CPU maps */
1904 int pos = 0;
1905
1906 map = xmap_dereference(new_dev_maps->cpu_map[cpu]);
1907 while ((pos < map->len) && (map->queues[pos] != index))
1908 pos++;
1909
1910 if (pos == map->len)
1911 map->queues[map->len++] = index;
Alexander Duyck537c00d2013-01-10 08:57:02 +00001912#ifdef CONFIG_NUMA
Alexander Duyck537c00d2013-01-10 08:57:02 +00001913 if (numa_node_id == -2)
1914 numa_node_id = cpu_to_node(cpu);
1915 else if (numa_node_id != cpu_to_node(cpu))
1916 numa_node_id = -1;
Alexander Duyck537c00d2013-01-10 08:57:02 +00001917#endif
Alexander Duyck01c5f862013-01-10 08:57:35 +00001918 } else if (dev_maps) {
1919 /* fill in the new device map from the old device map */
1920 map = xmap_dereference(dev_maps->cpu_map[cpu]);
1921 RCU_INIT_POINTER(new_dev_maps->cpu_map[cpu], map);
Alexander Duyck537c00d2013-01-10 08:57:02 +00001922 }
Alexander Duyck01c5f862013-01-10 08:57:35 +00001923
Alexander Duyck537c00d2013-01-10 08:57:02 +00001924 }
1925
Alexander Duyck01c5f862013-01-10 08:57:35 +00001926 rcu_assign_pointer(dev->xps_maps, new_dev_maps);
1927
Alexander Duyck537c00d2013-01-10 08:57:02 +00001928 /* Cleanup old maps */
Alexander Duyck01c5f862013-01-10 08:57:35 +00001929 if (dev_maps) {
1930 for_each_possible_cpu(cpu) {
1931 new_map = xmap_dereference(new_dev_maps->cpu_map[cpu]);
1932 map = xmap_dereference(dev_maps->cpu_map[cpu]);
1933 if (map && map != new_map)
1934 kfree_rcu(map, rcu);
1935 }
Alexander Duyck537c00d2013-01-10 08:57:02 +00001936
Alexander Duyck537c00d2013-01-10 08:57:02 +00001937 kfree_rcu(dev_maps, rcu);
Alexander Duyck01c5f862013-01-10 08:57:35 +00001938 }
Alexander Duyck537c00d2013-01-10 08:57:02 +00001939
Alexander Duyck01c5f862013-01-10 08:57:35 +00001940 dev_maps = new_dev_maps;
1941 active = true;
1942
1943out_no_new_maps:
1944 /* update Tx queue numa node */
Alexander Duyck537c00d2013-01-10 08:57:02 +00001945 netdev_queue_numa_node_write(netdev_get_tx_queue(dev, index),
1946 (numa_node_id >= 0) ? numa_node_id :
1947 NUMA_NO_NODE);
1948
Alexander Duyck01c5f862013-01-10 08:57:35 +00001949 if (!dev_maps)
1950 goto out_no_maps;
1951
1952 /* removes queue from unused CPUs */
1953 for_each_possible_cpu(cpu) {
1954 if (cpumask_test_cpu(cpu, mask) && cpu_online(cpu))
1955 continue;
1956
1957 if (remove_xps_queue(dev_maps, cpu, index))
1958 active = true;
1959 }
1960
1961 /* free map if not active */
1962 if (!active) {
1963 RCU_INIT_POINTER(dev->xps_maps, NULL);
1964 kfree_rcu(dev_maps, rcu);
1965 }
1966
1967out_no_maps:
Alexander Duyck537c00d2013-01-10 08:57:02 +00001968 mutex_unlock(&xps_map_mutex);
1969
1970 return 0;
1971error:
Alexander Duyck01c5f862013-01-10 08:57:35 +00001972 /* remove any maps that we added */
1973 for_each_possible_cpu(cpu) {
1974 new_map = xmap_dereference(new_dev_maps->cpu_map[cpu]);
1975 map = dev_maps ? xmap_dereference(dev_maps->cpu_map[cpu]) :
1976 NULL;
1977 if (new_map && new_map != map)
1978 kfree(new_map);
1979 }
1980
Alexander Duyck537c00d2013-01-10 08:57:02 +00001981 mutex_unlock(&xps_map_mutex);
1982
Alexander Duyck537c00d2013-01-10 08:57:02 +00001983 kfree(new_dev_maps);
1984 return -ENOMEM;
1985}
1986EXPORT_SYMBOL(netif_set_xps_queue);
1987
1988#endif
John Fastabendf0796d52010-07-01 13:21:57 +00001989/*
1990 * Routine to help set real_num_tx_queues. To avoid skbs mapped to queues
1991 * greater then real_num_tx_queues stale skbs on the qdisc must be flushed.
1992 */
Tom Herberte6484932010-10-18 18:04:39 +00001993int netif_set_real_num_tx_queues(struct net_device *dev, unsigned int txq)
John Fastabendf0796d52010-07-01 13:21:57 +00001994{
Tom Herbert1d24eb42010-11-21 13:17:27 +00001995 int rc;
1996
Tom Herberte6484932010-10-18 18:04:39 +00001997 if (txq < 1 || txq > dev->num_tx_queues)
1998 return -EINVAL;
John Fastabendf0796d52010-07-01 13:21:57 +00001999
Ben Hutchings5c565802011-02-15 19:39:21 +00002000 if (dev->reg_state == NETREG_REGISTERED ||
2001 dev->reg_state == NETREG_UNREGISTERING) {
Tom Herberte6484932010-10-18 18:04:39 +00002002 ASSERT_RTNL();
2003
Tom Herbert1d24eb42010-11-21 13:17:27 +00002004 rc = netdev_queue_update_kobjects(dev, dev->real_num_tx_queues,
2005 txq);
Tom Herbertbf264142010-11-26 08:36:09 +00002006 if (rc)
2007 return rc;
2008
John Fastabend4f57c082011-01-17 08:06:04 +00002009 if (dev->num_tc)
2010 netif_setup_tc(dev, txq);
2011
Alexander Duyck024e9672013-01-10 08:57:46 +00002012 if (txq < dev->real_num_tx_queues) {
Tom Herberte6484932010-10-18 18:04:39 +00002013 qdisc_reset_all_tx_gt(dev, txq);
Alexander Duyck024e9672013-01-10 08:57:46 +00002014#ifdef CONFIG_XPS
2015 netif_reset_xps_queues_gt(dev, txq);
2016#endif
2017 }
John Fastabendf0796d52010-07-01 13:21:57 +00002018 }
Tom Herberte6484932010-10-18 18:04:39 +00002019
2020 dev->real_num_tx_queues = txq;
2021 return 0;
John Fastabendf0796d52010-07-01 13:21:57 +00002022}
2023EXPORT_SYMBOL(netif_set_real_num_tx_queues);
Denis Vlasenko56079432006-03-29 15:57:29 -08002024
Ben Hutchings62fe0b42010-09-27 08:24:33 +00002025#ifdef CONFIG_RPS
2026/**
2027 * netif_set_real_num_rx_queues - set actual number of RX queues used
2028 * @dev: Network device
2029 * @rxq: Actual number of RX queues
2030 *
2031 * This must be called either with the rtnl_lock held or before
2032 * registration of the net device. Returns 0 on success, or a
Ben Hutchings4e7f7952010-10-08 10:33:39 -07002033 * negative error code. If called before registration, it always
2034 * succeeds.
Ben Hutchings62fe0b42010-09-27 08:24:33 +00002035 */
2036int netif_set_real_num_rx_queues(struct net_device *dev, unsigned int rxq)
2037{
2038 int rc;
2039
Tom Herbertbd25fa72010-10-18 18:00:16 +00002040 if (rxq < 1 || rxq > dev->num_rx_queues)
2041 return -EINVAL;
2042
Ben Hutchings62fe0b42010-09-27 08:24:33 +00002043 if (dev->reg_state == NETREG_REGISTERED) {
2044 ASSERT_RTNL();
2045
Ben Hutchings62fe0b42010-09-27 08:24:33 +00002046 rc = net_rx_queue_update_kobjects(dev, dev->real_num_rx_queues,
2047 rxq);
2048 if (rc)
2049 return rc;
Ben Hutchings62fe0b42010-09-27 08:24:33 +00002050 }
2051
2052 dev->real_num_rx_queues = rxq;
2053 return 0;
2054}
2055EXPORT_SYMBOL(netif_set_real_num_rx_queues);
2056#endif
2057
Ben Hutchings2c530402012-07-10 10:55:09 +00002058/**
2059 * netif_get_num_default_rss_queues - default number of RSS queues
Yuval Mintz16917b82012-07-01 03:18:50 +00002060 *
2061 * This routine should set an upper limit on the number of RSS queues
2062 * used by default by multiqueue devices.
2063 */
Ben Hutchingsa55b1382012-07-10 10:54:38 +00002064int netif_get_num_default_rss_queues(void)
Yuval Mintz16917b82012-07-01 03:18:50 +00002065{
2066 return min_t(int, DEFAULT_MAX_NUM_RSS_QUEUES, num_online_cpus());
2067}
2068EXPORT_SYMBOL(netif_get_num_default_rss_queues);
2069
Jarek Poplawskidef82a12008-08-17 21:54:43 -07002070static inline void __netif_reschedule(struct Qdisc *q)
2071{
2072 struct softnet_data *sd;
2073 unsigned long flags;
2074
2075 local_irq_save(flags);
2076 sd = &__get_cpu_var(softnet_data);
Changli Gaoa9cbd582010-04-26 23:06:24 +00002077 q->next_sched = NULL;
2078 *sd->output_queue_tailp = q;
2079 sd->output_queue_tailp = &q->next_sched;
Jarek Poplawskidef82a12008-08-17 21:54:43 -07002080 raise_softirq_irqoff(NET_TX_SOFTIRQ);
2081 local_irq_restore(flags);
2082}
2083
David S. Miller37437bb2008-07-16 02:15:04 -07002084void __netif_schedule(struct Qdisc *q)
Denis Vlasenko56079432006-03-29 15:57:29 -08002085{
Jarek Poplawskidef82a12008-08-17 21:54:43 -07002086 if (!test_and_set_bit(__QDISC_STATE_SCHED, &q->state))
2087 __netif_reschedule(q);
Denis Vlasenko56079432006-03-29 15:57:29 -08002088}
2089EXPORT_SYMBOL(__netif_schedule);
2090
Stephen Hemmingerbea33482007-10-03 16:41:36 -07002091void dev_kfree_skb_irq(struct sk_buff *skb)
Denis Vlasenko56079432006-03-29 15:57:29 -08002092{
David S. Miller3578b0c2010-08-03 00:24:04 -07002093 if (atomic_dec_and_test(&skb->users)) {
Stephen Hemmingerbea33482007-10-03 16:41:36 -07002094 struct softnet_data *sd;
2095 unsigned long flags;
Denis Vlasenko56079432006-03-29 15:57:29 -08002096
Stephen Hemmingerbea33482007-10-03 16:41:36 -07002097 local_irq_save(flags);
2098 sd = &__get_cpu_var(softnet_data);
2099 skb->next = sd->completion_queue;
2100 sd->completion_queue = skb;
2101 raise_softirq_irqoff(NET_TX_SOFTIRQ);
2102 local_irq_restore(flags);
2103 }
Denis Vlasenko56079432006-03-29 15:57:29 -08002104}
Stephen Hemmingerbea33482007-10-03 16:41:36 -07002105EXPORT_SYMBOL(dev_kfree_skb_irq);
Denis Vlasenko56079432006-03-29 15:57:29 -08002106
2107void dev_kfree_skb_any(struct sk_buff *skb)
2108{
2109 if (in_irq() || irqs_disabled())
2110 dev_kfree_skb_irq(skb);
2111 else
2112 dev_kfree_skb(skb);
2113}
2114EXPORT_SYMBOL(dev_kfree_skb_any);
2115
2116
Stephen Hemmingerbea33482007-10-03 16:41:36 -07002117/**
2118 * netif_device_detach - mark device as removed
2119 * @dev: network device
2120 *
2121 * Mark device as removed from system and therefore no longer available.
2122 */
Denis Vlasenko56079432006-03-29 15:57:29 -08002123void netif_device_detach(struct net_device *dev)
2124{
2125 if (test_and_clear_bit(__LINK_STATE_PRESENT, &dev->state) &&
2126 netif_running(dev)) {
Alexander Duyckd5431032009-04-08 13:15:22 +00002127 netif_tx_stop_all_queues(dev);
Denis Vlasenko56079432006-03-29 15:57:29 -08002128 }
2129}
2130EXPORT_SYMBOL(netif_device_detach);
2131
Stephen Hemmingerbea33482007-10-03 16:41:36 -07002132/**
2133 * netif_device_attach - mark device as attached
2134 * @dev: network device
2135 *
2136 * Mark device as attached from system and restart if needed.
2137 */
Denis Vlasenko56079432006-03-29 15:57:29 -08002138void netif_device_attach(struct net_device *dev)
2139{
2140 if (!test_and_set_bit(__LINK_STATE_PRESENT, &dev->state) &&
2141 netif_running(dev)) {
Alexander Duyckd5431032009-04-08 13:15:22 +00002142 netif_tx_wake_all_queues(dev);
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09002143 __netdev_watchdog_up(dev);
Denis Vlasenko56079432006-03-29 15:57:29 -08002144 }
2145}
2146EXPORT_SYMBOL(netif_device_attach);
2147
Ben Hutchings36c92472012-01-17 07:57:56 +00002148static void skb_warn_bad_offload(const struct sk_buff *skb)
2149{
Michał Mirosław65e9d2f2012-01-17 10:00:40 +00002150 static const netdev_features_t null_features = 0;
Ben Hutchings36c92472012-01-17 07:57:56 +00002151 struct net_device *dev = skb->dev;
2152 const char *driver = "";
2153
2154 if (dev && dev->dev.parent)
2155 driver = dev_driver_string(dev->dev.parent);
2156
2157 WARN(1, "%s: caps=(%pNF, %pNF) len=%d data_len=%d gso_size=%d "
2158 "gso_type=%d ip_summed=%d\n",
Michał Mirosław65e9d2f2012-01-17 10:00:40 +00002159 driver, dev ? &dev->features : &null_features,
2160 skb->sk ? &skb->sk->sk_route_caps : &null_features,
Ben Hutchings36c92472012-01-17 07:57:56 +00002161 skb->len, skb->data_len, skb_shinfo(skb)->gso_size,
2162 skb_shinfo(skb)->gso_type, skb->ip_summed);
2163}
2164
Linus Torvalds1da177e2005-04-16 15:20:36 -07002165/*
2166 * Invalidate hardware checksum when packet is to be mangled, and
2167 * complete checksum manually on outgoing path.
2168 */
Patrick McHardy84fa7932006-08-29 16:44:56 -07002169int skb_checksum_help(struct sk_buff *skb)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002170{
Al Virod3bc23e2006-11-14 21:24:49 -08002171 __wsum csum;
Herbert Xu663ead32007-04-09 11:59:07 -07002172 int ret = 0, offset;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002173
Patrick McHardy84fa7932006-08-29 16:44:56 -07002174 if (skb->ip_summed == CHECKSUM_COMPLETE)
Herbert Xua430a432006-07-08 13:34:56 -07002175 goto out_set_summed;
2176
2177 if (unlikely(skb_shinfo(skb)->gso_size)) {
Ben Hutchings36c92472012-01-17 07:57:56 +00002178 skb_warn_bad_offload(skb);
2179 return -EINVAL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002180 }
2181
Eric Dumazetcef401d2013-01-25 20:34:37 +00002182 /* Before computing a checksum, we should make sure no frag could
2183 * be modified by an external entity : checksum could be wrong.
2184 */
2185 if (skb_has_shared_frag(skb)) {
2186 ret = __skb_linearize(skb);
2187 if (ret)
2188 goto out;
2189 }
2190
Michał Mirosław55508d62010-12-14 15:24:08 +00002191 offset = skb_checksum_start_offset(skb);
Herbert Xua0308472007-10-15 01:47:15 -07002192 BUG_ON(offset >= skb_headlen(skb));
2193 csum = skb_checksum(skb, offset, skb->len - offset, 0);
2194
2195 offset += skb->csum_offset;
2196 BUG_ON(offset + sizeof(__sum16) > skb_headlen(skb));
2197
2198 if (skb_cloned(skb) &&
2199 !skb_clone_writable(skb, offset + sizeof(__sum16))) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002200 ret = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
2201 if (ret)
2202 goto out;
2203 }
2204
Herbert Xua0308472007-10-15 01:47:15 -07002205 *(__sum16 *)(skb->data + offset) = csum_fold(csum);
Herbert Xua430a432006-07-08 13:34:56 -07002206out_set_summed:
Linus Torvalds1da177e2005-04-16 15:20:36 -07002207 skb->ip_summed = CHECKSUM_NONE;
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09002208out:
Linus Torvalds1da177e2005-04-16 15:20:36 -07002209 return ret;
2210}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07002211EXPORT_SYMBOL(skb_checksum_help);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002212
Pravin B Shelar05e8ef42013-02-14 09:44:55 +00002213/**
2214 * skb_mac_gso_segment - mac layer segmentation handler.
2215 * @skb: buffer to segment
2216 * @features: features for the output path (see dev->features)
2217 */
2218struct sk_buff *skb_mac_gso_segment(struct sk_buff *skb,
2219 netdev_features_t features)
2220{
2221 struct sk_buff *segs = ERR_PTR(-EPROTONOSUPPORT);
2222 struct packet_offload *ptype;
2223 __be16 type = skb->protocol;
2224
2225 while (type == htons(ETH_P_8021Q)) {
2226 int vlan_depth = ETH_HLEN;
2227 struct vlan_hdr *vh;
2228
2229 if (unlikely(!pskb_may_pull(skb, vlan_depth + VLAN_HLEN)))
2230 return ERR_PTR(-EINVAL);
2231
2232 vh = (struct vlan_hdr *)(skb->data + vlan_depth);
2233 type = vh->h_vlan_encapsulated_proto;
2234 vlan_depth += VLAN_HLEN;
2235 }
2236
2237 __skb_pull(skb, skb->mac_len);
2238
2239 rcu_read_lock();
2240 list_for_each_entry_rcu(ptype, &offload_base, list) {
2241 if (ptype->type == type && ptype->callbacks.gso_segment) {
2242 if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) {
2243 int err;
2244
2245 err = ptype->callbacks.gso_send_check(skb);
2246 segs = ERR_PTR(err);
2247 if (err || skb_gso_ok(skb, features))
2248 break;
2249 __skb_push(skb, (skb->data -
2250 skb_network_header(skb)));
2251 }
2252 segs = ptype->callbacks.gso_segment(skb, features);
2253 break;
2254 }
2255 }
2256 rcu_read_unlock();
2257
2258 __skb_push(skb, skb->data - skb_mac_header(skb));
2259
2260 return segs;
2261}
2262EXPORT_SYMBOL(skb_mac_gso_segment);
2263
2264
Cong Wang12b00042013-02-05 16:36:38 +00002265/* openvswitch calls this on rx path, so we need a different check.
2266 */
2267static inline bool skb_needs_check(struct sk_buff *skb, bool tx_path)
2268{
2269 if (tx_path)
2270 return skb->ip_summed != CHECKSUM_PARTIAL;
2271 else
2272 return skb->ip_summed == CHECKSUM_NONE;
2273}
2274
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002275/**
Cong Wang12b00042013-02-05 16:36:38 +00002276 * __skb_gso_segment - Perform segmentation on skb.
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002277 * @skb: buffer to segment
Herbert Xu576a30e2006-06-27 13:22:38 -07002278 * @features: features for the output path (see dev->features)
Cong Wang12b00042013-02-05 16:36:38 +00002279 * @tx_path: whether it is called in TX path
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002280 *
2281 * This function segments the given skb and returns a list of segments.
Herbert Xu576a30e2006-06-27 13:22:38 -07002282 *
2283 * It may return NULL if the skb requires no segmentation. This is
2284 * only possible when GSO is used for verifying header integrity.
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002285 */
Cong Wang12b00042013-02-05 16:36:38 +00002286struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
2287 netdev_features_t features, bool tx_path)
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002288{
Cong Wang12b00042013-02-05 16:36:38 +00002289 if (unlikely(skb_needs_check(skb, tx_path))) {
Pravin B Shelar05e8ef42013-02-14 09:44:55 +00002290 int err;
2291
Ben Hutchings36c92472012-01-17 07:57:56 +00002292 skb_warn_bad_offload(skb);
Herbert Xu67fd1a72009-01-19 16:26:44 -08002293
Herbert Xua430a432006-07-08 13:34:56 -07002294 if (skb_header_cloned(skb) &&
2295 (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC)))
2296 return ERR_PTR(err);
2297 }
2298
Pravin B Shelar68c33162013-02-14 14:02:41 +00002299 SKB_GSO_CB(skb)->mac_offset = skb_headroom(skb);
Pravin B Shelar05e8ef42013-02-14 09:44:55 +00002300 skb_reset_mac_header(skb);
2301 skb_reset_mac_len(skb);
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002302
Pravin B Shelar05e8ef42013-02-14 09:44:55 +00002303 return skb_mac_gso_segment(skb, features);
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002304}
Cong Wang12b00042013-02-05 16:36:38 +00002305EXPORT_SYMBOL(__skb_gso_segment);
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002306
Herbert Xufb286bb2005-11-10 13:01:24 -08002307/* Take action when hardware reception checksum errors are detected. */
2308#ifdef CONFIG_BUG
2309void netdev_rx_csum_fault(struct net_device *dev)
2310{
2311 if (net_ratelimit()) {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00002312 pr_err("%s: hw csum failure\n", dev ? dev->name : "<unknown>");
Herbert Xufb286bb2005-11-10 13:01:24 -08002313 dump_stack();
2314 }
2315}
2316EXPORT_SYMBOL(netdev_rx_csum_fault);
2317#endif
2318
Linus Torvalds1da177e2005-04-16 15:20:36 -07002319/* Actually, we should eliminate this check as soon as we know, that:
2320 * 1. IOMMU is present and allows to map all the memory.
2321 * 2. No high memory really exists on this machine.
2322 */
2323
Eric Dumazet9092c652010-04-02 13:34:49 -07002324static int illegal_highdma(struct net_device *dev, struct sk_buff *skb)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002325{
Herbert Xu3d3a8532006-06-27 13:33:10 -07002326#ifdef CONFIG_HIGHMEM
Linus Torvalds1da177e2005-04-16 15:20:36 -07002327 int i;
FUJITA Tomonori5acbbd42010-03-30 22:35:50 +00002328 if (!(dev->features & NETIF_F_HIGHDMA)) {
Ian Campbellea2ab692011-08-22 23:44:58 +00002329 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2330 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2331 if (PageHighMem(skb_frag_page(frag)))
FUJITA Tomonori5acbbd42010-03-30 22:35:50 +00002332 return 1;
Ian Campbellea2ab692011-08-22 23:44:58 +00002333 }
FUJITA Tomonori5acbbd42010-03-30 22:35:50 +00002334 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07002335
FUJITA Tomonori5acbbd42010-03-30 22:35:50 +00002336 if (PCI_DMA_BUS_IS_PHYS) {
2337 struct device *pdev = dev->dev.parent;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002338
Eric Dumazet9092c652010-04-02 13:34:49 -07002339 if (!pdev)
2340 return 0;
FUJITA Tomonori5acbbd42010-03-30 22:35:50 +00002341 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
Ian Campbellea2ab692011-08-22 23:44:58 +00002342 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2343 dma_addr_t addr = page_to_phys(skb_frag_page(frag));
FUJITA Tomonori5acbbd42010-03-30 22:35:50 +00002344 if (!pdev->dma_mask || addr + PAGE_SIZE - 1 > *pdev->dma_mask)
2345 return 1;
2346 }
2347 }
Herbert Xu3d3a8532006-06-27 13:33:10 -07002348#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -07002349 return 0;
2350}
Linus Torvalds1da177e2005-04-16 15:20:36 -07002351
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002352struct dev_gso_cb {
2353 void (*destructor)(struct sk_buff *skb);
2354};
2355
2356#define DEV_GSO_CB(skb) ((struct dev_gso_cb *)(skb)->cb)
2357
2358static void dev_gso_skb_destructor(struct sk_buff *skb)
2359{
2360 struct dev_gso_cb *cb;
2361
2362 do {
2363 struct sk_buff *nskb = skb->next;
2364
2365 skb->next = nskb->next;
2366 nskb->next = NULL;
2367 kfree_skb(nskb);
2368 } while (skb->next);
2369
2370 cb = DEV_GSO_CB(skb);
2371 if (cb->destructor)
2372 cb->destructor(skb);
2373}
2374
2375/**
2376 * dev_gso_segment - Perform emulated hardware segmentation on skb.
2377 * @skb: buffer to segment
Jesse Gross91ecb632011-01-09 06:23:33 +00002378 * @features: device features as applicable to this skb
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002379 *
2380 * This function segments the given skb and stores the list of segments
2381 * in skb->next.
2382 */
Michał Mirosławc8f44af2011-11-15 15:29:55 +00002383static int dev_gso_segment(struct sk_buff *skb, netdev_features_t features)
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002384{
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002385 struct sk_buff *segs;
2386
Herbert Xu576a30e2006-06-27 13:22:38 -07002387 segs = skb_gso_segment(skb, features);
2388
2389 /* Verifying header integrity only. */
2390 if (!segs)
2391 return 0;
2392
Hirofumi Nakagawa801678c2008-04-29 01:03:09 -07002393 if (IS_ERR(segs))
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002394 return PTR_ERR(segs);
2395
2396 skb->next = segs;
2397 DEV_GSO_CB(skb)->destructor = skb->destructor;
2398 skb->destructor = dev_gso_skb_destructor;
2399
2400 return 0;
2401}
2402
Michał Mirosławc8f44af2011-11-15 15:29:55 +00002403static bool can_checksum_protocol(netdev_features_t features, __be16 protocol)
Jesse Gross03634662011-01-09 06:23:35 +00002404{
2405 return ((features & NETIF_F_GEN_CSUM) ||
2406 ((features & NETIF_F_V4_CSUM) &&
2407 protocol == htons(ETH_P_IP)) ||
2408 ((features & NETIF_F_V6_CSUM) &&
2409 protocol == htons(ETH_P_IPV6)) ||
2410 ((features & NETIF_F_FCOE_CRC) &&
2411 protocol == htons(ETH_P_FCOE)));
2412}
2413
Michał Mirosławc8f44af2011-11-15 15:29:55 +00002414static netdev_features_t harmonize_features(struct sk_buff *skb,
2415 __be16 protocol, netdev_features_t features)
Jesse Grossf01a5232011-01-09 06:23:31 +00002416{
Ed Cashinc0d680e2012-09-19 15:49:00 +00002417 if (skb->ip_summed != CHECKSUM_NONE &&
2418 !can_checksum_protocol(features, protocol)) {
Jesse Grossf01a5232011-01-09 06:23:31 +00002419 features &= ~NETIF_F_ALL_CSUM;
2420 features &= ~NETIF_F_SG;
2421 } else if (illegal_highdma(skb->dev, skb)) {
2422 features &= ~NETIF_F_SG;
2423 }
2424
2425 return features;
2426}
2427
Michał Mirosławc8f44af2011-11-15 15:29:55 +00002428netdev_features_t netif_skb_features(struct sk_buff *skb)
Jesse Gross58e998c2010-10-29 12:14:55 +00002429{
2430 __be16 protocol = skb->protocol;
Michał Mirosławc8f44af2011-11-15 15:29:55 +00002431 netdev_features_t features = skb->dev->features;
Jesse Gross58e998c2010-10-29 12:14:55 +00002432
Ben Hutchings30b678d2012-07-30 15:57:00 +00002433 if (skb_shinfo(skb)->gso_segs > skb->dev->gso_max_segs)
2434 features &= ~NETIF_F_GSO_MASK;
2435
Jesse Gross58e998c2010-10-29 12:14:55 +00002436 if (protocol == htons(ETH_P_8021Q)) {
2437 struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data;
2438 protocol = veh->h_vlan_encapsulated_proto;
Jesse Grossf01a5232011-01-09 06:23:31 +00002439 } else if (!vlan_tx_tag_present(skb)) {
2440 return harmonize_features(skb, protocol, features);
2441 }
Jesse Gross58e998c2010-10-29 12:14:55 +00002442
Jesse Gross6ee400a2011-01-17 20:46:00 +00002443 features &= (skb->dev->vlan_features | NETIF_F_HW_VLAN_TX);
Jesse Grossf01a5232011-01-09 06:23:31 +00002444
2445 if (protocol != htons(ETH_P_8021Q)) {
2446 return harmonize_features(skb, protocol, features);
2447 } else {
2448 features &= NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST |
Jesse Gross6ee400a2011-01-17 20:46:00 +00002449 NETIF_F_GEN_CSUM | NETIF_F_HW_VLAN_TX;
Jesse Grossf01a5232011-01-09 06:23:31 +00002450 return harmonize_features(skb, protocol, features);
2451 }
Jesse Gross58e998c2010-10-29 12:14:55 +00002452}
Jesse Grossf01a5232011-01-09 06:23:31 +00002453EXPORT_SYMBOL(netif_skb_features);
Jesse Gross58e998c2010-10-29 12:14:55 +00002454
John Fastabend6afff0c2010-06-16 14:18:12 +00002455/*
2456 * Returns true if either:
2457 * 1. skb has frag_list and the device doesn't support FRAGLIST, or
Rami Rosend1a53df2012-08-27 23:39:24 +00002458 * 2. skb is fragmented and the device does not support SG.
John Fastabend6afff0c2010-06-16 14:18:12 +00002459 */
2460static inline int skb_needs_linearize(struct sk_buff *skb,
Jesse Gross02932ce2011-01-09 06:23:34 +00002461 int features)
John Fastabend6afff0c2010-06-16 14:18:12 +00002462{
Jesse Gross02932ce2011-01-09 06:23:34 +00002463 return skb_is_nonlinear(skb) &&
2464 ((skb_has_frag_list(skb) &&
2465 !(features & NETIF_F_FRAGLIST)) ||
Jesse Grosse1e78db2010-10-29 12:14:53 +00002466 (skb_shinfo(skb)->nr_frags &&
Jesse Gross02932ce2011-01-09 06:23:34 +00002467 !(features & NETIF_F_SG)));
John Fastabend6afff0c2010-06-16 14:18:12 +00002468}
2469
David S. Millerfd2ea0a2008-07-17 01:56:23 -07002470int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
2471 struct netdev_queue *txq)
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002472{
Stephen Hemminger00829822008-11-20 20:14:53 -08002473 const struct net_device_ops *ops = dev->netdev_ops;
Patrick McHardy572a9d72009-11-10 06:14:14 +00002474 int rc = NETDEV_TX_OK;
Koki Sanagiec764bf2011-05-30 21:48:34 +00002475 unsigned int skb_len;
Stephen Hemminger00829822008-11-20 20:14:53 -08002476
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002477 if (likely(!skb->next)) {
Michał Mirosławc8f44af2011-11-15 15:29:55 +00002478 netdev_features_t features;
Jesse Grossfc741212011-01-09 06:23:32 +00002479
Eric Dumazet93f154b2009-05-18 22:19:19 -07002480 /*
Lucas De Marchi25985ed2011-03-30 22:57:33 -03002481 * If device doesn't need skb->dst, release it right now while
Eric Dumazet93f154b2009-05-18 22:19:19 -07002482 * its hot in this cpu cache
2483 */
Eric Dumazetadf30902009-06-02 05:19:30 +00002484 if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
2485 skb_dst_drop(skb);
2486
Jesse Grossfc741212011-01-09 06:23:32 +00002487 features = netif_skb_features(skb);
2488
Jesse Gross7b9c6092010-10-20 13:56:04 +00002489 if (vlan_tx_tag_present(skb) &&
Jesse Grossfc741212011-01-09 06:23:32 +00002490 !(features & NETIF_F_HW_VLAN_TX)) {
Jesse Gross7b9c6092010-10-20 13:56:04 +00002491 skb = __vlan_put_tag(skb, vlan_tx_tag_get(skb));
2492 if (unlikely(!skb))
2493 goto out;
2494
2495 skb->vlan_tci = 0;
2496 }
2497
Alexander Duyckfc70fb62012-12-07 14:14:15 +00002498 /* If encapsulation offload request, verify we are testing
2499 * hardware encapsulation features instead of standard
2500 * features for the netdev
2501 */
2502 if (skb->encapsulation)
2503 features &= dev->hw_enc_features;
2504
Jesse Grossfc741212011-01-09 06:23:32 +00002505 if (netif_needs_gso(skb, features)) {
Jesse Gross91ecb632011-01-09 06:23:33 +00002506 if (unlikely(dev_gso_segment(skb, features)))
David S. Miller9ccb8972010-04-22 01:02:07 -07002507 goto out_kfree_skb;
2508 if (skb->next)
2509 goto gso;
John Fastabend6afff0c2010-06-16 14:18:12 +00002510 } else {
Jesse Gross02932ce2011-01-09 06:23:34 +00002511 if (skb_needs_linearize(skb, features) &&
John Fastabend6afff0c2010-06-16 14:18:12 +00002512 __skb_linearize(skb))
2513 goto out_kfree_skb;
2514
2515 /* If packet is not checksummed and device does not
2516 * support checksumming for this protocol, complete
2517 * checksumming here.
2518 */
2519 if (skb->ip_summed == CHECKSUM_PARTIAL) {
Alexander Duyckfc70fb62012-12-07 14:14:15 +00002520 if (skb->encapsulation)
2521 skb_set_inner_transport_header(skb,
2522 skb_checksum_start_offset(skb));
2523 else
2524 skb_set_transport_header(skb,
2525 skb_checksum_start_offset(skb));
Jesse Gross03634662011-01-09 06:23:35 +00002526 if (!(features & NETIF_F_ALL_CSUM) &&
John Fastabend6afff0c2010-06-16 14:18:12 +00002527 skb_checksum_help(skb))
2528 goto out_kfree_skb;
2529 }
David S. Miller9ccb8972010-04-22 01:02:07 -07002530 }
2531
Eric Dumazetb40863c2012-09-18 20:44:49 +00002532 if (!list_empty(&ptype_all))
2533 dev_queue_xmit_nit(skb, dev);
2534
Koki Sanagiec764bf2011-05-30 21:48:34 +00002535 skb_len = skb->len;
Patrick Ohlyac45f602009-02-12 05:03:37 +00002536 rc = ops->ndo_start_xmit(skb, dev);
Koki Sanagiec764bf2011-05-30 21:48:34 +00002537 trace_net_dev_xmit(skb, rc, dev, skb_len);
Patrick McHardyec634fe2009-07-05 19:23:38 -07002538 if (rc == NETDEV_TX_OK)
Eric Dumazet08baf562009-05-25 22:58:01 -07002539 txq_trans_update(txq);
Patrick Ohlyac45f602009-02-12 05:03:37 +00002540 return rc;
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002541 }
2542
Herbert Xu576a30e2006-06-27 13:22:38 -07002543gso:
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002544 do {
2545 struct sk_buff *nskb = skb->next;
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002546
2547 skb->next = nskb->next;
2548 nskb->next = NULL;
Krishna Kumar068a2de2009-12-09 20:59:58 +00002549
2550 /*
Lucas De Marchi25985ed2011-03-30 22:57:33 -03002551 * If device doesn't need nskb->dst, release it right now while
Krishna Kumar068a2de2009-12-09 20:59:58 +00002552 * its hot in this cpu cache
2553 */
2554 if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
2555 skb_dst_drop(nskb);
2556
Eric Dumazetb40863c2012-09-18 20:44:49 +00002557 if (!list_empty(&ptype_all))
2558 dev_queue_xmit_nit(nskb, dev);
2559
Koki Sanagiec764bf2011-05-30 21:48:34 +00002560 skb_len = nskb->len;
Stephen Hemminger00829822008-11-20 20:14:53 -08002561 rc = ops->ndo_start_xmit(nskb, dev);
Koki Sanagiec764bf2011-05-30 21:48:34 +00002562 trace_net_dev_xmit(nskb, rc, dev, skb_len);
Patrick McHardyec634fe2009-07-05 19:23:38 -07002563 if (unlikely(rc != NETDEV_TX_OK)) {
Patrick McHardy572a9d72009-11-10 06:14:14 +00002564 if (rc & ~NETDEV_TX_MASK)
2565 goto out_kfree_gso_skb;
Michael Chanf54d9e82006-06-25 23:57:04 -07002566 nskb->next = skb->next;
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002567 skb->next = nskb;
2568 return rc;
2569 }
Eric Dumazet08baf562009-05-25 22:58:01 -07002570 txq_trans_update(txq);
Tom Herbert734664982011-11-28 16:32:44 +00002571 if (unlikely(netif_xmit_stopped(txq) && skb->next))
Michael Chanf54d9e82006-06-25 23:57:04 -07002572 return NETDEV_TX_BUSY;
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002573 } while (skb->next);
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09002574
Patrick McHardy572a9d72009-11-10 06:14:14 +00002575out_kfree_gso_skb:
2576 if (likely(skb->next == NULL))
2577 skb->destructor = DEV_GSO_CB(skb)->destructor;
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002578out_kfree_skb:
2579 kfree_skb(skb);
Jesse Gross7b9c6092010-10-20 13:56:04 +00002580out:
Patrick McHardy572a9d72009-11-10 06:14:14 +00002581 return rc;
Herbert Xuf6a78bf2006-06-22 02:57:17 -07002582}
2583
Eric Dumazet1def9232013-01-10 12:36:42 +00002584static void qdisc_pkt_len_init(struct sk_buff *skb)
2585{
2586 const struct skb_shared_info *shinfo = skb_shinfo(skb);
2587
2588 qdisc_skb_cb(skb)->pkt_len = skb->len;
2589
2590 /* To get more precise estimation of bytes sent on wire,
2591 * we add to pkt_len the headers size of all segments
2592 */
2593 if (shinfo->gso_size) {
Eric Dumazet757b8b12013-01-15 21:14:21 -08002594 unsigned int hdr_len;
Eric Dumazet1def9232013-01-10 12:36:42 +00002595
Eric Dumazet757b8b12013-01-15 21:14:21 -08002596 /* mac layer + network layer */
2597 hdr_len = skb_transport_header(skb) - skb_mac_header(skb);
2598
2599 /* + transport layer */
Eric Dumazet1def9232013-01-10 12:36:42 +00002600 if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)))
2601 hdr_len += tcp_hdrlen(skb);
2602 else
2603 hdr_len += sizeof(struct udphdr);
2604 qdisc_skb_cb(skb)->pkt_len += (shinfo->gso_segs - 1) * hdr_len;
2605 }
2606}
2607
Krishna Kumarbbd8a0d2009-08-06 01:44:21 +00002608static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
2609 struct net_device *dev,
2610 struct netdev_queue *txq)
2611{
2612 spinlock_t *root_lock = qdisc_lock(q);
Eric Dumazeta2da5702011-01-20 03:48:19 +00002613 bool contended;
Krishna Kumarbbd8a0d2009-08-06 01:44:21 +00002614 int rc;
2615
Eric Dumazet1def9232013-01-10 12:36:42 +00002616 qdisc_pkt_len_init(skb);
Eric Dumazeta2da5702011-01-20 03:48:19 +00002617 qdisc_calculate_pkt_len(skb, q);
Eric Dumazet79640a42010-06-02 05:09:29 -07002618 /*
2619 * Heuristic to force contended enqueues to serialize on a
2620 * separate lock before trying to get qdisc main lock.
2621 * This permits __QDISC_STATE_RUNNING owner to get the lock more often
2622 * and dequeue packets faster.
2623 */
Eric Dumazeta2da5702011-01-20 03:48:19 +00002624 contended = qdisc_is_running(q);
Eric Dumazet79640a42010-06-02 05:09:29 -07002625 if (unlikely(contended))
2626 spin_lock(&q->busylock);
2627
Krishna Kumarbbd8a0d2009-08-06 01:44:21 +00002628 spin_lock(root_lock);
2629 if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, &q->state))) {
2630 kfree_skb(skb);
2631 rc = NET_XMIT_DROP;
2632 } else if ((q->flags & TCQ_F_CAN_BYPASS) && !qdisc_qlen(q) &&
Eric Dumazetbc135b22010-06-02 03:23:51 -07002633 qdisc_run_begin(q)) {
Krishna Kumarbbd8a0d2009-08-06 01:44:21 +00002634 /*
2635 * This is a work-conserving queue; there are no old skbs
2636 * waiting to be sent out; and the qdisc is not running -
2637 * xmit the skb directly.
2638 */
Eric Dumazet7fee2262010-05-11 23:19:48 +00002639 if (!(dev->priv_flags & IFF_XMIT_DST_RELEASE))
2640 skb_dst_force(skb);
Eric Dumazetbfe0d022011-01-09 08:30:54 +00002641
Eric Dumazetbfe0d022011-01-09 08:30:54 +00002642 qdisc_bstats_update(q, skb);
2643
Eric Dumazet79640a42010-06-02 05:09:29 -07002644 if (sch_direct_xmit(skb, q, dev, txq, root_lock)) {
2645 if (unlikely(contended)) {
2646 spin_unlock(&q->busylock);
2647 contended = false;
2648 }
Krishna Kumarbbd8a0d2009-08-06 01:44:21 +00002649 __qdisc_run(q);
Eric Dumazet79640a42010-06-02 05:09:29 -07002650 } else
Eric Dumazetbc135b22010-06-02 03:23:51 -07002651 qdisc_run_end(q);
Krishna Kumarbbd8a0d2009-08-06 01:44:21 +00002652
2653 rc = NET_XMIT_SUCCESS;
2654 } else {
Eric Dumazet7fee2262010-05-11 23:19:48 +00002655 skb_dst_force(skb);
Eric Dumazeta2da5702011-01-20 03:48:19 +00002656 rc = q->enqueue(skb, q) & NET_XMIT_MASK;
Eric Dumazet79640a42010-06-02 05:09:29 -07002657 if (qdisc_run_begin(q)) {
2658 if (unlikely(contended)) {
2659 spin_unlock(&q->busylock);
2660 contended = false;
2661 }
2662 __qdisc_run(q);
2663 }
Krishna Kumarbbd8a0d2009-08-06 01:44:21 +00002664 }
2665 spin_unlock(root_lock);
Eric Dumazet79640a42010-06-02 05:09:29 -07002666 if (unlikely(contended))
2667 spin_unlock(&q->busylock);
Krishna Kumarbbd8a0d2009-08-06 01:44:21 +00002668 return rc;
2669}
2670
Neil Horman5bc14212011-11-22 05:10:51 +00002671#if IS_ENABLED(CONFIG_NETPRIO_CGROUP)
2672static void skb_update_prio(struct sk_buff *skb)
2673{
Igor Maravic6977a792011-11-25 07:44:54 +00002674 struct netprio_map *map = rcu_dereference_bh(skb->dev->priomap);
Neil Horman5bc14212011-11-22 05:10:51 +00002675
Eric Dumazet91c68ce2012-07-08 21:45:10 +00002676 if (!skb->priority && skb->sk && map) {
2677 unsigned int prioidx = skb->sk->sk_cgrp_prioidx;
2678
2679 if (prioidx < map->priomap_len)
2680 skb->priority = map->priomap[prioidx];
2681 }
Neil Horman5bc14212011-11-22 05:10:51 +00002682}
2683#else
2684#define skb_update_prio(skb)
2685#endif
2686
Eric Dumazet745e20f2010-09-29 13:23:09 -07002687static DEFINE_PER_CPU(int, xmit_recursion);
David S. Miller11a766c2010-10-25 12:51:55 -07002688#define RECURSION_LIMIT 10
Eric Dumazet745e20f2010-09-29 13:23:09 -07002689
Dave Jonesd29f7492008-07-22 14:09:06 -07002690/**
Michel Machado95603e22012-06-12 10:16:35 +00002691 * dev_loopback_xmit - loop back @skb
2692 * @skb: buffer to transmit
2693 */
2694int dev_loopback_xmit(struct sk_buff *skb)
2695{
2696 skb_reset_mac_header(skb);
2697 __skb_pull(skb, skb_network_offset(skb));
2698 skb->pkt_type = PACKET_LOOPBACK;
2699 skb->ip_summed = CHECKSUM_UNNECESSARY;
2700 WARN_ON(!skb_dst(skb));
2701 skb_dst_force(skb);
2702 netif_rx_ni(skb);
2703 return 0;
2704}
2705EXPORT_SYMBOL(dev_loopback_xmit);
2706
2707/**
Dave Jonesd29f7492008-07-22 14:09:06 -07002708 * dev_queue_xmit - transmit a buffer
2709 * @skb: buffer to transmit
2710 *
2711 * Queue a buffer for transmission to a network device. The caller must
2712 * have set the device and priority and built the buffer before calling
2713 * this function. The function can be called from an interrupt.
2714 *
2715 * A negative errno code is returned on a failure. A success does not
2716 * guarantee the frame will be transmitted as it may be dropped due
2717 * to congestion or traffic shaping.
2718 *
2719 * -----------------------------------------------------------------------------------
2720 * I notice this method can also return errors from the queue disciplines,
2721 * including NET_XMIT_DROP, which is a positive value. So, errors can also
2722 * be positive.
2723 *
2724 * Regardless of the return value, the skb is consumed, so it is currently
2725 * difficult to retry a send to this method. (You can bump the ref count
2726 * before sending to hold a reference for retry if you are careful.)
2727 *
2728 * When calling this method, interrupts MUST be enabled. This is because
2729 * the BH enable code must have IRQs enabled so that it will not deadlock.
2730 * --BLG
2731 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002732int dev_queue_xmit(struct sk_buff *skb)
2733{
2734 struct net_device *dev = skb->dev;
David S. Millerdc2b4842008-07-08 17:18:23 -07002735 struct netdev_queue *txq;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002736 struct Qdisc *q;
2737 int rc = -ENOMEM;
2738
Eric Dumazet6d1ccff2013-02-05 20:22:20 +00002739 skb_reset_mac_header(skb);
2740
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09002741 /* Disable soft irqs for various locks below. Also
2742 * stops preemption for RCU.
Linus Torvalds1da177e2005-04-16 15:20:36 -07002743 */
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09002744 rcu_read_lock_bh();
Linus Torvalds1da177e2005-04-16 15:20:36 -07002745
Neil Horman5bc14212011-11-22 05:10:51 +00002746 skb_update_prio(skb);
2747
Amerigo Wang8c4c49d2012-09-17 20:16:31 +00002748 txq = netdev_pick_tx(dev, skb);
Paul E. McKenneya898def2010-02-22 17:04:49 -08002749 q = rcu_dereference_bh(txq->qdisc);
David S. Miller37437bb2008-07-16 02:15:04 -07002750
Linus Torvalds1da177e2005-04-16 15:20:36 -07002751#ifdef CONFIG_NET_CLS_ACT
Eric Dumazetd1b19df2009-09-03 01:29:39 -07002752 skb->tc_verd = SET_TC_AT(skb->tc_verd, AT_EGRESS);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002753#endif
Koki Sanagicf66ba52010-08-23 18:45:02 +09002754 trace_net_dev_queue(skb);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002755 if (q->enqueue) {
Krishna Kumarbbd8a0d2009-08-06 01:44:21 +00002756 rc = __dev_xmit_skb(skb, q, dev, txq);
David S. Miller37437bb2008-07-16 02:15:04 -07002757 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002758 }
2759
2760 /* The device has no queue. Common case for software devices:
2761 loopback, all the sorts of tunnels...
2762
Herbert Xu932ff272006-06-09 12:20:56 -07002763 Really, it is unlikely that netif_tx_lock protection is necessary
2764 here. (f.e. loopback and IP tunnels are clean ignoring statistics
Linus Torvalds1da177e2005-04-16 15:20:36 -07002765 counters.)
2766 However, it is possible, that they rely on protection
2767 made by us here.
2768
2769 Check this and shot the lock. It is not prone from deadlocks.
2770 Either shot noqueue qdisc, it is even simpler 8)
2771 */
2772 if (dev->flags & IFF_UP) {
2773 int cpu = smp_processor_id(); /* ok because BHs are off */
2774
David S. Millerc773e842008-07-08 23:13:53 -07002775 if (txq->xmit_lock_owner != cpu) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002776
Eric Dumazet745e20f2010-09-29 13:23:09 -07002777 if (__this_cpu_read(xmit_recursion) > RECURSION_LIMIT)
2778 goto recursion_alert;
2779
David S. Millerc773e842008-07-08 23:13:53 -07002780 HARD_TX_LOCK(dev, txq, cpu);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002781
Tom Herbert734664982011-11-28 16:32:44 +00002782 if (!netif_xmit_stopped(txq)) {
Eric Dumazet745e20f2010-09-29 13:23:09 -07002783 __this_cpu_inc(xmit_recursion);
Patrick McHardy572a9d72009-11-10 06:14:14 +00002784 rc = dev_hard_start_xmit(skb, dev, txq);
Eric Dumazet745e20f2010-09-29 13:23:09 -07002785 __this_cpu_dec(xmit_recursion);
Patrick McHardy572a9d72009-11-10 06:14:14 +00002786 if (dev_xmit_complete(rc)) {
David S. Millerc773e842008-07-08 23:13:53 -07002787 HARD_TX_UNLOCK(dev, txq);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002788 goto out;
2789 }
2790 }
David S. Millerc773e842008-07-08 23:13:53 -07002791 HARD_TX_UNLOCK(dev, txq);
Joe Perchese87cc472012-05-13 21:56:26 +00002792 net_crit_ratelimited("Virtual device %s asks to queue packet!\n",
2793 dev->name);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002794 } else {
2795 /* Recursion is detected! It is possible,
Eric Dumazet745e20f2010-09-29 13:23:09 -07002796 * unfortunately
2797 */
2798recursion_alert:
Joe Perchese87cc472012-05-13 21:56:26 +00002799 net_crit_ratelimited("Dead loop on virtual device %s, fix it urgently!\n",
2800 dev->name);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002801 }
2802 }
2803
2804 rc = -ENETDOWN;
Herbert Xud4828d82006-06-22 02:28:18 -07002805 rcu_read_unlock_bh();
Linus Torvalds1da177e2005-04-16 15:20:36 -07002806
Linus Torvalds1da177e2005-04-16 15:20:36 -07002807 kfree_skb(skb);
2808 return rc;
2809out:
Herbert Xud4828d82006-06-22 02:28:18 -07002810 rcu_read_unlock_bh();
Linus Torvalds1da177e2005-04-16 15:20:36 -07002811 return rc;
2812}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07002813EXPORT_SYMBOL(dev_queue_xmit);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002814
2815
2816/*=======================================================================
2817 Receiver routines
2818 =======================================================================*/
2819
Stephen Hemminger6b2bedc2007-03-12 14:33:50 -07002820int netdev_max_backlog __read_mostly = 1000;
Eric Dumazetc9e6bc62012-09-27 19:29:05 +00002821EXPORT_SYMBOL(netdev_max_backlog);
2822
Eric Dumazet3b098e22010-05-15 23:57:10 -07002823int netdev_tstamp_prequeue __read_mostly = 1;
Stephen Hemminger6b2bedc2007-03-12 14:33:50 -07002824int netdev_budget __read_mostly = 300;
2825int weight_p __read_mostly = 64; /* old backlog weight */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002826
Eric Dumazeteecfd7c2010-05-06 22:07:48 -07002827/* Called with irq disabled */
2828static inline void ____napi_schedule(struct softnet_data *sd,
2829 struct napi_struct *napi)
2830{
2831 list_add_tail(&napi->poll_list, &sd->poll_list);
2832 __raise_softirq_irqoff(NET_RX_SOFTIRQ);
2833}
2834
Eric Dumazetdf334542010-03-24 19:13:54 +00002835#ifdef CONFIG_RPS
Tom Herbertfec5e652010-04-16 16:01:27 -07002836
2837/* One global table that all flow-based protocols share. */
Eric Dumazet6e3f7fa2010-10-25 03:02:02 +00002838struct rps_sock_flow_table __rcu *rps_sock_flow_table __read_mostly;
Tom Herbertfec5e652010-04-16 16:01:27 -07002839EXPORT_SYMBOL(rps_sock_flow_table);
2840
Ingo Molnarc5905af2012-02-24 08:31:31 +01002841struct static_key rps_needed __read_mostly;
Eric Dumazetadc93002011-11-17 03:13:26 +00002842
Ben Hutchingsc4454772011-01-19 11:03:53 +00002843static struct rps_dev_flow *
2844set_rps_cpu(struct net_device *dev, struct sk_buff *skb,
2845 struct rps_dev_flow *rflow, u16 next_cpu)
2846{
Ben Hutchings09994d12011-10-03 04:42:46 +00002847 if (next_cpu != RPS_NO_CPU) {
Ben Hutchingsc4454772011-01-19 11:03:53 +00002848#ifdef CONFIG_RFS_ACCEL
2849 struct netdev_rx_queue *rxqueue;
2850 struct rps_dev_flow_table *flow_table;
2851 struct rps_dev_flow *old_rflow;
2852 u32 flow_id;
2853 u16 rxq_index;
2854 int rc;
2855
2856 /* Should we steer this flow to a different hardware queue? */
Ben Hutchings69a19ee2011-02-15 20:32:04 +00002857 if (!skb_rx_queue_recorded(skb) || !dev->rx_cpu_rmap ||
2858 !(dev->features & NETIF_F_NTUPLE))
Ben Hutchingsc4454772011-01-19 11:03:53 +00002859 goto out;
2860 rxq_index = cpu_rmap_lookup_index(dev->rx_cpu_rmap, next_cpu);
2861 if (rxq_index == skb_get_rx_queue(skb))
2862 goto out;
2863
2864 rxqueue = dev->_rx + rxq_index;
2865 flow_table = rcu_dereference(rxqueue->rps_flow_table);
2866 if (!flow_table)
2867 goto out;
2868 flow_id = skb->rxhash & flow_table->mask;
2869 rc = dev->netdev_ops->ndo_rx_flow_steer(dev, skb,
2870 rxq_index, flow_id);
2871 if (rc < 0)
2872 goto out;
2873 old_rflow = rflow;
2874 rflow = &flow_table->flows[flow_id];
Ben Hutchingsc4454772011-01-19 11:03:53 +00002875 rflow->filter = rc;
2876 if (old_rflow->filter == rflow->filter)
2877 old_rflow->filter = RPS_NO_FILTER;
2878 out:
2879#endif
2880 rflow->last_qtail =
Ben Hutchings09994d12011-10-03 04:42:46 +00002881 per_cpu(softnet_data, next_cpu).input_queue_head;
Ben Hutchingsc4454772011-01-19 11:03:53 +00002882 }
2883
Ben Hutchings09994d12011-10-03 04:42:46 +00002884 rflow->cpu = next_cpu;
Ben Hutchingsc4454772011-01-19 11:03:53 +00002885 return rflow;
2886}
2887
Tom Herbert0a9627f2010-03-16 08:03:29 +00002888/*
2889 * get_rps_cpu is called from netif_receive_skb and returns the target
2890 * CPU from the RPS map of the receiving queue for a given skb.
Eric Dumazetb0e28f12010-04-15 00:14:07 -07002891 * rcu_read_lock must be held on entry.
Tom Herbert0a9627f2010-03-16 08:03:29 +00002892 */
Tom Herbertfec5e652010-04-16 16:01:27 -07002893static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb,
2894 struct rps_dev_flow **rflowp)
Tom Herbert0a9627f2010-03-16 08:03:29 +00002895{
Tom Herbert0a9627f2010-03-16 08:03:29 +00002896 struct netdev_rx_queue *rxqueue;
Eric Dumazet6e3f7fa2010-10-25 03:02:02 +00002897 struct rps_map *map;
Tom Herbertfec5e652010-04-16 16:01:27 -07002898 struct rps_dev_flow_table *flow_table;
2899 struct rps_sock_flow_table *sock_flow_table;
Tom Herbert0a9627f2010-03-16 08:03:29 +00002900 int cpu = -1;
Tom Herbertfec5e652010-04-16 16:01:27 -07002901 u16 tcpu;
Tom Herbert0a9627f2010-03-16 08:03:29 +00002902
Tom Herbert0a9627f2010-03-16 08:03:29 +00002903 if (skb_rx_queue_recorded(skb)) {
2904 u16 index = skb_get_rx_queue(skb);
Ben Hutchings62fe0b42010-09-27 08:24:33 +00002905 if (unlikely(index >= dev->real_num_rx_queues)) {
2906 WARN_ONCE(dev->real_num_rx_queues > 1,
2907 "%s received packet on queue %u, but number "
2908 "of RX queues is %u\n",
2909 dev->name, index, dev->real_num_rx_queues);
Tom Herbert0a9627f2010-03-16 08:03:29 +00002910 goto done;
2911 }
2912 rxqueue = dev->_rx + index;
2913 } else
2914 rxqueue = dev->_rx;
2915
Eric Dumazet6e3f7fa2010-10-25 03:02:02 +00002916 map = rcu_dereference(rxqueue->rps_map);
2917 if (map) {
Tom Herbert85875232011-01-31 16:23:42 -08002918 if (map->len == 1 &&
Eric Dumazet33d480c2011-08-11 19:30:52 +00002919 !rcu_access_pointer(rxqueue->rps_flow_table)) {
Changli Gao6febfca2010-09-03 23:12:37 +00002920 tcpu = map->cpus[0];
2921 if (cpu_online(tcpu))
2922 cpu = tcpu;
Tom Herbert0a9627f2010-03-16 08:03:29 +00002923 goto done;
Eric Dumazetb249dcb2010-04-19 21:56:38 +00002924 }
Eric Dumazet33d480c2011-08-11 19:30:52 +00002925 } else if (!rcu_access_pointer(rxqueue->rps_flow_table)) {
Tom Herbert0a9627f2010-03-16 08:03:29 +00002926 goto done;
Tom Herbert0a9627f2010-03-16 08:03:29 +00002927 }
2928
Changli Gao2d47b452010-08-17 19:00:56 +00002929 skb_reset_network_header(skb);
Krishna Kumarbfb564e2010-08-04 06:15:52 +00002930 if (!skb_get_rxhash(skb))
Tom Herbert0a9627f2010-03-16 08:03:29 +00002931 goto done;
Tom Herbert0a9627f2010-03-16 08:03:29 +00002932
Tom Herbertfec5e652010-04-16 16:01:27 -07002933 flow_table = rcu_dereference(rxqueue->rps_flow_table);
2934 sock_flow_table = rcu_dereference(rps_sock_flow_table);
2935 if (flow_table && sock_flow_table) {
2936 u16 next_cpu;
2937 struct rps_dev_flow *rflow;
2938
2939 rflow = &flow_table->flows[skb->rxhash & flow_table->mask];
2940 tcpu = rflow->cpu;
2941
2942 next_cpu = sock_flow_table->ents[skb->rxhash &
2943 sock_flow_table->mask];
2944
2945 /*
2946 * If the desired CPU (where last recvmsg was done) is
2947 * different from current CPU (one in the rx-queue flow
2948 * table entry), switch if one of the following holds:
2949 * - Current CPU is unset (equal to RPS_NO_CPU).
2950 * - Current CPU is offline.
2951 * - The current CPU's queue tail has advanced beyond the
2952 * last packet that was enqueued using this table entry.
2953 * This guarantees that all previous packets for the flow
2954 * have been dequeued, thus preserving in order delivery.
2955 */
2956 if (unlikely(tcpu != next_cpu) &&
2957 (tcpu == RPS_NO_CPU || !cpu_online(tcpu) ||
2958 ((int)(per_cpu(softnet_data, tcpu).input_queue_head -
Tom Herbertbaefa312012-11-16 09:04:15 +00002959 rflow->last_qtail)) >= 0)) {
2960 tcpu = next_cpu;
Ben Hutchingsc4454772011-01-19 11:03:53 +00002961 rflow = set_rps_cpu(dev, skb, rflow, next_cpu);
Tom Herbertbaefa312012-11-16 09:04:15 +00002962 }
Ben Hutchingsc4454772011-01-19 11:03:53 +00002963
Tom Herbertfec5e652010-04-16 16:01:27 -07002964 if (tcpu != RPS_NO_CPU && cpu_online(tcpu)) {
2965 *rflowp = rflow;
2966 cpu = tcpu;
2967 goto done;
2968 }
2969 }
2970
Tom Herbert0a9627f2010-03-16 08:03:29 +00002971 if (map) {
Tom Herbertfec5e652010-04-16 16:01:27 -07002972 tcpu = map->cpus[((u64) skb->rxhash * map->len) >> 32];
Tom Herbert0a9627f2010-03-16 08:03:29 +00002973
2974 if (cpu_online(tcpu)) {
2975 cpu = tcpu;
2976 goto done;
2977 }
2978 }
2979
2980done:
Tom Herbert0a9627f2010-03-16 08:03:29 +00002981 return cpu;
2982}
2983
Ben Hutchingsc4454772011-01-19 11:03:53 +00002984#ifdef CONFIG_RFS_ACCEL
2985
2986/**
2987 * rps_may_expire_flow - check whether an RFS hardware filter may be removed
2988 * @dev: Device on which the filter was set
2989 * @rxq_index: RX queue index
2990 * @flow_id: Flow ID passed to ndo_rx_flow_steer()
2991 * @filter_id: Filter ID returned by ndo_rx_flow_steer()
2992 *
2993 * Drivers that implement ndo_rx_flow_steer() should periodically call
2994 * this function for each installed filter and remove the filters for
2995 * which it returns %true.
2996 */
2997bool rps_may_expire_flow(struct net_device *dev, u16 rxq_index,
2998 u32 flow_id, u16 filter_id)
2999{
3000 struct netdev_rx_queue *rxqueue = dev->_rx + rxq_index;
3001 struct rps_dev_flow_table *flow_table;
3002 struct rps_dev_flow *rflow;
3003 bool expire = true;
3004 int cpu;
3005
3006 rcu_read_lock();
3007 flow_table = rcu_dereference(rxqueue->rps_flow_table);
3008 if (flow_table && flow_id <= flow_table->mask) {
3009 rflow = &flow_table->flows[flow_id];
3010 cpu = ACCESS_ONCE(rflow->cpu);
3011 if (rflow->filter == filter_id && cpu != RPS_NO_CPU &&
3012 ((int)(per_cpu(softnet_data, cpu).input_queue_head -
3013 rflow->last_qtail) <
3014 (int)(10 * flow_table->mask)))
3015 expire = false;
3016 }
3017 rcu_read_unlock();
3018 return expire;
3019}
3020EXPORT_SYMBOL(rps_may_expire_flow);
3021
3022#endif /* CONFIG_RFS_ACCEL */
3023
Tom Herbert0a9627f2010-03-16 08:03:29 +00003024/* Called from hardirq (IPI) context */
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003025static void rps_trigger_softirq(void *data)
Tom Herbert0a9627f2010-03-16 08:03:29 +00003026{
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003027 struct softnet_data *sd = data;
3028
Eric Dumazeteecfd7c2010-05-06 22:07:48 -07003029 ____napi_schedule(sd, &sd->backlog);
Changli Gaodee42872010-05-02 05:42:16 +00003030 sd->received_rps++;
Tom Herbert0a9627f2010-03-16 08:03:29 +00003031}
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003032
Tom Herbertfec5e652010-04-16 16:01:27 -07003033#endif /* CONFIG_RPS */
Tom Herbert0a9627f2010-03-16 08:03:29 +00003034
3035/*
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003036 * Check if this softnet_data structure is another cpu one
3037 * If yes, queue it to our IPI list and return 1
3038 * If no, return 0
3039 */
3040static int rps_ipi_queued(struct softnet_data *sd)
3041{
3042#ifdef CONFIG_RPS
3043 struct softnet_data *mysd = &__get_cpu_var(softnet_data);
3044
3045 if (sd != mysd) {
3046 sd->rps_ipi_next = mysd->rps_ipi_list;
3047 mysd->rps_ipi_list = sd;
3048
3049 __raise_softirq_irqoff(NET_RX_SOFTIRQ);
3050 return 1;
3051 }
3052#endif /* CONFIG_RPS */
3053 return 0;
3054}
3055
3056/*
Tom Herbert0a9627f2010-03-16 08:03:29 +00003057 * enqueue_to_backlog is called to queue an skb to a per CPU backlog
3058 * queue (may be a remote CPU queue).
3059 */
Tom Herbertfec5e652010-04-16 16:01:27 -07003060static int enqueue_to_backlog(struct sk_buff *skb, int cpu,
3061 unsigned int *qtail)
Tom Herbert0a9627f2010-03-16 08:03:29 +00003062{
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003063 struct softnet_data *sd;
Tom Herbert0a9627f2010-03-16 08:03:29 +00003064 unsigned long flags;
3065
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003066 sd = &per_cpu(softnet_data, cpu);
Tom Herbert0a9627f2010-03-16 08:03:29 +00003067
3068 local_irq_save(flags);
Tom Herbert0a9627f2010-03-16 08:03:29 +00003069
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003070 rps_lock(sd);
Changli Gao6e7676c2010-04-27 15:07:33 -07003071 if (skb_queue_len(&sd->input_pkt_queue) <= netdev_max_backlog) {
3072 if (skb_queue_len(&sd->input_pkt_queue)) {
Tom Herbert0a9627f2010-03-16 08:03:29 +00003073enqueue:
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003074 __skb_queue_tail(&sd->input_pkt_queue, skb);
Tom Herbert76cc8b12010-05-20 18:37:59 +00003075 input_queue_tail_incr_save(sd, qtail);
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003076 rps_unlock(sd);
Changli Gao152102c2010-03-30 20:16:22 +00003077 local_irq_restore(flags);
Tom Herbert0a9627f2010-03-16 08:03:29 +00003078 return NET_RX_SUCCESS;
3079 }
3080
Eric Dumazetebda37c22010-05-06 23:51:21 +00003081 /* Schedule NAPI for backlog device
3082 * We can use non atomic operation since we own the queue lock
3083 */
3084 if (!__test_and_set_bit(NAPI_STATE_SCHED, &sd->backlog.state)) {
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003085 if (!rps_ipi_queued(sd))
Eric Dumazeteecfd7c2010-05-06 22:07:48 -07003086 ____napi_schedule(sd, &sd->backlog);
Tom Herbert0a9627f2010-03-16 08:03:29 +00003087 }
3088 goto enqueue;
3089 }
3090
Changli Gaodee42872010-05-02 05:42:16 +00003091 sd->dropped++;
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003092 rps_unlock(sd);
Tom Herbert0a9627f2010-03-16 08:03:29 +00003093
Tom Herbert0a9627f2010-03-16 08:03:29 +00003094 local_irq_restore(flags);
3095
Eric Dumazetcaf586e2010-09-30 21:06:55 +00003096 atomic_long_inc(&skb->dev->rx_dropped);
Tom Herbert0a9627f2010-03-16 08:03:29 +00003097 kfree_skb(skb);
3098 return NET_RX_DROP;
3099}
Linus Torvalds1da177e2005-04-16 15:20:36 -07003100
Linus Torvalds1da177e2005-04-16 15:20:36 -07003101/**
3102 * netif_rx - post buffer to the network code
3103 * @skb: buffer to post
3104 *
3105 * This function receives a packet from a device driver and queues it for
3106 * the upper (protocol) levels to process. It always succeeds. The buffer
3107 * may be dropped during processing for congestion control or by the
3108 * protocol layers.
3109 *
3110 * return values:
3111 * NET_RX_SUCCESS (no congestion)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003112 * NET_RX_DROP (packet was dropped)
3113 *
3114 */
3115
3116int netif_rx(struct sk_buff *skb)
3117{
Eric Dumazetb0e28f12010-04-15 00:14:07 -07003118 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003119
3120 /* if netpoll wants it, pretend we never saw it */
3121 if (netpoll_rx(skb))
3122 return NET_RX_DROP;
3123
Eric Dumazet588f0332011-11-15 04:12:55 +00003124 net_timestamp_check(netdev_tstamp_prequeue, skb);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003125
Koki Sanagicf66ba52010-08-23 18:45:02 +09003126 trace_netif_rx(skb);
Eric Dumazetdf334542010-03-24 19:13:54 +00003127#ifdef CONFIG_RPS
Ingo Molnarc5905af2012-02-24 08:31:31 +01003128 if (static_key_false(&rps_needed)) {
Tom Herbertfec5e652010-04-16 16:01:27 -07003129 struct rps_dev_flow voidflow, *rflow = &voidflow;
Eric Dumazetb0e28f12010-04-15 00:14:07 -07003130 int cpu;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003131
Changli Gaocece1942010-08-07 20:35:43 -07003132 preempt_disable();
Eric Dumazetb0e28f12010-04-15 00:14:07 -07003133 rcu_read_lock();
Tom Herbertfec5e652010-04-16 16:01:27 -07003134
3135 cpu = get_rps_cpu(skb->dev, skb, &rflow);
Eric Dumazetb0e28f12010-04-15 00:14:07 -07003136 if (cpu < 0)
3137 cpu = smp_processor_id();
Tom Herbertfec5e652010-04-16 16:01:27 -07003138
3139 ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
3140
Eric Dumazetb0e28f12010-04-15 00:14:07 -07003141 rcu_read_unlock();
Changli Gaocece1942010-08-07 20:35:43 -07003142 preempt_enable();
Eric Dumazetadc93002011-11-17 03:13:26 +00003143 } else
3144#endif
Tom Herbertfec5e652010-04-16 16:01:27 -07003145 {
3146 unsigned int qtail;
3147 ret = enqueue_to_backlog(skb, get_cpu(), &qtail);
3148 put_cpu();
3149 }
Eric Dumazetb0e28f12010-04-15 00:14:07 -07003150 return ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003151}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07003152EXPORT_SYMBOL(netif_rx);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003153
3154int netif_rx_ni(struct sk_buff *skb)
3155{
3156 int err;
3157
3158 preempt_disable();
3159 err = netif_rx(skb);
3160 if (local_softirq_pending())
3161 do_softirq();
3162 preempt_enable();
3163
3164 return err;
3165}
Linus Torvalds1da177e2005-04-16 15:20:36 -07003166EXPORT_SYMBOL(netif_rx_ni);
3167
Linus Torvalds1da177e2005-04-16 15:20:36 -07003168static void net_tx_action(struct softirq_action *h)
3169{
3170 struct softnet_data *sd = &__get_cpu_var(softnet_data);
3171
3172 if (sd->completion_queue) {
3173 struct sk_buff *clist;
3174
3175 local_irq_disable();
3176 clist = sd->completion_queue;
3177 sd->completion_queue = NULL;
3178 local_irq_enable();
3179
3180 while (clist) {
3181 struct sk_buff *skb = clist;
3182 clist = clist->next;
3183
Ilpo Järvinen547b7922008-07-25 21:43:18 -07003184 WARN_ON(atomic_read(&skb->users));
Koki Sanagi07dc22e2010-08-23 18:46:12 +09003185 trace_kfree_skb(skb, net_tx_action);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003186 __kfree_skb(skb);
3187 }
3188 }
3189
3190 if (sd->output_queue) {
David S. Miller37437bb2008-07-16 02:15:04 -07003191 struct Qdisc *head;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003192
3193 local_irq_disable();
3194 head = sd->output_queue;
3195 sd->output_queue = NULL;
Changli Gaoa9cbd582010-04-26 23:06:24 +00003196 sd->output_queue_tailp = &sd->output_queue;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003197 local_irq_enable();
3198
3199 while (head) {
David S. Miller37437bb2008-07-16 02:15:04 -07003200 struct Qdisc *q = head;
3201 spinlock_t *root_lock;
3202
Linus Torvalds1da177e2005-04-16 15:20:36 -07003203 head = head->next_sched;
3204
David S. Miller5fb66222008-08-02 20:02:43 -07003205 root_lock = qdisc_lock(q);
David S. Miller37437bb2008-07-16 02:15:04 -07003206 if (spin_trylock(root_lock)) {
Jarek Poplawskidef82a12008-08-17 21:54:43 -07003207 smp_mb__before_clear_bit();
3208 clear_bit(__QDISC_STATE_SCHED,
3209 &q->state);
David S. Miller37437bb2008-07-16 02:15:04 -07003210 qdisc_run(q);
3211 spin_unlock(root_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003212 } else {
David S. Miller195648b2008-08-19 04:00:36 -07003213 if (!test_bit(__QDISC_STATE_DEACTIVATED,
Jarek Poplawskie8a83e12008-09-07 18:41:21 -07003214 &q->state)) {
David S. Miller195648b2008-08-19 04:00:36 -07003215 __netif_reschedule(q);
Jarek Poplawskie8a83e12008-09-07 18:41:21 -07003216 } else {
3217 smp_mb__before_clear_bit();
3218 clear_bit(__QDISC_STATE_SCHED,
3219 &q->state);
3220 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07003221 }
3222 }
3223 }
3224}
3225
Jiri Pirkoab95bfe2010-06-01 21:52:08 +00003226#if (defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)) && \
3227 (defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE))
Michał Mirosławda678292009-06-05 05:35:28 +00003228/* This hook is defined here for ATM LANE */
3229int (*br_fdb_test_addr_hook)(struct net_device *dev,
3230 unsigned char *addr) __read_mostly;
Stephen Hemminger4fb019a2009-09-11 11:50:08 -07003231EXPORT_SYMBOL_GPL(br_fdb_test_addr_hook);
Michał Mirosławda678292009-06-05 05:35:28 +00003232#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -07003233
Linus Torvalds1da177e2005-04-16 15:20:36 -07003234#ifdef CONFIG_NET_CLS_ACT
3235/* TODO: Maybe we should just force sch_ingress to be compiled in
3236 * when CONFIG_NET_CLS_ACT is? otherwise some useless instructions
3237 * a compare and 2 stores extra right now if we dont have it on
3238 * but have CONFIG_NET_CLS_ACT
Lucas De Marchi25985ed2011-03-30 22:57:33 -03003239 * NOTE: This doesn't stop any functionality; if you dont have
3240 * the ingress scheduler, you just can't add policies on ingress.
Linus Torvalds1da177e2005-04-16 15:20:36 -07003241 *
3242 */
Eric Dumazet24824a02010-10-02 06:11:55 +00003243static int ing_filter(struct sk_buff *skb, struct netdev_queue *rxq)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003244{
Linus Torvalds1da177e2005-04-16 15:20:36 -07003245 struct net_device *dev = skb->dev;
Herbert Xuf697c3e2007-10-14 00:38:47 -07003246 u32 ttl = G_TC_RTTL(skb->tc_verd);
David S. Miller555353c2008-07-08 17:33:13 -07003247 int result = TC_ACT_OK;
3248 struct Qdisc *q;
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09003249
Stephen Hemmingerde384832010-08-01 00:33:23 -07003250 if (unlikely(MAX_RED_LOOP < ttl++)) {
Joe Perchese87cc472012-05-13 21:56:26 +00003251 net_warn_ratelimited("Redir loop detected Dropping packet (%d->%d)\n",
3252 skb->skb_iif, dev->ifindex);
Herbert Xuf697c3e2007-10-14 00:38:47 -07003253 return TC_ACT_SHOT;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003254 }
3255
Herbert Xuf697c3e2007-10-14 00:38:47 -07003256 skb->tc_verd = SET_TC_RTTL(skb->tc_verd, ttl);
3257 skb->tc_verd = SET_TC_AT(skb->tc_verd, AT_INGRESS);
3258
David S. Miller83874002008-07-17 00:53:03 -07003259 q = rxq->qdisc;
David S. Miller8d50b532008-07-30 02:37:46 -07003260 if (q != &noop_qdisc) {
David S. Miller83874002008-07-17 00:53:03 -07003261 spin_lock(qdisc_lock(q));
David S. Millera9312ae2008-08-17 21:51:03 -07003262 if (likely(!test_bit(__QDISC_STATE_DEACTIVATED, &q->state)))
3263 result = qdisc_enqueue_root(skb, q);
David S. Miller83874002008-07-17 00:53:03 -07003264 spin_unlock(qdisc_lock(q));
3265 }
Herbert Xuf697c3e2007-10-14 00:38:47 -07003266
Linus Torvalds1da177e2005-04-16 15:20:36 -07003267 return result;
3268}
Herbert Xuf697c3e2007-10-14 00:38:47 -07003269
3270static inline struct sk_buff *handle_ing(struct sk_buff *skb,
3271 struct packet_type **pt_prev,
3272 int *ret, struct net_device *orig_dev)
3273{
Eric Dumazet24824a02010-10-02 06:11:55 +00003274 struct netdev_queue *rxq = rcu_dereference(skb->dev->ingress_queue);
3275
3276 if (!rxq || rxq->qdisc == &noop_qdisc)
Herbert Xuf697c3e2007-10-14 00:38:47 -07003277 goto out;
3278
3279 if (*pt_prev) {
3280 *ret = deliver_skb(skb, *pt_prev, orig_dev);
3281 *pt_prev = NULL;
Herbert Xuf697c3e2007-10-14 00:38:47 -07003282 }
3283
Eric Dumazet24824a02010-10-02 06:11:55 +00003284 switch (ing_filter(skb, rxq)) {
Herbert Xuf697c3e2007-10-14 00:38:47 -07003285 case TC_ACT_SHOT:
3286 case TC_ACT_STOLEN:
3287 kfree_skb(skb);
3288 return NULL;
3289 }
3290
3291out:
3292 skb->tc_verd = 0;
3293 return skb;
3294}
Linus Torvalds1da177e2005-04-16 15:20:36 -07003295#endif
3296
Jiri Pirkoab95bfe2010-06-01 21:52:08 +00003297/**
3298 * netdev_rx_handler_register - register receive handler
3299 * @dev: device to register a handler for
3300 * @rx_handler: receive handler to register
Jiri Pirko93e2c322010-06-10 03:34:59 +00003301 * @rx_handler_data: data pointer that is used by rx handler
Jiri Pirkoab95bfe2010-06-01 21:52:08 +00003302 *
3303 * Register a receive hander for a device. This handler will then be
3304 * called from __netif_receive_skb. A negative errno code is returned
3305 * on a failure.
3306 *
3307 * The caller must hold the rtnl_mutex.
Jiri Pirko8a4eb572011-03-12 03:14:39 +00003308 *
3309 * For a general description of rx_handler, see enum rx_handler_result.
Jiri Pirkoab95bfe2010-06-01 21:52:08 +00003310 */
3311int netdev_rx_handler_register(struct net_device *dev,
Jiri Pirko93e2c322010-06-10 03:34:59 +00003312 rx_handler_func_t *rx_handler,
3313 void *rx_handler_data)
Jiri Pirkoab95bfe2010-06-01 21:52:08 +00003314{
3315 ASSERT_RTNL();
3316
3317 if (dev->rx_handler)
3318 return -EBUSY;
3319
Jiri Pirko93e2c322010-06-10 03:34:59 +00003320 rcu_assign_pointer(dev->rx_handler_data, rx_handler_data);
Jiri Pirkoab95bfe2010-06-01 21:52:08 +00003321 rcu_assign_pointer(dev->rx_handler, rx_handler);
3322
3323 return 0;
3324}
3325EXPORT_SYMBOL_GPL(netdev_rx_handler_register);
3326
3327/**
3328 * netdev_rx_handler_unregister - unregister receive handler
3329 * @dev: device to unregister a handler from
3330 *
3331 * Unregister a receive hander from a device.
3332 *
3333 * The caller must hold the rtnl_mutex.
3334 */
3335void netdev_rx_handler_unregister(struct net_device *dev)
3336{
3337
3338 ASSERT_RTNL();
Stephen Hemmingera9b3cd72011-08-01 16:19:00 +00003339 RCU_INIT_POINTER(dev->rx_handler, NULL);
3340 RCU_INIT_POINTER(dev->rx_handler_data, NULL);
Jiri Pirkoab95bfe2010-06-01 21:52:08 +00003341}
3342EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister);
3343
Mel Gormanb4b9e352012-07-31 16:44:26 -07003344/*
3345 * Limit the use of PFMEMALLOC reserves to those protocols that implement
3346 * the special handling of PFMEMALLOC skbs.
3347 */
3348static bool skb_pfmemalloc_protocol(struct sk_buff *skb)
3349{
3350 switch (skb->protocol) {
3351 case __constant_htons(ETH_P_ARP):
3352 case __constant_htons(ETH_P_IP):
3353 case __constant_htons(ETH_P_IPV6):
3354 case __constant_htons(ETH_P_8021Q):
3355 return true;
3356 default:
3357 return false;
3358 }
3359}
3360
David S. Miller9754e292013-02-14 15:57:38 -05003361static int __netif_receive_skb_core(struct sk_buff *skb, bool pfmemalloc)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003362{
3363 struct packet_type *ptype, *pt_prev;
Jiri Pirkoab95bfe2010-06-01 21:52:08 +00003364 rx_handler_func_t *rx_handler;
David S. Millerf2ccd8f2005-08-09 19:34:12 -07003365 struct net_device *orig_dev;
David S. Miller63d8ea72011-02-28 10:48:59 -08003366 struct net_device *null_or_dev;
Jiri Pirko8a4eb572011-03-12 03:14:39 +00003367 bool deliver_exact = false;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003368 int ret = NET_RX_DROP;
Al Viro252e3342006-11-14 20:48:11 -08003369 __be16 type;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003370
Eric Dumazet588f0332011-11-15 04:12:55 +00003371 net_timestamp_check(!netdev_tstamp_prequeue, skb);
Eric Dumazet81bbb3d2009-09-30 16:42:42 -07003372
Koki Sanagicf66ba52010-08-23 18:45:02 +09003373 trace_netif_receive_skb(skb);
Patrick McHardy9b22ea52008-11-04 14:49:57 -08003374
Linus Torvalds1da177e2005-04-16 15:20:36 -07003375 /* if we've gotten here through NAPI, check netpoll */
Stephen Hemmingerbea33482007-10-03 16:41:36 -07003376 if (netpoll_receive_skb(skb))
Mel Gormanb4b9e352012-07-31 16:44:26 -07003377 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003378
Joe Eykholtcc9bd5c2008-07-02 18:22:00 -07003379 orig_dev = skb->dev;
Jiri Pirko1765a572011-02-12 06:48:36 +00003380
Arnaldo Carvalho de Meloc1d2bbe2007-04-10 20:45:18 -07003381 skb_reset_network_header(skb);
Eric Dumazetfda55ec2013-01-07 09:28:21 +00003382 if (!skb_transport_header_was_set(skb))
3383 skb_reset_transport_header(skb);
Jiri Pirko0b5c9db2011-06-10 06:56:58 +00003384 skb_reset_mac_len(skb);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003385
3386 pt_prev = NULL;
3387
3388 rcu_read_lock();
3389
David S. Miller63d8ea72011-02-28 10:48:59 -08003390another_round:
David S. Millerb6858172012-07-23 16:27:54 -07003391 skb->skb_iif = skb->dev->ifindex;
David S. Miller63d8ea72011-02-28 10:48:59 -08003392
3393 __this_cpu_inc(softnet_data.processed);
3394
Jiri Pirkobcc6d472011-04-07 19:48:33 +00003395 if (skb->protocol == cpu_to_be16(ETH_P_8021Q)) {
3396 skb = vlan_untag(skb);
3397 if (unlikely(!skb))
Mel Gormanb4b9e352012-07-31 16:44:26 -07003398 goto unlock;
Jiri Pirkobcc6d472011-04-07 19:48:33 +00003399 }
3400
Linus Torvalds1da177e2005-04-16 15:20:36 -07003401#ifdef CONFIG_NET_CLS_ACT
3402 if (skb->tc_verd & TC_NCLS) {
3403 skb->tc_verd = CLR_TC_NCLS(skb->tc_verd);
3404 goto ncls;
3405 }
3406#endif
3407
David S. Miller9754e292013-02-14 15:57:38 -05003408 if (pfmemalloc)
Mel Gormanb4b9e352012-07-31 16:44:26 -07003409 goto skip_taps;
3410
Linus Torvalds1da177e2005-04-16 15:20:36 -07003411 list_for_each_entry_rcu(ptype, &ptype_all, list) {
David S. Miller63d8ea72011-02-28 10:48:59 -08003412 if (!ptype->dev || ptype->dev == skb->dev) {
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09003413 if (pt_prev)
David S. Millerf2ccd8f2005-08-09 19:34:12 -07003414 ret = deliver_skb(skb, pt_prev, orig_dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003415 pt_prev = ptype;
3416 }
3417 }
3418
Mel Gormanb4b9e352012-07-31 16:44:26 -07003419skip_taps:
Linus Torvalds1da177e2005-04-16 15:20:36 -07003420#ifdef CONFIG_NET_CLS_ACT
Herbert Xuf697c3e2007-10-14 00:38:47 -07003421 skb = handle_ing(skb, &pt_prev, &ret, orig_dev);
3422 if (!skb)
Mel Gormanb4b9e352012-07-31 16:44:26 -07003423 goto unlock;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003424ncls:
3425#endif
3426
David S. Miller9754e292013-02-14 15:57:38 -05003427 if (pfmemalloc && !skb_pfmemalloc_protocol(skb))
Mel Gormanb4b9e352012-07-31 16:44:26 -07003428 goto drop;
3429
John Fastabend24257172011-10-10 09:16:41 +00003430 if (vlan_tx_tag_present(skb)) {
3431 if (pt_prev) {
3432 ret = deliver_skb(skb, pt_prev, orig_dev);
3433 pt_prev = NULL;
3434 }
Florian Zumbiehl48cc32d32012-10-07 15:51:58 +00003435 if (vlan_do_receive(&skb))
John Fastabend24257172011-10-10 09:16:41 +00003436 goto another_round;
3437 else if (unlikely(!skb))
Mel Gormanb4b9e352012-07-31 16:44:26 -07003438 goto unlock;
John Fastabend24257172011-10-10 09:16:41 +00003439 }
3440
Florian Zumbiehl48cc32d32012-10-07 15:51:58 +00003441 rx_handler = rcu_dereference(skb->dev->rx_handler);
Jiri Pirkoab95bfe2010-06-01 21:52:08 +00003442 if (rx_handler) {
3443 if (pt_prev) {
3444 ret = deliver_skb(skb, pt_prev, orig_dev);
3445 pt_prev = NULL;
3446 }
Jiri Pirko8a4eb572011-03-12 03:14:39 +00003447 switch (rx_handler(&skb)) {
3448 case RX_HANDLER_CONSUMED:
Mel Gormanb4b9e352012-07-31 16:44:26 -07003449 goto unlock;
Jiri Pirko8a4eb572011-03-12 03:14:39 +00003450 case RX_HANDLER_ANOTHER:
David S. Miller63d8ea72011-02-28 10:48:59 -08003451 goto another_round;
Jiri Pirko8a4eb572011-03-12 03:14:39 +00003452 case RX_HANDLER_EXACT:
3453 deliver_exact = true;
3454 case RX_HANDLER_PASS:
3455 break;
3456 default:
3457 BUG();
3458 }
Jiri Pirkoab95bfe2010-06-01 21:52:08 +00003459 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07003460
Florian Zumbiehl48cc32d32012-10-07 15:51:58 +00003461 if (vlan_tx_nonzero_tag_present(skb))
3462 skb->pkt_type = PACKET_OTHERHOST;
3463
David S. Miller63d8ea72011-02-28 10:48:59 -08003464 /* deliver only exact match when indicated */
Jiri Pirko8a4eb572011-03-12 03:14:39 +00003465 null_or_dev = deliver_exact ? skb->dev : NULL;
Andy Gospodarek1f3c8802009-12-14 10:48:58 +00003466
Linus Torvalds1da177e2005-04-16 15:20:36 -07003467 type = skb->protocol;
Pavel Emelyanov82d8a8672007-11-26 20:12:58 +08003468 list_for_each_entry_rcu(ptype,
3469 &ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
David S. Miller63d8ea72011-02-28 10:48:59 -08003470 if (ptype->type == type &&
Jiri Pirkoe3f48d32011-02-28 20:26:31 +00003471 (ptype->dev == null_or_dev || ptype->dev == skb->dev ||
3472 ptype->dev == orig_dev)) {
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09003473 if (pt_prev)
David S. Millerf2ccd8f2005-08-09 19:34:12 -07003474 ret = deliver_skb(skb, pt_prev, orig_dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003475 pt_prev = ptype;
3476 }
3477 }
3478
3479 if (pt_prev) {
Michael S. Tsirkin1080e512012-07-20 09:23:17 +00003480 if (unlikely(skb_orphan_frags(skb, GFP_ATOMIC)))
Michael S. Tsirkin0e698bf2012-09-15 22:44:16 +00003481 goto drop;
Michael S. Tsirkin1080e512012-07-20 09:23:17 +00003482 else
3483 ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003484 } else {
Mel Gormanb4b9e352012-07-31 16:44:26 -07003485drop:
Eric Dumazetcaf586e2010-09-30 21:06:55 +00003486 atomic_long_inc(&skb->dev->rx_dropped);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003487 kfree_skb(skb);
3488 /* Jamal, now you will not able to escape explaining
3489 * me how you were going to use this. :-)
3490 */
3491 ret = NET_RX_DROP;
3492 }
3493
Mel Gormanb4b9e352012-07-31 16:44:26 -07003494unlock:
Linus Torvalds1da177e2005-04-16 15:20:36 -07003495 rcu_read_unlock();
Mel Gormanb4b9e352012-07-31 16:44:26 -07003496out:
David S. Miller9754e292013-02-14 15:57:38 -05003497 return ret;
3498}
3499
3500static int __netif_receive_skb(struct sk_buff *skb)
3501{
3502 int ret;
3503
3504 if (sk_memalloc_socks() && skb_pfmemalloc(skb)) {
3505 unsigned long pflags = current->flags;
3506
3507 /*
3508 * PFMEMALLOC skbs are special, they should
3509 * - be delivered to SOCK_MEMALLOC sockets only
3510 * - stay away from userspace
3511 * - have bounded memory usage
3512 *
3513 * Use PF_MEMALLOC as this saves us from propagating the allocation
3514 * context down to all allocation sites.
3515 */
3516 current->flags |= PF_MEMALLOC;
3517 ret = __netif_receive_skb_core(skb, true);
3518 tsk_restore_flags(current, pflags, PF_MEMALLOC);
3519 } else
3520 ret = __netif_receive_skb_core(skb, false);
3521
Linus Torvalds1da177e2005-04-16 15:20:36 -07003522 return ret;
3523}
Tom Herbert0a9627f2010-03-16 08:03:29 +00003524
3525/**
3526 * netif_receive_skb - process receive buffer from network
3527 * @skb: buffer to process
3528 *
3529 * netif_receive_skb() is the main receive data processing function.
3530 * It always succeeds. The buffer may be dropped during processing
3531 * for congestion control or by the protocol layers.
3532 *
3533 * This function may only be called from softirq context and interrupts
3534 * should be enabled.
3535 *
3536 * Return values (usually ignored):
3537 * NET_RX_SUCCESS: no congestion
3538 * NET_RX_DROP: packet was dropped
3539 */
3540int netif_receive_skb(struct sk_buff *skb)
3541{
Eric Dumazet588f0332011-11-15 04:12:55 +00003542 net_timestamp_check(netdev_tstamp_prequeue, skb);
Eric Dumazet3b098e22010-05-15 23:57:10 -07003543
Richard Cochranc1f19b52010-07-17 08:49:36 +00003544 if (skb_defer_rx_timestamp(skb))
3545 return NET_RX_SUCCESS;
3546
Eric Dumazetdf334542010-03-24 19:13:54 +00003547#ifdef CONFIG_RPS
Ingo Molnarc5905af2012-02-24 08:31:31 +01003548 if (static_key_false(&rps_needed)) {
Eric Dumazet3b098e22010-05-15 23:57:10 -07003549 struct rps_dev_flow voidflow, *rflow = &voidflow;
3550 int cpu, ret;
Tom Herbert0a9627f2010-03-16 08:03:29 +00003551
Eric Dumazet3b098e22010-05-15 23:57:10 -07003552 rcu_read_lock();
Tom Herbert0a9627f2010-03-16 08:03:29 +00003553
Eric Dumazet3b098e22010-05-15 23:57:10 -07003554 cpu = get_rps_cpu(skb->dev, skb, &rflow);
Tom Herbertfec5e652010-04-16 16:01:27 -07003555
Eric Dumazet3b098e22010-05-15 23:57:10 -07003556 if (cpu >= 0) {
3557 ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
3558 rcu_read_unlock();
Eric Dumazetadc93002011-11-17 03:13:26 +00003559 return ret;
Eric Dumazet3b098e22010-05-15 23:57:10 -07003560 }
Eric Dumazetadc93002011-11-17 03:13:26 +00003561 rcu_read_unlock();
Tom Herbertfec5e652010-04-16 16:01:27 -07003562 }
Tom Herbert1e94d722010-03-18 17:45:44 -07003563#endif
Eric Dumazetadc93002011-11-17 03:13:26 +00003564 return __netif_receive_skb(skb);
Tom Herbert0a9627f2010-03-16 08:03:29 +00003565}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07003566EXPORT_SYMBOL(netif_receive_skb);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003567
Eric Dumazet88751272010-04-19 05:07:33 +00003568/* Network device is going away, flush any packets still pending
3569 * Called with irqs disabled.
3570 */
Changli Gao152102c2010-03-30 20:16:22 +00003571static void flush_backlog(void *arg)
Stephen Hemminger6e583ce2008-08-03 21:29:57 -07003572{
Changli Gao152102c2010-03-30 20:16:22 +00003573 struct net_device *dev = arg;
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003574 struct softnet_data *sd = &__get_cpu_var(softnet_data);
Stephen Hemminger6e583ce2008-08-03 21:29:57 -07003575 struct sk_buff *skb, *tmp;
3576
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003577 rps_lock(sd);
Changli Gao6e7676c2010-04-27 15:07:33 -07003578 skb_queue_walk_safe(&sd->input_pkt_queue, skb, tmp) {
Stephen Hemminger6e583ce2008-08-03 21:29:57 -07003579 if (skb->dev == dev) {
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003580 __skb_unlink(skb, &sd->input_pkt_queue);
Stephen Hemminger6e583ce2008-08-03 21:29:57 -07003581 kfree_skb(skb);
Tom Herbert76cc8b12010-05-20 18:37:59 +00003582 input_queue_head_incr(sd);
Stephen Hemminger6e583ce2008-08-03 21:29:57 -07003583 }
Changli Gao6e7676c2010-04-27 15:07:33 -07003584 }
Eric Dumazete36fa2f2010-04-19 21:17:14 +00003585 rps_unlock(sd);
Changli Gao6e7676c2010-04-27 15:07:33 -07003586
3587 skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
3588 if (skb->dev == dev) {
3589 __skb_unlink(skb, &sd->process_queue);
3590 kfree_skb(skb);
Tom Herbert76cc8b12010-05-20 18:37:59 +00003591 input_queue_head_incr(sd);
Changli Gao6e7676c2010-04-27 15:07:33 -07003592 }
3593 }
Stephen Hemminger6e583ce2008-08-03 21:29:57 -07003594}
3595
Herbert Xud565b0a2008-12-15 23:38:52 -08003596static int napi_gro_complete(struct sk_buff *skb)
3597{
Vlad Yasevich22061d82012-11-15 08:49:11 +00003598 struct packet_offload *ptype;
Herbert Xud565b0a2008-12-15 23:38:52 -08003599 __be16 type = skb->protocol;
Vlad Yasevich22061d82012-11-15 08:49:11 +00003600 struct list_head *head = &offload_base;
Herbert Xud565b0a2008-12-15 23:38:52 -08003601 int err = -ENOENT;
3602
Eric Dumazetc3c7c252012-12-06 13:54:59 +00003603 BUILD_BUG_ON(sizeof(struct napi_gro_cb) > sizeof(skb->cb));
3604
Herbert Xufc59f9a2009-04-14 15:11:06 -07003605 if (NAPI_GRO_CB(skb)->count == 1) {
3606 skb_shinfo(skb)->gso_size = 0;
Herbert Xud565b0a2008-12-15 23:38:52 -08003607 goto out;
Herbert Xufc59f9a2009-04-14 15:11:06 -07003608 }
Herbert Xud565b0a2008-12-15 23:38:52 -08003609
3610 rcu_read_lock();
3611 list_for_each_entry_rcu(ptype, head, list) {
Vlad Yasevichf191a1d2012-11-15 08:49:23 +00003612 if (ptype->type != type || !ptype->callbacks.gro_complete)
Herbert Xud565b0a2008-12-15 23:38:52 -08003613 continue;
3614
Vlad Yasevichf191a1d2012-11-15 08:49:23 +00003615 err = ptype->callbacks.gro_complete(skb);
Herbert Xud565b0a2008-12-15 23:38:52 -08003616 break;
3617 }
3618 rcu_read_unlock();
3619
3620 if (err) {
3621 WARN_ON(&ptype->list == head);
3622 kfree_skb(skb);
3623 return NET_RX_SUCCESS;
3624 }
3625
3626out:
Herbert Xud565b0a2008-12-15 23:38:52 -08003627 return netif_receive_skb(skb);
3628}
3629
Eric Dumazet2e71a6f2012-10-06 08:08:49 +00003630/* napi->gro_list contains packets ordered by age.
3631 * youngest packets at the head of it.
3632 * Complete skbs in reverse order to reduce latencies.
3633 */
3634void napi_gro_flush(struct napi_struct *napi, bool flush_old)
Herbert Xud565b0a2008-12-15 23:38:52 -08003635{
Eric Dumazet2e71a6f2012-10-06 08:08:49 +00003636 struct sk_buff *skb, *prev = NULL;
Herbert Xud565b0a2008-12-15 23:38:52 -08003637
Eric Dumazet2e71a6f2012-10-06 08:08:49 +00003638 /* scan list and build reverse chain */
3639 for (skb = napi->gro_list; skb != NULL; skb = skb->next) {
3640 skb->prev = prev;
3641 prev = skb;
Herbert Xud565b0a2008-12-15 23:38:52 -08003642 }
3643
Eric Dumazet2e71a6f2012-10-06 08:08:49 +00003644 for (skb = prev; skb; skb = prev) {
3645 skb->next = NULL;
3646
3647 if (flush_old && NAPI_GRO_CB(skb)->age == jiffies)
3648 return;
3649
3650 prev = skb->prev;
3651 napi_gro_complete(skb);
3652 napi->gro_count--;
3653 }
3654
Herbert Xud565b0a2008-12-15 23:38:52 -08003655 napi->gro_list = NULL;
3656}
Eric Dumazet86cac582010-08-31 18:25:32 +00003657EXPORT_SYMBOL(napi_gro_flush);
Herbert Xud565b0a2008-12-15 23:38:52 -08003658
Eric Dumazet89c5fa32012-12-10 13:28:16 +00003659static void gro_list_prepare(struct napi_struct *napi, struct sk_buff *skb)
3660{
3661 struct sk_buff *p;
3662 unsigned int maclen = skb->dev->hard_header_len;
3663
3664 for (p = napi->gro_list; p; p = p->next) {
3665 unsigned long diffs;
3666
3667 diffs = (unsigned long)p->dev ^ (unsigned long)skb->dev;
3668 diffs |= p->vlan_tci ^ skb->vlan_tci;
3669 if (maclen == ETH_HLEN)
3670 diffs |= compare_ether_header(skb_mac_header(p),
3671 skb_gro_mac_header(skb));
3672 else if (!diffs)
3673 diffs = memcmp(skb_mac_header(p),
3674 skb_gro_mac_header(skb),
3675 maclen);
3676 NAPI_GRO_CB(p)->same_flow = !diffs;
3677 NAPI_GRO_CB(p)->flush = 0;
3678 }
3679}
3680
Rami Rosenbb728822012-11-28 21:55:25 +00003681static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
Herbert Xud565b0a2008-12-15 23:38:52 -08003682{
3683 struct sk_buff **pp = NULL;
Vlad Yasevich22061d82012-11-15 08:49:11 +00003684 struct packet_offload *ptype;
Herbert Xud565b0a2008-12-15 23:38:52 -08003685 __be16 type = skb->protocol;
Vlad Yasevich22061d82012-11-15 08:49:11 +00003686 struct list_head *head = &offload_base;
Herbert Xu0da2afd52008-12-26 14:57:42 -08003687 int same_flow;
Ben Hutchings5b252f02009-10-29 07:17:09 +00003688 enum gro_result ret;
Herbert Xud565b0a2008-12-15 23:38:52 -08003689
Jarek Poplawskice9e76c2010-08-05 01:19:11 +00003690 if (!(skb->dev->features & NETIF_F_GRO) || netpoll_rx_on(skb))
Herbert Xud565b0a2008-12-15 23:38:52 -08003691 goto normal;
3692
David S. Miller21dc3302010-08-23 00:13:46 -07003693 if (skb_is_gso(skb) || skb_has_frag_list(skb))
Herbert Xuf17f5c92009-01-14 14:36:12 -08003694 goto normal;
3695
Eric Dumazet89c5fa32012-12-10 13:28:16 +00003696 gro_list_prepare(napi, skb);
3697
Herbert Xud565b0a2008-12-15 23:38:52 -08003698 rcu_read_lock();
3699 list_for_each_entry_rcu(ptype, head, list) {
Vlad Yasevichf191a1d2012-11-15 08:49:23 +00003700 if (ptype->type != type || !ptype->callbacks.gro_receive)
Herbert Xud565b0a2008-12-15 23:38:52 -08003701 continue;
3702
Herbert Xu86911732009-01-29 14:19:50 +00003703 skb_set_network_header(skb, skb_gro_offset(skb));
Eric Dumazetefd94502013-02-14 17:31:48 +00003704 skb_reset_mac_len(skb);
Herbert Xud565b0a2008-12-15 23:38:52 -08003705 NAPI_GRO_CB(skb)->same_flow = 0;
3706 NAPI_GRO_CB(skb)->flush = 0;
Herbert Xu5d38a072009-01-04 16:13:40 -08003707 NAPI_GRO_CB(skb)->free = 0;
Herbert Xud565b0a2008-12-15 23:38:52 -08003708
Vlad Yasevichf191a1d2012-11-15 08:49:23 +00003709 pp = ptype->callbacks.gro_receive(&napi->gro_list, skb);
Herbert Xud565b0a2008-12-15 23:38:52 -08003710 break;
3711 }
3712 rcu_read_unlock();
3713
3714 if (&ptype->list == head)
3715 goto normal;
3716
Herbert Xu0da2afd52008-12-26 14:57:42 -08003717 same_flow = NAPI_GRO_CB(skb)->same_flow;
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003718 ret = NAPI_GRO_CB(skb)->free ? GRO_MERGED_FREE : GRO_MERGED;
Herbert Xu0da2afd52008-12-26 14:57:42 -08003719
Herbert Xud565b0a2008-12-15 23:38:52 -08003720 if (pp) {
3721 struct sk_buff *nskb = *pp;
3722
3723 *pp = nskb->next;
3724 nskb->next = NULL;
3725 napi_gro_complete(nskb);
Herbert Xu4ae55442009-02-08 18:00:36 +00003726 napi->gro_count--;
Herbert Xud565b0a2008-12-15 23:38:52 -08003727 }
3728
Herbert Xu0da2afd52008-12-26 14:57:42 -08003729 if (same_flow)
Herbert Xud565b0a2008-12-15 23:38:52 -08003730 goto ok;
3731
Herbert Xu4ae55442009-02-08 18:00:36 +00003732 if (NAPI_GRO_CB(skb)->flush || napi->gro_count >= MAX_GRO_SKBS)
Herbert Xud565b0a2008-12-15 23:38:52 -08003733 goto normal;
Herbert Xud565b0a2008-12-15 23:38:52 -08003734
Herbert Xu4ae55442009-02-08 18:00:36 +00003735 napi->gro_count++;
Herbert Xud565b0a2008-12-15 23:38:52 -08003736 NAPI_GRO_CB(skb)->count = 1;
Eric Dumazet2e71a6f2012-10-06 08:08:49 +00003737 NAPI_GRO_CB(skb)->age = jiffies;
Herbert Xu86911732009-01-29 14:19:50 +00003738 skb_shinfo(skb)->gso_size = skb_gro_len(skb);
Herbert Xud565b0a2008-12-15 23:38:52 -08003739 skb->next = napi->gro_list;
3740 napi->gro_list = skb;
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003741 ret = GRO_HELD;
Herbert Xud565b0a2008-12-15 23:38:52 -08003742
Herbert Xuad0f9902009-02-01 01:24:55 -08003743pull:
Herbert Xucb189782009-05-26 18:50:31 +00003744 if (skb_headlen(skb) < skb_gro_offset(skb)) {
3745 int grow = skb_gro_offset(skb) - skb_headlen(skb);
3746
3747 BUG_ON(skb->end - skb->tail < grow);
3748
3749 memcpy(skb_tail_pointer(skb), NAPI_GRO_CB(skb)->frag0, grow);
3750
3751 skb->tail += grow;
3752 skb->data_len -= grow;
3753
3754 skb_shinfo(skb)->frags[0].page_offset += grow;
Eric Dumazet9e903e02011-10-18 21:00:24 +00003755 skb_frag_size_sub(&skb_shinfo(skb)->frags[0], grow);
Herbert Xucb189782009-05-26 18:50:31 +00003756
Eric Dumazet9e903e02011-10-18 21:00:24 +00003757 if (unlikely(!skb_frag_size(&skb_shinfo(skb)->frags[0]))) {
Ian Campbellea2ab692011-08-22 23:44:58 +00003758 skb_frag_unref(skb, 0);
Herbert Xucb189782009-05-26 18:50:31 +00003759 memmove(skb_shinfo(skb)->frags,
3760 skb_shinfo(skb)->frags + 1,
Jarek Poplawskie5093ae2010-08-11 02:02:10 +00003761 --skb_shinfo(skb)->nr_frags * sizeof(skb_frag_t));
Herbert Xucb189782009-05-26 18:50:31 +00003762 }
Herbert Xuad0f9902009-02-01 01:24:55 -08003763 }
3764
Herbert Xud565b0a2008-12-15 23:38:52 -08003765ok:
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003766 return ret;
Herbert Xud565b0a2008-12-15 23:38:52 -08003767
3768normal:
Herbert Xuad0f9902009-02-01 01:24:55 -08003769 ret = GRO_NORMAL;
3770 goto pull;
Herbert Xu5d38a072009-01-04 16:13:40 -08003771}
Herbert Xu96e93ea2009-01-06 10:49:34 -08003772
Herbert Xu96e93ea2009-01-06 10:49:34 -08003773
Rami Rosenbb728822012-11-28 21:55:25 +00003774static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
Herbert Xu5d38a072009-01-04 16:13:40 -08003775{
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003776 switch (ret) {
3777 case GRO_NORMAL:
Ben Hutchingsc7c4b3b2009-10-29 21:36:53 -07003778 if (netif_receive_skb(skb))
3779 ret = GRO_DROP;
3780 break;
Herbert Xu5d38a072009-01-04 16:13:40 -08003781
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003782 case GRO_DROP:
Herbert Xu5d38a072009-01-04 16:13:40 -08003783 kfree_skb(skb);
3784 break;
Ben Hutchings5b252f02009-10-29 07:17:09 +00003785
Eric Dumazetdaa86542012-04-19 07:07:40 +00003786 case GRO_MERGED_FREE:
Eric Dumazetd7e88832012-04-30 08:10:34 +00003787 if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD)
3788 kmem_cache_free(skbuff_head_cache, skb);
3789 else
3790 __kfree_skb(skb);
Eric Dumazetdaa86542012-04-19 07:07:40 +00003791 break;
3792
Ben Hutchings5b252f02009-10-29 07:17:09 +00003793 case GRO_HELD:
3794 case GRO_MERGED:
3795 break;
Herbert Xu5d38a072009-01-04 16:13:40 -08003796 }
3797
Ben Hutchingsc7c4b3b2009-10-29 21:36:53 -07003798 return ret;
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003799}
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003800
Eric Dumazetca07e432012-10-06 22:28:06 +00003801static void skb_gro_reset_offset(struct sk_buff *skb)
Herbert Xu78a478d2009-05-26 18:50:21 +00003802{
Eric Dumazetca07e432012-10-06 22:28:06 +00003803 const struct skb_shared_info *pinfo = skb_shinfo(skb);
3804 const skb_frag_t *frag0 = &pinfo->frags[0];
3805
Herbert Xu78a478d2009-05-26 18:50:21 +00003806 NAPI_GRO_CB(skb)->data_offset = 0;
3807 NAPI_GRO_CB(skb)->frag0 = NULL;
Herbert Xu74895942009-05-26 18:50:27 +00003808 NAPI_GRO_CB(skb)->frag0_len = 0;
Herbert Xu78a478d2009-05-26 18:50:21 +00003809
Herbert Xu78d3fd02009-05-26 18:50:23 +00003810 if (skb->mac_header == skb->tail &&
Eric Dumazetca07e432012-10-06 22:28:06 +00003811 pinfo->nr_frags &&
3812 !PageHighMem(skb_frag_page(frag0))) {
3813 NAPI_GRO_CB(skb)->frag0 = skb_frag_address(frag0);
3814 NAPI_GRO_CB(skb)->frag0_len = skb_frag_size(frag0);
Herbert Xu74895942009-05-26 18:50:27 +00003815 }
Herbert Xu78a478d2009-05-26 18:50:21 +00003816}
Herbert Xu78a478d2009-05-26 18:50:21 +00003817
Ben Hutchingsc7c4b3b2009-10-29 21:36:53 -07003818gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003819{
Herbert Xu86911732009-01-29 14:19:50 +00003820 skb_gro_reset_offset(skb);
3821
Eric Dumazet89c5fa32012-12-10 13:28:16 +00003822 return napi_skb_finish(dev_gro_receive(napi, skb), skb);
Herbert Xud565b0a2008-12-15 23:38:52 -08003823}
3824EXPORT_SYMBOL(napi_gro_receive);
3825
stephen hemmingerd0c2b0d2010-10-19 07:12:10 +00003826static void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb)
Herbert Xu96e93ea2009-01-06 10:49:34 -08003827{
Herbert Xu96e93ea2009-01-06 10:49:34 -08003828 __skb_pull(skb, skb_headlen(skb));
Eric Dumazet2a2a4592012-03-21 06:58:03 +00003829 /* restore the reserve we had after netdev_alloc_skb_ip_align() */
3830 skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN - skb_headroom(skb));
Jesse Gross3701e512010-10-20 13:56:06 +00003831 skb->vlan_tci = 0;
Herbert Xu66c46d72011-01-29 20:44:54 -08003832 skb->dev = napi->dev;
Andy Gospodarek6d152e22011-02-02 14:53:25 -08003833 skb->skb_iif = 0;
Herbert Xu96e93ea2009-01-06 10:49:34 -08003834
3835 napi->skb = skb;
3836}
Herbert Xu96e93ea2009-01-06 10:49:34 -08003837
Herbert Xu76620aa2009-04-16 02:02:07 -07003838struct sk_buff *napi_get_frags(struct napi_struct *napi)
Herbert Xu5d38a072009-01-04 16:13:40 -08003839{
Herbert Xu5d38a072009-01-04 16:13:40 -08003840 struct sk_buff *skb = napi->skb;
Herbert Xu5d38a072009-01-04 16:13:40 -08003841
3842 if (!skb) {
Eric Dumazet89d71a62009-10-13 05:34:20 +00003843 skb = netdev_alloc_skb_ip_align(napi->dev, GRO_MAX_HEAD);
3844 if (skb)
3845 napi->skb = skb;
Herbert Xu5d38a072009-01-04 16:13:40 -08003846 }
Herbert Xu96e93ea2009-01-06 10:49:34 -08003847 return skb;
3848}
Herbert Xu76620aa2009-04-16 02:02:07 -07003849EXPORT_SYMBOL(napi_get_frags);
Herbert Xu96e93ea2009-01-06 10:49:34 -08003850
Rami Rosenbb728822012-11-28 21:55:25 +00003851static gro_result_t napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb,
Ben Hutchingsc7c4b3b2009-10-29 21:36:53 -07003852 gro_result_t ret)
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003853{
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003854 switch (ret) {
3855 case GRO_NORMAL:
Herbert Xu86911732009-01-29 14:19:50 +00003856 case GRO_HELD:
Ajit Khapardee76b69c2010-02-16 20:25:43 +00003857 skb->protocol = eth_type_trans(skb, skb->dev);
Herbert Xu86911732009-01-29 14:19:50 +00003858
Ben Hutchingsc7c4b3b2009-10-29 21:36:53 -07003859 if (ret == GRO_HELD)
3860 skb_gro_pull(skb, -ETH_HLEN);
3861 else if (netif_receive_skb(skb))
3862 ret = GRO_DROP;
Herbert Xu86911732009-01-29 14:19:50 +00003863 break;
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003864
3865 case GRO_DROP:
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003866 case GRO_MERGED_FREE:
3867 napi_reuse_skb(napi, skb);
3868 break;
Ben Hutchings5b252f02009-10-29 07:17:09 +00003869
3870 case GRO_MERGED:
3871 break;
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003872 }
3873
Ben Hutchingsc7c4b3b2009-10-29 21:36:53 -07003874 return ret;
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003875}
Herbert Xu5d0d9be2009-01-29 14:19:48 +00003876
Eric Dumazet4adb9c42012-05-18 20:49:06 +00003877static struct sk_buff *napi_frags_skb(struct napi_struct *napi)
Herbert Xu96e93ea2009-01-06 10:49:34 -08003878{
Herbert Xu76620aa2009-04-16 02:02:07 -07003879 struct sk_buff *skb = napi->skb;
3880 struct ethhdr *eth;
Herbert Xua5b1cf22009-05-26 18:50:28 +00003881 unsigned int hlen;
3882 unsigned int off;
Herbert Xu76620aa2009-04-16 02:02:07 -07003883
3884 napi->skb = NULL;
3885
3886 skb_reset_mac_header(skb);
3887 skb_gro_reset_offset(skb);
3888
Herbert Xua5b1cf22009-05-26 18:50:28 +00003889 off = skb_gro_offset(skb);
3890 hlen = off + sizeof(*eth);
3891 eth = skb_gro_header_fast(skb, off);
3892 if (skb_gro_header_hard(skb, hlen)) {
3893 eth = skb_gro_header_slow(skb, hlen, off);
3894 if (unlikely(!eth)) {
3895 napi_reuse_skb(napi, skb);
3896 skb = NULL;
3897 goto out;
3898 }
Herbert Xu76620aa2009-04-16 02:02:07 -07003899 }
3900
3901 skb_gro_pull(skb, sizeof(*eth));
3902
3903 /*
3904 * This works because the only protocols we care about don't require
3905 * special handling. We'll fix it up properly at the end.
3906 */
3907 skb->protocol = eth->h_proto;
3908
3909out:
3910 return skb;
3911}
Herbert Xu76620aa2009-04-16 02:02:07 -07003912
Ben Hutchingsc7c4b3b2009-10-29 21:36:53 -07003913gro_result_t napi_gro_frags(struct napi_struct *napi)
Herbert Xu76620aa2009-04-16 02:02:07 -07003914{
3915 struct sk_buff *skb = napi_frags_skb(napi);
Herbert Xu96e93ea2009-01-06 10:49:34 -08003916
3917 if (!skb)
Ben Hutchingsc7c4b3b2009-10-29 21:36:53 -07003918 return GRO_DROP;
Herbert Xu96e93ea2009-01-06 10:49:34 -08003919
Eric Dumazet89c5fa32012-12-10 13:28:16 +00003920 return napi_frags_finish(napi, skb, dev_gro_receive(napi, skb));
Herbert Xu5d38a072009-01-04 16:13:40 -08003921}
3922EXPORT_SYMBOL(napi_gro_frags);
3923
Eric Dumazete326bed2010-04-22 00:22:45 -07003924/*
3925 * net_rps_action sends any pending IPI's for rps.
3926 * Note: called with local irq disabled, but exits with local irq enabled.
3927 */
3928static void net_rps_action_and_irq_enable(struct softnet_data *sd)
3929{
3930#ifdef CONFIG_RPS
3931 struct softnet_data *remsd = sd->rps_ipi_list;
3932
3933 if (remsd) {
3934 sd->rps_ipi_list = NULL;
3935
3936 local_irq_enable();
3937
3938 /* Send pending IPI's to kick RPS processing on remote cpus. */
3939 while (remsd) {
3940 struct softnet_data *next = remsd->rps_ipi_next;
3941
3942 if (cpu_online(remsd->cpu))
3943 __smp_call_function_single(remsd->cpu,
3944 &remsd->csd, 0);
3945 remsd = next;
3946 }
3947 } else
3948#endif
3949 local_irq_enable();
3950}
3951
Stephen Hemmingerbea33482007-10-03 16:41:36 -07003952static int process_backlog(struct napi_struct *napi, int quota)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003953{
3954 int work = 0;
Eric Dumazeteecfd7c2010-05-06 22:07:48 -07003955 struct softnet_data *sd = container_of(napi, struct softnet_data, backlog);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003956
Eric Dumazete326bed2010-04-22 00:22:45 -07003957#ifdef CONFIG_RPS
3958 /* Check if we have pending ipi, its better to send them now,
3959 * not waiting net_rx_action() end.
3960 */
3961 if (sd->rps_ipi_list) {
3962 local_irq_disable();
3963 net_rps_action_and_irq_enable(sd);
3964 }
3965#endif
Stephen Hemmingerbea33482007-10-03 16:41:36 -07003966 napi->weight = weight_p;
Changli Gao6e7676c2010-04-27 15:07:33 -07003967 local_irq_disable();
3968 while (work < quota) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07003969 struct sk_buff *skb;
Changli Gao6e7676c2010-04-27 15:07:33 -07003970 unsigned int qlen;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003971
Changli Gao6e7676c2010-04-27 15:07:33 -07003972 while ((skb = __skb_dequeue(&sd->process_queue))) {
Eric Dumazete4008272010-04-05 15:42:39 -07003973 local_irq_enable();
Changli Gao6e7676c2010-04-27 15:07:33 -07003974 __netif_receive_skb(skb);
Changli Gao6e7676c2010-04-27 15:07:33 -07003975 local_irq_disable();
Tom Herbert76cc8b12010-05-20 18:37:59 +00003976 input_queue_head_incr(sd);
3977 if (++work >= quota) {
3978 local_irq_enable();
3979 return work;
3980 }
Stephen Hemmingerbea33482007-10-03 16:41:36 -07003981 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07003982
Changli Gao6e7676c2010-04-27 15:07:33 -07003983 rps_lock(sd);
3984 qlen = skb_queue_len(&sd->input_pkt_queue);
Tom Herbert76cc8b12010-05-20 18:37:59 +00003985 if (qlen)
Changli Gao6e7676c2010-04-27 15:07:33 -07003986 skb_queue_splice_tail_init(&sd->input_pkt_queue,
3987 &sd->process_queue);
Tom Herbert76cc8b12010-05-20 18:37:59 +00003988
Changli Gao6e7676c2010-04-27 15:07:33 -07003989 if (qlen < quota - work) {
Eric Dumazeteecfd7c2010-05-06 22:07:48 -07003990 /*
3991 * Inline a custom version of __napi_complete().
3992 * only current cpu owns and manipulates this napi,
3993 * and NAPI_STATE_SCHED is the only possible flag set on backlog.
3994 * we can use a plain write instead of clear_bit(),
3995 * and we dont need an smp_mb() memory barrier.
3996 */
3997 list_del(&napi->poll_list);
3998 napi->state = 0;
3999
Changli Gao6e7676c2010-04-27 15:07:33 -07004000 quota = work + qlen;
4001 }
4002 rps_unlock(sd);
4003 }
4004 local_irq_enable();
Linus Torvalds1da177e2005-04-16 15:20:36 -07004005
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004006 return work;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004007}
4008
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004009/**
4010 * __napi_schedule - schedule for receive
Randy Dunlapc4ea43c2007-10-12 21:17:49 -07004011 * @n: entry to schedule
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004012 *
4013 * The entry's receive function will be scheduled to run
4014 */
Harvey Harrisonb5606c22008-02-13 15:03:16 -08004015void __napi_schedule(struct napi_struct *n)
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004016{
4017 unsigned long flags;
4018
4019 local_irq_save(flags);
Eric Dumazeteecfd7c2010-05-06 22:07:48 -07004020 ____napi_schedule(&__get_cpu_var(softnet_data), n);
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004021 local_irq_restore(flags);
4022}
4023EXPORT_SYMBOL(__napi_schedule);
4024
Herbert Xud565b0a2008-12-15 23:38:52 -08004025void __napi_complete(struct napi_struct *n)
4026{
4027 BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state));
4028 BUG_ON(n->gro_list);
4029
4030 list_del(&n->poll_list);
4031 smp_mb__before_clear_bit();
4032 clear_bit(NAPI_STATE_SCHED, &n->state);
4033}
4034EXPORT_SYMBOL(__napi_complete);
4035
4036void napi_complete(struct napi_struct *n)
4037{
4038 unsigned long flags;
4039
4040 /*
4041 * don't let napi dequeue from the cpu poll list
4042 * just in case its running on a different cpu
4043 */
4044 if (unlikely(test_bit(NAPI_STATE_NPSVC, &n->state)))
4045 return;
4046
Eric Dumazet2e71a6f2012-10-06 08:08:49 +00004047 napi_gro_flush(n, false);
Herbert Xud565b0a2008-12-15 23:38:52 -08004048 local_irq_save(flags);
4049 __napi_complete(n);
4050 local_irq_restore(flags);
4051}
4052EXPORT_SYMBOL(napi_complete);
4053
4054void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
4055 int (*poll)(struct napi_struct *, int), int weight)
4056{
4057 INIT_LIST_HEAD(&napi->poll_list);
Herbert Xu4ae55442009-02-08 18:00:36 +00004058 napi->gro_count = 0;
Herbert Xud565b0a2008-12-15 23:38:52 -08004059 napi->gro_list = NULL;
Herbert Xu5d38a072009-01-04 16:13:40 -08004060 napi->skb = NULL;
Herbert Xud565b0a2008-12-15 23:38:52 -08004061 napi->poll = poll;
4062 napi->weight = weight;
4063 list_add(&napi->dev_list, &dev->napi_list);
Herbert Xud565b0a2008-12-15 23:38:52 -08004064 napi->dev = dev;
Herbert Xu5d38a072009-01-04 16:13:40 -08004065#ifdef CONFIG_NETPOLL
Herbert Xud565b0a2008-12-15 23:38:52 -08004066 spin_lock_init(&napi->poll_lock);
4067 napi->poll_owner = -1;
4068#endif
4069 set_bit(NAPI_STATE_SCHED, &napi->state);
4070}
4071EXPORT_SYMBOL(netif_napi_add);
4072
4073void netif_napi_del(struct napi_struct *napi)
4074{
4075 struct sk_buff *skb, *next;
4076
Peter P Waskiewicz Jrd7b06632008-12-26 01:35:35 -08004077 list_del_init(&napi->dev_list);
Herbert Xu76620aa2009-04-16 02:02:07 -07004078 napi_free_frags(napi);
Herbert Xud565b0a2008-12-15 23:38:52 -08004079
4080 for (skb = napi->gro_list; skb; skb = next) {
4081 next = skb->next;
4082 skb->next = NULL;
4083 kfree_skb(skb);
4084 }
4085
4086 napi->gro_list = NULL;
Herbert Xu4ae55442009-02-08 18:00:36 +00004087 napi->gro_count = 0;
Herbert Xud565b0a2008-12-15 23:38:52 -08004088}
4089EXPORT_SYMBOL(netif_napi_del);
4090
Linus Torvalds1da177e2005-04-16 15:20:36 -07004091static void net_rx_action(struct softirq_action *h)
4092{
Eric Dumazete326bed2010-04-22 00:22:45 -07004093 struct softnet_data *sd = &__get_cpu_var(softnet_data);
Stephen Hemminger24f8b232008-11-03 17:14:38 -08004094 unsigned long time_limit = jiffies + 2;
Stephen Hemminger51b0bde2005-06-23 20:14:40 -07004095 int budget = netdev_budget;
Matt Mackall53fb95d2005-08-11 19:27:43 -07004096 void *have;
4097
Linus Torvalds1da177e2005-04-16 15:20:36 -07004098 local_irq_disable();
4099
Eric Dumazete326bed2010-04-22 00:22:45 -07004100 while (!list_empty(&sd->poll_list)) {
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004101 struct napi_struct *n;
4102 int work, weight;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004103
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004104 /* If softirq window is exhuasted then punt.
Stephen Hemminger24f8b232008-11-03 17:14:38 -08004105 * Allow this to run for 2 jiffies since which will allow
4106 * an average latency of 1.5/HZ.
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004107 */
Stephen Hemminger24f8b232008-11-03 17:14:38 -08004108 if (unlikely(budget <= 0 || time_after(jiffies, time_limit)))
Linus Torvalds1da177e2005-04-16 15:20:36 -07004109 goto softnet_break;
4110
4111 local_irq_enable();
4112
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004113 /* Even though interrupts have been re-enabled, this
4114 * access is safe because interrupts can only add new
4115 * entries to the tail of this list, and only ->poll()
4116 * calls can remove this head entry from the list.
4117 */
Eric Dumazete326bed2010-04-22 00:22:45 -07004118 n = list_first_entry(&sd->poll_list, struct napi_struct, poll_list);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004119
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004120 have = netpoll_poll_lock(n);
4121
4122 weight = n->weight;
4123
David S. Miller0a7606c2007-10-29 21:28:47 -07004124 /* This NAPI_STATE_SCHED test is for avoiding a race
4125 * with netpoll's poll_napi(). Only the entity which
4126 * obtains the lock and sees NAPI_STATE_SCHED set will
4127 * actually make the ->poll() call. Therefore we avoid
Lucas De Marchi25985ed2011-03-30 22:57:33 -03004128 * accidentally calling ->poll() when NAPI is not scheduled.
David S. Miller0a7606c2007-10-29 21:28:47 -07004129 */
4130 work = 0;
Neil Horman4ea7e382009-05-21 07:36:08 +00004131 if (test_bit(NAPI_STATE_SCHED, &n->state)) {
David S. Miller0a7606c2007-10-29 21:28:47 -07004132 work = n->poll(n, weight);
Neil Horman4ea7e382009-05-21 07:36:08 +00004133 trace_napi_poll(n);
4134 }
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004135
4136 WARN_ON_ONCE(work > weight);
4137
4138 budget -= work;
4139
4140 local_irq_disable();
4141
4142 /* Drivers must not modify the NAPI state if they
4143 * consume the entire weight. In such cases this code
4144 * still "owns" the NAPI instance and therefore can
4145 * move the instance around on the list at-will.
4146 */
David S. Millerfed17f32008-01-07 21:00:40 -08004147 if (unlikely(work == weight)) {
Herbert Xuff780cd2009-06-26 19:27:04 -07004148 if (unlikely(napi_disable_pending(n))) {
4149 local_irq_enable();
4150 napi_complete(n);
4151 local_irq_disable();
Eric Dumazet2e71a6f2012-10-06 08:08:49 +00004152 } else {
4153 if (n->gro_list) {
4154 /* flush too old packets
4155 * If HZ < 1000, flush all packets.
4156 */
4157 local_irq_enable();
4158 napi_gro_flush(n, HZ >= 1000);
4159 local_irq_disable();
4160 }
Eric Dumazete326bed2010-04-22 00:22:45 -07004161 list_move_tail(&n->poll_list, &sd->poll_list);
Eric Dumazet2e71a6f2012-10-06 08:08:49 +00004162 }
David S. Millerfed17f32008-01-07 21:00:40 -08004163 }
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004164
4165 netpoll_poll_unlock(have);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004166 }
4167out:
Eric Dumazete326bed2010-04-22 00:22:45 -07004168 net_rps_action_and_irq_enable(sd);
Tom Herbert0a9627f2010-03-16 08:03:29 +00004169
Chris Leechdb217332006-06-17 21:24:58 -07004170#ifdef CONFIG_NET_DMA
4171 /*
4172 * There may not be any more sk_buffs coming right now, so push
4173 * any pending DMA copies to hardware
4174 */
Dan Williams2ba05622009-01-06 11:38:14 -07004175 dma_issue_pending_all();
Chris Leechdb217332006-06-17 21:24:58 -07004176#endif
Stephen Hemmingerbea33482007-10-03 16:41:36 -07004177
Linus Torvalds1da177e2005-04-16 15:20:36 -07004178 return;
4179
4180softnet_break:
Changli Gaodee42872010-05-02 05:42:16 +00004181 sd->time_squeeze++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004182 __raise_softirq_irqoff(NET_RX_SOFTIRQ);
4183 goto out;
4184}
4185
Jiri Pirko9ff162a2013-01-03 22:48:49 +00004186struct netdev_upper {
4187 struct net_device *dev;
4188 bool master;
4189 struct list_head list;
4190 struct rcu_head rcu;
4191 struct list_head search_list;
4192};
4193
4194static void __append_search_uppers(struct list_head *search_list,
4195 struct net_device *dev)
4196{
4197 struct netdev_upper *upper;
4198
4199 list_for_each_entry(upper, &dev->upper_dev_list, list) {
4200 /* check if this upper is not already in search list */
4201 if (list_empty(&upper->search_list))
4202 list_add_tail(&upper->search_list, search_list);
4203 }
4204}
4205
4206static bool __netdev_search_upper_dev(struct net_device *dev,
4207 struct net_device *upper_dev)
4208{
4209 LIST_HEAD(search_list);
4210 struct netdev_upper *upper;
4211 struct netdev_upper *tmp;
4212 bool ret = false;
4213
4214 __append_search_uppers(&search_list, dev);
4215 list_for_each_entry(upper, &search_list, search_list) {
4216 if (upper->dev == upper_dev) {
4217 ret = true;
4218 break;
4219 }
4220 __append_search_uppers(&search_list, upper->dev);
4221 }
4222 list_for_each_entry_safe(upper, tmp, &search_list, search_list)
4223 INIT_LIST_HEAD(&upper->search_list);
4224 return ret;
4225}
4226
4227static struct netdev_upper *__netdev_find_upper(struct net_device *dev,
4228 struct net_device *upper_dev)
4229{
4230 struct netdev_upper *upper;
4231
4232 list_for_each_entry(upper, &dev->upper_dev_list, list) {
4233 if (upper->dev == upper_dev)
4234 return upper;
4235 }
4236 return NULL;
4237}
4238
4239/**
4240 * netdev_has_upper_dev - Check if device is linked to an upper device
4241 * @dev: device
4242 * @upper_dev: upper device to check
4243 *
4244 * Find out if a device is linked to specified upper device and return true
4245 * in case it is. Note that this checks only immediate upper device,
4246 * not through a complete stack of devices. The caller must hold the RTNL lock.
4247 */
4248bool netdev_has_upper_dev(struct net_device *dev,
4249 struct net_device *upper_dev)
4250{
4251 ASSERT_RTNL();
4252
4253 return __netdev_find_upper(dev, upper_dev);
4254}
4255EXPORT_SYMBOL(netdev_has_upper_dev);
4256
4257/**
4258 * netdev_has_any_upper_dev - Check if device is linked to some device
4259 * @dev: device
4260 *
4261 * Find out if a device is linked to an upper device and return true in case
4262 * it is. The caller must hold the RTNL lock.
4263 */
4264bool netdev_has_any_upper_dev(struct net_device *dev)
4265{
4266 ASSERT_RTNL();
4267
4268 return !list_empty(&dev->upper_dev_list);
4269}
4270EXPORT_SYMBOL(netdev_has_any_upper_dev);
4271
4272/**
4273 * netdev_master_upper_dev_get - Get master upper device
4274 * @dev: device
4275 *
4276 * Find a master upper device and return pointer to it or NULL in case
4277 * it's not there. The caller must hold the RTNL lock.
4278 */
4279struct net_device *netdev_master_upper_dev_get(struct net_device *dev)
4280{
4281 struct netdev_upper *upper;
4282
4283 ASSERT_RTNL();
4284
4285 if (list_empty(&dev->upper_dev_list))
4286 return NULL;
4287
4288 upper = list_first_entry(&dev->upper_dev_list,
4289 struct netdev_upper, list);
4290 if (likely(upper->master))
4291 return upper->dev;
4292 return NULL;
4293}
4294EXPORT_SYMBOL(netdev_master_upper_dev_get);
4295
4296/**
4297 * netdev_master_upper_dev_get_rcu - Get master upper device
4298 * @dev: device
4299 *
4300 * Find a master upper device and return pointer to it or NULL in case
4301 * it's not there. The caller must hold the RCU read lock.
4302 */
4303struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev)
4304{
4305 struct netdev_upper *upper;
4306
4307 upper = list_first_or_null_rcu(&dev->upper_dev_list,
4308 struct netdev_upper, list);
4309 if (upper && likely(upper->master))
4310 return upper->dev;
4311 return NULL;
4312}
4313EXPORT_SYMBOL(netdev_master_upper_dev_get_rcu);
4314
4315static int __netdev_upper_dev_link(struct net_device *dev,
4316 struct net_device *upper_dev, bool master)
4317{
4318 struct netdev_upper *upper;
4319
4320 ASSERT_RTNL();
4321
4322 if (dev == upper_dev)
4323 return -EBUSY;
4324
4325 /* To prevent loops, check if dev is not upper device to upper_dev. */
4326 if (__netdev_search_upper_dev(upper_dev, dev))
4327 return -EBUSY;
4328
4329 if (__netdev_find_upper(dev, upper_dev))
4330 return -EEXIST;
4331
4332 if (master && netdev_master_upper_dev_get(dev))
4333 return -EBUSY;
4334
4335 upper = kmalloc(sizeof(*upper), GFP_KERNEL);
4336 if (!upper)
4337 return -ENOMEM;
4338
4339 upper->dev = upper_dev;
4340 upper->master = master;
4341 INIT_LIST_HEAD(&upper->search_list);
4342
4343 /* Ensure that master upper link is always the first item in list. */
4344 if (master)
4345 list_add_rcu(&upper->list, &dev->upper_dev_list);
4346 else
4347 list_add_tail_rcu(&upper->list, &dev->upper_dev_list);
4348 dev_hold(upper_dev);
4349
4350 return 0;
4351}
4352
4353/**
4354 * netdev_upper_dev_link - Add a link to the upper device
4355 * @dev: device
4356 * @upper_dev: new upper device
4357 *
4358 * Adds a link to device which is upper to this one. The caller must hold
4359 * the RTNL lock. On a failure a negative errno code is returned.
4360 * On success the reference counts are adjusted and the function
4361 * returns zero.
4362 */
4363int netdev_upper_dev_link(struct net_device *dev,
4364 struct net_device *upper_dev)
4365{
4366 return __netdev_upper_dev_link(dev, upper_dev, false);
4367}
4368EXPORT_SYMBOL(netdev_upper_dev_link);
4369
4370/**
4371 * netdev_master_upper_dev_link - Add a master link to the upper device
4372 * @dev: device
4373 * @upper_dev: new upper device
4374 *
4375 * Adds a link to device which is upper to this one. In this case, only
4376 * one master upper device can be linked, although other non-master devices
4377 * might be linked as well. The caller must hold the RTNL lock.
4378 * On a failure a negative errno code is returned. On success the reference
4379 * counts are adjusted and the function returns zero.
4380 */
4381int netdev_master_upper_dev_link(struct net_device *dev,
4382 struct net_device *upper_dev)
4383{
4384 return __netdev_upper_dev_link(dev, upper_dev, true);
4385}
4386EXPORT_SYMBOL(netdev_master_upper_dev_link);
4387
4388/**
4389 * netdev_upper_dev_unlink - Removes a link to upper device
4390 * @dev: device
4391 * @upper_dev: new upper device
4392 *
4393 * Removes a link to device which is upper to this one. The caller must hold
4394 * the RTNL lock.
4395 */
4396void netdev_upper_dev_unlink(struct net_device *dev,
4397 struct net_device *upper_dev)
4398{
4399 struct netdev_upper *upper;
4400
4401 ASSERT_RTNL();
4402
4403 upper = __netdev_find_upper(dev, upper_dev);
4404 if (!upper)
4405 return;
4406 list_del_rcu(&upper->list);
4407 dev_put(upper_dev);
4408 kfree_rcu(upper, rcu);
4409}
4410EXPORT_SYMBOL(netdev_upper_dev_unlink);
4411
Patrick McHardyb6c40d62008-10-07 15:26:48 -07004412static void dev_change_rx_flags(struct net_device *dev, int flags)
4413{
Stephen Hemmingerd3147742008-11-19 21:32:24 -08004414 const struct net_device_ops *ops = dev->netdev_ops;
4415
4416 if ((dev->flags & IFF_UP) && ops->ndo_change_rx_flags)
4417 ops->ndo_change_rx_flags(dev, flags);
Patrick McHardyb6c40d62008-10-07 15:26:48 -07004418}
4419
Wang Chendad9b332008-06-18 01:48:28 -07004420static int __dev_set_promiscuity(struct net_device *dev, int inc)
Patrick McHardy4417da62007-06-27 01:28:10 -07004421{
Eric Dumazetb536db92011-11-30 21:42:26 +00004422 unsigned int old_flags = dev->flags;
Eric W. Biedermand04a48b2012-05-23 17:01:57 -06004423 kuid_t uid;
4424 kgid_t gid;
Patrick McHardy4417da62007-06-27 01:28:10 -07004425
Patrick McHardy24023452007-07-14 18:51:31 -07004426 ASSERT_RTNL();
4427
Wang Chendad9b332008-06-18 01:48:28 -07004428 dev->flags |= IFF_PROMISC;
4429 dev->promiscuity += inc;
4430 if (dev->promiscuity == 0) {
4431 /*
4432 * Avoid overflow.
4433 * If inc causes overflow, untouch promisc and return error.
4434 */
4435 if (inc < 0)
4436 dev->flags &= ~IFF_PROMISC;
4437 else {
4438 dev->promiscuity -= inc;
Joe Perches7b6cd1c2012-02-01 10:54:43 +00004439 pr_warn("%s: promiscuity touches roof, set promiscuity failed. promiscuity feature of device might be broken.\n",
4440 dev->name);
Wang Chendad9b332008-06-18 01:48:28 -07004441 return -EOVERFLOW;
4442 }
4443 }
Patrick McHardy4417da62007-06-27 01:28:10 -07004444 if (dev->flags != old_flags) {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00004445 pr_info("device %s %s promiscuous mode\n",
4446 dev->name,
4447 dev->flags & IFF_PROMISC ? "entered" : "left");
David Howells8192b0c2008-11-14 10:39:10 +11004448 if (audit_enabled) {
4449 current_uid_gid(&uid, &gid);
Klaus Heinrich Kiwi7759db82008-01-23 22:57:45 -05004450 audit_log(current->audit_context, GFP_ATOMIC,
4451 AUDIT_ANOM_PROMISCUOUS,
4452 "dev=%s prom=%d old_prom=%d auid=%u uid=%u gid=%u ses=%u",
4453 dev->name, (dev->flags & IFF_PROMISC),
4454 (old_flags & IFF_PROMISC),
Eric W. Biedermane1760bd2012-09-10 22:39:43 -07004455 from_kuid(&init_user_ns, audit_get_loginuid(current)),
Eric W. Biedermand04a48b2012-05-23 17:01:57 -06004456 from_kuid(&init_user_ns, uid),
4457 from_kgid(&init_user_ns, gid),
Klaus Heinrich Kiwi7759db82008-01-23 22:57:45 -05004458 audit_get_sessionid(current));
David Howells8192b0c2008-11-14 10:39:10 +11004459 }
Patrick McHardy24023452007-07-14 18:51:31 -07004460
Patrick McHardyb6c40d62008-10-07 15:26:48 -07004461 dev_change_rx_flags(dev, IFF_PROMISC);
Patrick McHardy4417da62007-06-27 01:28:10 -07004462 }
Wang Chendad9b332008-06-18 01:48:28 -07004463 return 0;
Patrick McHardy4417da62007-06-27 01:28:10 -07004464}
4465
Linus Torvalds1da177e2005-04-16 15:20:36 -07004466/**
4467 * dev_set_promiscuity - update promiscuity count on a device
4468 * @dev: device
4469 * @inc: modifier
4470 *
Stephen Hemminger3041a062006-05-26 13:25:24 -07004471 * Add or remove promiscuity from a device. While the count in the device
Linus Torvalds1da177e2005-04-16 15:20:36 -07004472 * remains above zero the interface remains promiscuous. Once it hits zero
4473 * the device reverts back to normal filtering operation. A negative inc
4474 * value is used to drop promiscuity on the device.
Wang Chendad9b332008-06-18 01:48:28 -07004475 * Return 0 if successful or a negative errno code on error.
Linus Torvalds1da177e2005-04-16 15:20:36 -07004476 */
Wang Chendad9b332008-06-18 01:48:28 -07004477int dev_set_promiscuity(struct net_device *dev, int inc)
Linus Torvalds1da177e2005-04-16 15:20:36 -07004478{
Eric Dumazetb536db92011-11-30 21:42:26 +00004479 unsigned int old_flags = dev->flags;
Wang Chendad9b332008-06-18 01:48:28 -07004480 int err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004481
Wang Chendad9b332008-06-18 01:48:28 -07004482 err = __dev_set_promiscuity(dev, inc);
Patrick McHardy4b5a6982008-07-06 15:49:08 -07004483 if (err < 0)
Wang Chendad9b332008-06-18 01:48:28 -07004484 return err;
Patrick McHardy4417da62007-06-27 01:28:10 -07004485 if (dev->flags != old_flags)
4486 dev_set_rx_mode(dev);
Wang Chendad9b332008-06-18 01:48:28 -07004487 return err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004488}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07004489EXPORT_SYMBOL(dev_set_promiscuity);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004490
4491/**
4492 * dev_set_allmulti - update allmulti count on a device
4493 * @dev: device
4494 * @inc: modifier
4495 *
4496 * Add or remove reception of all multicast frames to a device. While the
4497 * count in the device remains above zero the interface remains listening
4498 * to all interfaces. Once it hits zero the device reverts back to normal
4499 * filtering operation. A negative @inc value is used to drop the counter
4500 * when releasing a resource needing all multicasts.
Wang Chendad9b332008-06-18 01:48:28 -07004501 * Return 0 if successful or a negative errno code on error.
Linus Torvalds1da177e2005-04-16 15:20:36 -07004502 */
4503
Wang Chendad9b332008-06-18 01:48:28 -07004504int dev_set_allmulti(struct net_device *dev, int inc)
Linus Torvalds1da177e2005-04-16 15:20:36 -07004505{
Eric Dumazetb536db92011-11-30 21:42:26 +00004506 unsigned int old_flags = dev->flags;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004507
Patrick McHardy24023452007-07-14 18:51:31 -07004508 ASSERT_RTNL();
4509
Linus Torvalds1da177e2005-04-16 15:20:36 -07004510 dev->flags |= IFF_ALLMULTI;
Wang Chendad9b332008-06-18 01:48:28 -07004511 dev->allmulti += inc;
4512 if (dev->allmulti == 0) {
4513 /*
4514 * Avoid overflow.
4515 * If inc causes overflow, untouch allmulti and return error.
4516 */
4517 if (inc < 0)
4518 dev->flags &= ~IFF_ALLMULTI;
4519 else {
4520 dev->allmulti -= inc;
Joe Perches7b6cd1c2012-02-01 10:54:43 +00004521 pr_warn("%s: allmulti touches roof, set allmulti failed. allmulti feature of device might be broken.\n",
4522 dev->name);
Wang Chendad9b332008-06-18 01:48:28 -07004523 return -EOVERFLOW;
4524 }
4525 }
Patrick McHardy24023452007-07-14 18:51:31 -07004526 if (dev->flags ^ old_flags) {
Patrick McHardyb6c40d62008-10-07 15:26:48 -07004527 dev_change_rx_flags(dev, IFF_ALLMULTI);
Patrick McHardy4417da62007-06-27 01:28:10 -07004528 dev_set_rx_mode(dev);
Patrick McHardy24023452007-07-14 18:51:31 -07004529 }
Wang Chendad9b332008-06-18 01:48:28 -07004530 return 0;
Patrick McHardy4417da62007-06-27 01:28:10 -07004531}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07004532EXPORT_SYMBOL(dev_set_allmulti);
Patrick McHardy4417da62007-06-27 01:28:10 -07004533
4534/*
4535 * Upload unicast and multicast address lists to device and
4536 * configure RX filtering. When the device doesn't support unicast
Joe Perches53ccaae2007-12-20 14:02:06 -08004537 * filtering it is put in promiscuous mode while unicast addresses
Patrick McHardy4417da62007-06-27 01:28:10 -07004538 * are present.
4539 */
4540void __dev_set_rx_mode(struct net_device *dev)
4541{
Stephen Hemmingerd3147742008-11-19 21:32:24 -08004542 const struct net_device_ops *ops = dev->netdev_ops;
4543
Patrick McHardy4417da62007-06-27 01:28:10 -07004544 /* dev_open will call this function so the list will stay sane. */
4545 if (!(dev->flags&IFF_UP))
4546 return;
4547
4548 if (!netif_device_present(dev))
YOSHIFUJI Hideaki40b77c92007-07-19 10:43:23 +09004549 return;
Patrick McHardy4417da62007-06-27 01:28:10 -07004550
Jiri Pirko01789342011-08-16 06:29:00 +00004551 if (!(dev->priv_flags & IFF_UNICAST_FLT)) {
Patrick McHardy4417da62007-06-27 01:28:10 -07004552 /* Unicast addresses changes may only happen under the rtnl,
4553 * therefore calling __dev_set_promiscuity here is safe.
4554 */
Jiri Pirko32e7bfc2010-01-25 13:36:10 -08004555 if (!netdev_uc_empty(dev) && !dev->uc_promisc) {
Patrick McHardy4417da62007-06-27 01:28:10 -07004556 __dev_set_promiscuity(dev, 1);
Joe Perches2d348d12011-07-25 16:17:35 -07004557 dev->uc_promisc = true;
Jiri Pirko32e7bfc2010-01-25 13:36:10 -08004558 } else if (netdev_uc_empty(dev) && dev->uc_promisc) {
Patrick McHardy4417da62007-06-27 01:28:10 -07004559 __dev_set_promiscuity(dev, -1);
Joe Perches2d348d12011-07-25 16:17:35 -07004560 dev->uc_promisc = false;
Patrick McHardy4417da62007-06-27 01:28:10 -07004561 }
Patrick McHardy4417da62007-06-27 01:28:10 -07004562 }
Jiri Pirko01789342011-08-16 06:29:00 +00004563
4564 if (ops->ndo_set_rx_mode)
4565 ops->ndo_set_rx_mode(dev);
Patrick McHardy4417da62007-06-27 01:28:10 -07004566}
4567
4568void dev_set_rx_mode(struct net_device *dev)
4569{
David S. Millerb9e40852008-07-15 00:15:08 -07004570 netif_addr_lock_bh(dev);
Patrick McHardy4417da62007-06-27 01:28:10 -07004571 __dev_set_rx_mode(dev);
David S. Millerb9e40852008-07-15 00:15:08 -07004572 netif_addr_unlock_bh(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004573}
4574
Stephen Hemmingerf0db2752008-09-30 02:23:58 -07004575/**
4576 * dev_get_flags - get flags reported to userspace
4577 * @dev: device
4578 *
4579 * Get the combination of flag bits exported through APIs to userspace.
4580 */
Eric Dumazet95c96172012-04-15 05:58:06 +00004581unsigned int dev_get_flags(const struct net_device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07004582{
Eric Dumazet95c96172012-04-15 05:58:06 +00004583 unsigned int flags;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004584
4585 flags = (dev->flags & ~(IFF_PROMISC |
4586 IFF_ALLMULTI |
Stefan Rompfb00055a2006-03-20 17:09:11 -08004587 IFF_RUNNING |
4588 IFF_LOWER_UP |
4589 IFF_DORMANT)) |
Linus Torvalds1da177e2005-04-16 15:20:36 -07004590 (dev->gflags & (IFF_PROMISC |
4591 IFF_ALLMULTI));
4592
Stefan Rompfb00055a2006-03-20 17:09:11 -08004593 if (netif_running(dev)) {
4594 if (netif_oper_up(dev))
4595 flags |= IFF_RUNNING;
4596 if (netif_carrier_ok(dev))
4597 flags |= IFF_LOWER_UP;
4598 if (netif_dormant(dev))
4599 flags |= IFF_DORMANT;
4600 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07004601
4602 return flags;
4603}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07004604EXPORT_SYMBOL(dev_get_flags);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004605
Patrick McHardybd380812010-02-26 06:34:53 +00004606int __dev_change_flags(struct net_device *dev, unsigned int flags)
Linus Torvalds1da177e2005-04-16 15:20:36 -07004607{
Eric Dumazetb536db92011-11-30 21:42:26 +00004608 unsigned int old_flags = dev->flags;
Patrick McHardybd380812010-02-26 06:34:53 +00004609 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004610
Patrick McHardy24023452007-07-14 18:51:31 -07004611 ASSERT_RTNL();
4612
Linus Torvalds1da177e2005-04-16 15:20:36 -07004613 /*
4614 * Set the flags on our device.
4615 */
4616
4617 dev->flags = (flags & (IFF_DEBUG | IFF_NOTRAILERS | IFF_NOARP |
4618 IFF_DYNAMIC | IFF_MULTICAST | IFF_PORTSEL |
4619 IFF_AUTOMEDIA)) |
4620 (dev->flags & (IFF_UP | IFF_VOLATILE | IFF_PROMISC |
4621 IFF_ALLMULTI));
4622
4623 /*
4624 * Load in the correct multicast list now the flags have changed.
4625 */
4626
Patrick McHardyb6c40d62008-10-07 15:26:48 -07004627 if ((old_flags ^ flags) & IFF_MULTICAST)
4628 dev_change_rx_flags(dev, IFF_MULTICAST);
Patrick McHardy24023452007-07-14 18:51:31 -07004629
Patrick McHardy4417da62007-06-27 01:28:10 -07004630 dev_set_rx_mode(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004631
4632 /*
4633 * Have we downed the interface. We handle IFF_UP ourselves
4634 * according to user attempts to set it, rather than blindly
4635 * setting it.
4636 */
4637
4638 ret = 0;
4639 if ((old_flags ^ flags) & IFF_UP) { /* Bit is different ? */
Patrick McHardybd380812010-02-26 06:34:53 +00004640 ret = ((old_flags & IFF_UP) ? __dev_close : __dev_open)(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004641
4642 if (!ret)
Patrick McHardy4417da62007-06-27 01:28:10 -07004643 dev_set_rx_mode(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004644 }
4645
Linus Torvalds1da177e2005-04-16 15:20:36 -07004646 if ((flags ^ dev->gflags) & IFF_PROMISC) {
Eric Dumazetd1b19df2009-09-03 01:29:39 -07004647 int inc = (flags & IFF_PROMISC) ? 1 : -1;
4648
Linus Torvalds1da177e2005-04-16 15:20:36 -07004649 dev->gflags ^= IFF_PROMISC;
4650 dev_set_promiscuity(dev, inc);
4651 }
4652
4653 /* NOTE: order of synchronization of IFF_PROMISC and IFF_ALLMULTI
4654 is important. Some (broken) drivers set IFF_PROMISC, when
4655 IFF_ALLMULTI is requested not asking us and not reporting.
4656 */
4657 if ((flags ^ dev->gflags) & IFF_ALLMULTI) {
Eric Dumazetd1b19df2009-09-03 01:29:39 -07004658 int inc = (flags & IFF_ALLMULTI) ? 1 : -1;
4659
Linus Torvalds1da177e2005-04-16 15:20:36 -07004660 dev->gflags ^= IFF_ALLMULTI;
4661 dev_set_allmulti(dev, inc);
4662 }
4663
Patrick McHardybd380812010-02-26 06:34:53 +00004664 return ret;
4665}
4666
4667void __dev_notify_flags(struct net_device *dev, unsigned int old_flags)
4668{
4669 unsigned int changes = dev->flags ^ old_flags;
4670
4671 if (changes & IFF_UP) {
4672 if (dev->flags & IFF_UP)
4673 call_netdevice_notifiers(NETDEV_UP, dev);
4674 else
4675 call_netdevice_notifiers(NETDEV_DOWN, dev);
4676 }
4677
4678 if (dev->flags & IFF_UP &&
4679 (changes & ~(IFF_UP | IFF_PROMISC | IFF_ALLMULTI | IFF_VOLATILE)))
4680 call_netdevice_notifiers(NETDEV_CHANGE, dev);
4681}
4682
4683/**
4684 * dev_change_flags - change device settings
4685 * @dev: device
4686 * @flags: device state flags
4687 *
4688 * Change settings on device based state flags. The flags are
4689 * in the userspace exported format.
4690 */
Eric Dumazetb536db92011-11-30 21:42:26 +00004691int dev_change_flags(struct net_device *dev, unsigned int flags)
Patrick McHardybd380812010-02-26 06:34:53 +00004692{
Eric Dumazetb536db92011-11-30 21:42:26 +00004693 int ret;
4694 unsigned int changes, old_flags = dev->flags;
Patrick McHardybd380812010-02-26 06:34:53 +00004695
4696 ret = __dev_change_flags(dev, flags);
4697 if (ret < 0)
4698 return ret;
4699
4700 changes = old_flags ^ dev->flags;
Thomas Graf7c355f52007-06-05 16:03:03 -07004701 if (changes)
4702 rtmsg_ifinfo(RTM_NEWLINK, dev, changes);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004703
Patrick McHardybd380812010-02-26 06:34:53 +00004704 __dev_notify_flags(dev, old_flags);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004705 return ret;
4706}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07004707EXPORT_SYMBOL(dev_change_flags);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004708
Stephen Hemmingerf0db2752008-09-30 02:23:58 -07004709/**
4710 * dev_set_mtu - Change maximum transfer unit
4711 * @dev: device
4712 * @new_mtu: new transfer unit
4713 *
4714 * Change the maximum transfer size of the network device.
4715 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07004716int dev_set_mtu(struct net_device *dev, int new_mtu)
4717{
Stephen Hemmingerd3147742008-11-19 21:32:24 -08004718 const struct net_device_ops *ops = dev->netdev_ops;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004719 int err;
4720
4721 if (new_mtu == dev->mtu)
4722 return 0;
4723
4724 /* MTU must be positive. */
4725 if (new_mtu < 0)
4726 return -EINVAL;
4727
4728 if (!netif_device_present(dev))
4729 return -ENODEV;
4730
4731 err = 0;
Stephen Hemmingerd3147742008-11-19 21:32:24 -08004732 if (ops->ndo_change_mtu)
4733 err = ops->ndo_change_mtu(dev, new_mtu);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004734 else
4735 dev->mtu = new_mtu;
Stephen Hemmingerd3147742008-11-19 21:32:24 -08004736
Jiri Pirkoe3d8fab2012-12-03 01:16:32 +00004737 if (!err)
Pavel Emelyanov056925a2007-09-16 15:42:43 -07004738 call_netdevice_notifiers(NETDEV_CHANGEMTU, dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004739 return err;
4740}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07004741EXPORT_SYMBOL(dev_set_mtu);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004742
Stephen Hemmingerf0db2752008-09-30 02:23:58 -07004743/**
Vlad Dogarucbda10f2011-01-13 23:38:30 +00004744 * dev_set_group - Change group this device belongs to
4745 * @dev: device
4746 * @new_group: group this device should belong to
4747 */
4748void dev_set_group(struct net_device *dev, int new_group)
4749{
4750 dev->group = new_group;
4751}
4752EXPORT_SYMBOL(dev_set_group);
4753
4754/**
Stephen Hemmingerf0db2752008-09-30 02:23:58 -07004755 * dev_set_mac_address - Change Media Access Control Address
4756 * @dev: device
4757 * @sa: new address
4758 *
4759 * Change the hardware (MAC) address of the device
4760 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07004761int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa)
4762{
Stephen Hemmingerd3147742008-11-19 21:32:24 -08004763 const struct net_device_ops *ops = dev->netdev_ops;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004764 int err;
4765
Stephen Hemmingerd3147742008-11-19 21:32:24 -08004766 if (!ops->ndo_set_mac_address)
Linus Torvalds1da177e2005-04-16 15:20:36 -07004767 return -EOPNOTSUPP;
4768 if (sa->sa_family != dev->type)
4769 return -EINVAL;
4770 if (!netif_device_present(dev))
4771 return -ENODEV;
Stephen Hemmingerd3147742008-11-19 21:32:24 -08004772 err = ops->ndo_set_mac_address(dev, sa);
Jiri Pirkof6521512013-01-01 03:30:14 +00004773 if (err)
4774 return err;
Jiri Pirkofbdeca22013-01-01 03:30:16 +00004775 dev->addr_assign_type = NET_ADDR_SET;
Jiri Pirkof6521512013-01-01 03:30:14 +00004776 call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
Theodore Ts'o7bf23572012-07-04 21:23:25 -04004777 add_device_randomness(dev->dev_addr, dev->addr_len);
Jiri Pirkof6521512013-01-01 03:30:14 +00004778 return 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004779}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07004780EXPORT_SYMBOL(dev_set_mac_address);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004781
Jiri Pirko4bf84c32012-12-27 23:49:37 +00004782/**
4783 * dev_change_carrier - Change device carrier
4784 * @dev: device
4785 * @new_carries: new value
4786 *
4787 * Change device carrier
4788 */
4789int dev_change_carrier(struct net_device *dev, bool new_carrier)
4790{
4791 const struct net_device_ops *ops = dev->netdev_ops;
4792
4793 if (!ops->ndo_change_carrier)
4794 return -EOPNOTSUPP;
4795 if (!netif_device_present(dev))
4796 return -ENODEV;
4797 return ops->ndo_change_carrier(dev, new_carrier);
4798}
4799EXPORT_SYMBOL(dev_change_carrier);
4800
Linus Torvalds1da177e2005-04-16 15:20:36 -07004801/**
4802 * dev_new_index - allocate an ifindex
Randy Dunlapc4ea43c2007-10-12 21:17:49 -07004803 * @net: the applicable net namespace
Linus Torvalds1da177e2005-04-16 15:20:36 -07004804 *
4805 * Returns a suitable unique value for a new device interface
4806 * number. The caller must hold the rtnl semaphore or the
4807 * dev_base_lock to be sure it remains unique.
4808 */
Eric W. Biederman881d9662007-09-17 11:56:21 -07004809static int dev_new_index(struct net *net)
Linus Torvalds1da177e2005-04-16 15:20:36 -07004810{
Pavel Emelyanovaa79e662012-08-08 21:53:19 +00004811 int ifindex = net->ifindex;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004812 for (;;) {
4813 if (++ifindex <= 0)
4814 ifindex = 1;
Eric W. Biederman881d9662007-09-17 11:56:21 -07004815 if (!__dev_get_by_index(net, ifindex))
Pavel Emelyanovaa79e662012-08-08 21:53:19 +00004816 return net->ifindex = ifindex;
Linus Torvalds1da177e2005-04-16 15:20:36 -07004817 }
4818}
4819
Linus Torvalds1da177e2005-04-16 15:20:36 -07004820/* Delayed registration/unregisteration */
Denis Cheng3b5b34f2007-12-07 00:49:17 -08004821static LIST_HEAD(net_todo_list);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004822
Stephen Hemminger6f05f622007-03-08 20:46:03 -08004823static void net_set_todo(struct net_device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07004824{
Linus Torvalds1da177e2005-04-16 15:20:36 -07004825 list_add_tail(&dev->todo_list, &net_todo_list);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004826}
4827
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004828static void rollback_registered_many(struct list_head *head)
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004829{
Krishna Kumare93737b2009-12-08 22:26:02 +00004830 struct net_device *dev, *tmp;
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004831
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004832 BUG_ON(dev_boot_phase);
4833 ASSERT_RTNL();
4834
Krishna Kumare93737b2009-12-08 22:26:02 +00004835 list_for_each_entry_safe(dev, tmp, head, unreg_list) {
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004836 /* Some devices call without registering
Krishna Kumare93737b2009-12-08 22:26:02 +00004837 * for initialization unwind. Remove those
4838 * devices and proceed with the remaining.
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004839 */
4840 if (dev->reg_state == NETREG_UNINITIALIZED) {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00004841 pr_debug("unregister_netdevice: device %s/%p never was registered\n",
4842 dev->name, dev);
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004843
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004844 WARN_ON(1);
Krishna Kumare93737b2009-12-08 22:26:02 +00004845 list_del(&dev->unreg_list);
4846 continue;
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004847 }
Eric Dumazet449f4542011-05-19 12:24:16 +00004848 dev->dismantle = true;
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004849 BUG_ON(dev->reg_state != NETREG_REGISTERED);
Octavian Purdila44345722010-12-13 12:44:07 +00004850 }
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004851
Octavian Purdila44345722010-12-13 12:44:07 +00004852 /* If device is running, close it first. */
4853 dev_close_many(head);
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004854
Octavian Purdila44345722010-12-13 12:44:07 +00004855 list_for_each_entry(dev, head, unreg_list) {
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004856 /* And unlink it from device chain. */
4857 unlist_netdevice(dev);
4858
4859 dev->reg_state = NETREG_UNREGISTERING;
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004860 }
4861
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004862 synchronize_net();
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004863
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004864 list_for_each_entry(dev, head, unreg_list) {
4865 /* Shutdown queueing discipline. */
4866 dev_shutdown(dev);
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004867
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004868
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004869 /* Notify protocols, that we are about to destroy
4870 this device. They should clean all the things.
4871 */
4872 call_netdevice_notifiers(NETDEV_UNREGISTER, dev);
4873
Patrick McHardya2835762010-02-26 06:34:51 +00004874 if (!dev->rtnl_link_ops ||
4875 dev->rtnl_link_state == RTNL_LINK_INITIALIZED)
4876 rtmsg_ifinfo(RTM_DELLINK, dev, ~0U);
4877
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004878 /*
4879 * Flush the unicast and multicast chains
4880 */
Jiri Pirkoa748ee22010-04-01 21:22:09 +00004881 dev_uc_flush(dev);
Jiri Pirko22bedad32010-04-01 21:22:57 +00004882 dev_mc_flush(dev);
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004883
4884 if (dev->netdev_ops->ndo_uninit)
4885 dev->netdev_ops->ndo_uninit(dev);
4886
Jiri Pirko9ff162a2013-01-03 22:48:49 +00004887 /* Notifier chain MUST detach us all upper devices. */
4888 WARN_ON(netdev_has_any_upper_dev(dev));
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004889
4890 /* Remove entries from kobject tree */
4891 netdev_unregister_kobject(dev);
Alexander Duyck024e9672013-01-10 08:57:46 +00004892#ifdef CONFIG_XPS
4893 /* Remove XPS queueing entries */
4894 netif_reset_xps_queues_gt(dev, 0);
4895#endif
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004896 }
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004897
Eric W. Biederman850a5452011-10-13 22:25:23 +00004898 synchronize_net();
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004899
Eric W. Biedermana5ee1552009-11-29 15:45:58 +00004900 list_for_each_entry(dev, head, unreg_list)
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004901 dev_put(dev);
4902}
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004903
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004904static void rollback_registered(struct net_device *dev)
4905{
4906 LIST_HEAD(single);
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004907
Eric Dumazet9b5e3832009-10-27 07:04:19 +00004908 list_add(&dev->unreg_list, &single);
4909 rollback_registered_many(&single);
Eric Dumazetceaaec92011-02-17 22:59:19 +00004910 list_del(&single);
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07004911}
4912
Michał Mirosławc8f44af2011-11-15 15:29:55 +00004913static netdev_features_t netdev_fix_features(struct net_device *dev,
4914 netdev_features_t features)
Herbert Xub63365a2008-10-23 01:11:29 -07004915{
Michał Mirosław57422dc2011-01-22 12:14:12 +00004916 /* Fix illegal checksum combinations */
4917 if ((features & NETIF_F_HW_CSUM) &&
4918 (features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
Michał Mirosław6f404e42011-05-16 15:14:21 -04004919 netdev_warn(dev, "mixed HW and IP checksum settings.\n");
Michał Mirosław57422dc2011-01-22 12:14:12 +00004920 features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
4921 }
4922
Herbert Xub63365a2008-10-23 01:11:29 -07004923 /* Fix illegal SG+CSUM combinations. */
4924 if ((features & NETIF_F_SG) &&
4925 !(features & NETIF_F_ALL_CSUM)) {
Michał Mirosław6f404e42011-05-16 15:14:21 -04004926 netdev_dbg(dev,
4927 "Dropping NETIF_F_SG since no checksum feature.\n");
Herbert Xub63365a2008-10-23 01:11:29 -07004928 features &= ~NETIF_F_SG;
4929 }
4930
4931 /* TSO requires that SG is present as well. */
Ben Hutchingsea2d3682011-04-12 14:38:37 +00004932 if ((features & NETIF_F_ALL_TSO) && !(features & NETIF_F_SG)) {
Michał Mirosław6f404e42011-05-16 15:14:21 -04004933 netdev_dbg(dev, "Dropping TSO features since no SG feature.\n");
Ben Hutchingsea2d3682011-04-12 14:38:37 +00004934 features &= ~NETIF_F_ALL_TSO;
Herbert Xub63365a2008-10-23 01:11:29 -07004935 }
4936
Ben Hutchings31d8b9e2011-04-12 14:47:15 +00004937 /* TSO ECN requires that TSO is present as well. */
4938 if ((features & NETIF_F_ALL_TSO) == NETIF_F_TSO_ECN)
4939 features &= ~NETIF_F_TSO_ECN;
4940
Michał Mirosław212b5732011-02-15 16:59:16 +00004941 /* Software GSO depends on SG. */
4942 if ((features & NETIF_F_GSO) && !(features & NETIF_F_SG)) {
Michał Mirosław6f404e42011-05-16 15:14:21 -04004943 netdev_dbg(dev, "Dropping NETIF_F_GSO since no SG feature.\n");
Michał Mirosław212b5732011-02-15 16:59:16 +00004944 features &= ~NETIF_F_GSO;
4945 }
4946
Michał Mirosławacd11302011-01-24 15:45:15 -08004947 /* UFO needs SG and checksumming */
Herbert Xub63365a2008-10-23 01:11:29 -07004948 if (features & NETIF_F_UFO) {
Michał Mirosław79032642010-11-30 06:38:00 +00004949 /* maybe split UFO into V4 and V6? */
4950 if (!((features & NETIF_F_GEN_CSUM) ||
4951 (features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))
4952 == (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
Michał Mirosław6f404e42011-05-16 15:14:21 -04004953 netdev_dbg(dev,
Michał Mirosławacd11302011-01-24 15:45:15 -08004954 "Dropping NETIF_F_UFO since no checksum offload features.\n");
Herbert Xub63365a2008-10-23 01:11:29 -07004955 features &= ~NETIF_F_UFO;
4956 }
4957
4958 if (!(features & NETIF_F_SG)) {
Michał Mirosław6f404e42011-05-16 15:14:21 -04004959 netdev_dbg(dev,
Michał Mirosławacd11302011-01-24 15:45:15 -08004960 "Dropping NETIF_F_UFO since no NETIF_F_SG feature.\n");
Herbert Xub63365a2008-10-23 01:11:29 -07004961 features &= ~NETIF_F_UFO;
4962 }
4963 }
4964
4965 return features;
4966}
Herbert Xub63365a2008-10-23 01:11:29 -07004967
Michał Mirosław6cb6a272011-04-02 22:48:47 -07004968int __netdev_update_features(struct net_device *dev)
Michał Mirosław5455c692011-02-15 16:59:17 +00004969{
Michał Mirosławc8f44af2011-11-15 15:29:55 +00004970 netdev_features_t features;
Michał Mirosław5455c692011-02-15 16:59:17 +00004971 int err = 0;
4972
Michał Mirosław87267482011-04-12 09:56:38 +00004973 ASSERT_RTNL();
4974
Michał Mirosław5455c692011-02-15 16:59:17 +00004975 features = netdev_get_wanted_features(dev);
4976
4977 if (dev->netdev_ops->ndo_fix_features)
4978 features = dev->netdev_ops->ndo_fix_features(dev, features);
4979
4980 /* driver might be less strict about feature dependencies */
4981 features = netdev_fix_features(dev, features);
4982
4983 if (dev->features == features)
Michał Mirosław6cb6a272011-04-02 22:48:47 -07004984 return 0;
Michał Mirosław5455c692011-02-15 16:59:17 +00004985
Michał Mirosławc8f44af2011-11-15 15:29:55 +00004986 netdev_dbg(dev, "Features changed: %pNF -> %pNF\n",
4987 &dev->features, &features);
Michał Mirosław5455c692011-02-15 16:59:17 +00004988
4989 if (dev->netdev_ops->ndo_set_features)
4990 err = dev->netdev_ops->ndo_set_features(dev, features);
4991
Michał Mirosław6cb6a272011-04-02 22:48:47 -07004992 if (unlikely(err < 0)) {
Michał Mirosław5455c692011-02-15 16:59:17 +00004993 netdev_err(dev,
Michał Mirosławc8f44af2011-11-15 15:29:55 +00004994 "set_features() failed (%d); wanted %pNF, left %pNF\n",
4995 err, &features, &dev->features);
Michał Mirosław6cb6a272011-04-02 22:48:47 -07004996 return -1;
4997 }
4998
4999 if (!err)
5000 dev->features = features;
5001
5002 return 1;
5003}
5004
Michał Mirosławafe12cc2011-05-07 03:22:17 +00005005/**
5006 * netdev_update_features - recalculate device features
5007 * @dev: the device to check
5008 *
5009 * Recalculate dev->features set and send notifications if it
5010 * has changed. Should be called after driver or hardware dependent
5011 * conditions might have changed that influence the features.
5012 */
Michał Mirosław6cb6a272011-04-02 22:48:47 -07005013void netdev_update_features(struct net_device *dev)
5014{
5015 if (__netdev_update_features(dev))
5016 netdev_features_change(dev);
Michał Mirosław5455c692011-02-15 16:59:17 +00005017}
5018EXPORT_SYMBOL(netdev_update_features);
5019
Linus Torvalds1da177e2005-04-16 15:20:36 -07005020/**
Michał Mirosławafe12cc2011-05-07 03:22:17 +00005021 * netdev_change_features - recalculate device features
5022 * @dev: the device to check
5023 *
5024 * Recalculate dev->features set and send notifications even
5025 * if they have not changed. Should be called instead of
5026 * netdev_update_features() if also dev->vlan_features might
5027 * have changed to allow the changes to be propagated to stacked
5028 * VLAN devices.
5029 */
5030void netdev_change_features(struct net_device *dev)
5031{
5032 __netdev_update_features(dev);
5033 netdev_features_change(dev);
5034}
5035EXPORT_SYMBOL(netdev_change_features);
5036
5037/**
Patrick Mullaneyfc4a7482009-12-03 15:59:22 -08005038 * netif_stacked_transfer_operstate - transfer operstate
5039 * @rootdev: the root or lower level device to transfer state from
5040 * @dev: the device to transfer operstate to
5041 *
5042 * Transfer operational state from root to device. This is normally
5043 * called when a stacking relationship exists between the root
5044 * device and the device(a leaf device).
5045 */
5046void netif_stacked_transfer_operstate(const struct net_device *rootdev,
5047 struct net_device *dev)
5048{
5049 if (rootdev->operstate == IF_OPER_DORMANT)
5050 netif_dormant_on(dev);
5051 else
5052 netif_dormant_off(dev);
5053
5054 if (netif_carrier_ok(rootdev)) {
5055 if (!netif_carrier_ok(dev))
5056 netif_carrier_on(dev);
5057 } else {
5058 if (netif_carrier_ok(dev))
5059 netif_carrier_off(dev);
5060 }
5061}
5062EXPORT_SYMBOL(netif_stacked_transfer_operstate);
5063
Tom Herbertbf264142010-11-26 08:36:09 +00005064#ifdef CONFIG_RPS
Eric Dumazet1b4bf462010-09-23 17:26:35 +00005065static int netif_alloc_rx_queues(struct net_device *dev)
5066{
Eric Dumazet1b4bf462010-09-23 17:26:35 +00005067 unsigned int i, count = dev->num_rx_queues;
Tom Herbertbd25fa72010-10-18 18:00:16 +00005068 struct netdev_rx_queue *rx;
Eric Dumazet1b4bf462010-09-23 17:26:35 +00005069
Tom Herbertbd25fa72010-10-18 18:00:16 +00005070 BUG_ON(count < 1);
Eric Dumazet1b4bf462010-09-23 17:26:35 +00005071
Tom Herbertbd25fa72010-10-18 18:00:16 +00005072 rx = kcalloc(count, sizeof(struct netdev_rx_queue), GFP_KERNEL);
Joe Perches62b59422013-02-04 16:48:16 +00005073 if (!rx)
Tom Herbertbd25fa72010-10-18 18:00:16 +00005074 return -ENOMEM;
Joe Perches62b59422013-02-04 16:48:16 +00005075
Tom Herbertbd25fa72010-10-18 18:00:16 +00005076 dev->_rx = rx;
5077
Tom Herbertbd25fa72010-10-18 18:00:16 +00005078 for (i = 0; i < count; i++)
Tom Herbertfe822242010-11-09 10:47:38 +00005079 rx[i].dev = dev;
Eric Dumazet1b4bf462010-09-23 17:26:35 +00005080 return 0;
5081}
Tom Herbertbf264142010-11-26 08:36:09 +00005082#endif
Eric Dumazet1b4bf462010-09-23 17:26:35 +00005083
Changli Gaoaa942102010-12-04 02:31:41 +00005084static void netdev_init_one_queue(struct net_device *dev,
5085 struct netdev_queue *queue, void *_unused)
5086{
5087 /* Initialize queue lock */
5088 spin_lock_init(&queue->_xmit_lock);
5089 netdev_set_xmit_lockdep_class(&queue->_xmit_lock, dev->type);
5090 queue->xmit_lock_owner = -1;
Changli Gaob236da62010-12-14 03:09:15 +00005091 netdev_queue_numa_node_write(queue, NUMA_NO_NODE);
Changli Gaoaa942102010-12-04 02:31:41 +00005092 queue->dev = dev;
Tom Herbert114cf582011-11-28 16:33:09 +00005093#ifdef CONFIG_BQL
5094 dql_init(&queue->dql, HZ);
5095#endif
Changli Gaoaa942102010-12-04 02:31:41 +00005096}
5097
Tom Herberte6484932010-10-18 18:04:39 +00005098static int netif_alloc_netdev_queues(struct net_device *dev)
5099{
5100 unsigned int count = dev->num_tx_queues;
5101 struct netdev_queue *tx;
5102
5103 BUG_ON(count < 1);
5104
5105 tx = kcalloc(count, sizeof(struct netdev_queue), GFP_KERNEL);
Joe Perches62b59422013-02-04 16:48:16 +00005106 if (!tx)
Tom Herberte6484932010-10-18 18:04:39 +00005107 return -ENOMEM;
Joe Perches62b59422013-02-04 16:48:16 +00005108
Tom Herberte6484932010-10-18 18:04:39 +00005109 dev->_tx = tx;
Tom Herbert1d24eb42010-11-21 13:17:27 +00005110
Tom Herberte6484932010-10-18 18:04:39 +00005111 netdev_for_each_tx_queue(dev, netdev_init_one_queue, NULL);
5112 spin_lock_init(&dev->tx_global_lock);
Changli Gaoaa942102010-12-04 02:31:41 +00005113
5114 return 0;
Tom Herberte6484932010-10-18 18:04:39 +00005115}
5116
Patrick Mullaneyfc4a7482009-12-03 15:59:22 -08005117/**
Linus Torvalds1da177e2005-04-16 15:20:36 -07005118 * register_netdevice - register a network device
5119 * @dev: device to register
5120 *
5121 * Take a completed network device structure and add it to the kernel
5122 * interfaces. A %NETDEV_REGISTER message is sent to the netdev notifier
5123 * chain. 0 is returned on success. A negative errno code is returned
5124 * on a failure to set up the device, or if the name is a duplicate.
5125 *
5126 * Callers must hold the rtnl semaphore. You may want
5127 * register_netdev() instead of this.
5128 *
5129 * BUGS:
5130 * The locking appears insufficient to guarantee two parallel registers
5131 * will not get the same name.
5132 */
5133
5134int register_netdevice(struct net_device *dev)
5135{
Linus Torvalds1da177e2005-04-16 15:20:36 -07005136 int ret;
Stephen Hemmingerd3147742008-11-19 21:32:24 -08005137 struct net *net = dev_net(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005138
5139 BUG_ON(dev_boot_phase);
5140 ASSERT_RTNL();
5141
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005142 might_sleep();
5143
Linus Torvalds1da177e2005-04-16 15:20:36 -07005144 /* When net_device's are persistent, this will be fatal. */
5145 BUG_ON(dev->reg_state != NETREG_UNINITIALIZED);
Stephen Hemmingerd3147742008-11-19 21:32:24 -08005146 BUG_ON(!net);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005147
David S. Millerf1f28aa2008-07-15 00:08:33 -07005148 spin_lock_init(&dev->addr_list_lock);
David S. Millercf508b12008-07-22 14:16:42 -07005149 netdev_set_addr_lockdep_class(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005150
Linus Torvalds1da177e2005-04-16 15:20:36 -07005151 dev->iflink = -1;
5152
Gao feng828de4f2012-09-13 20:58:27 +00005153 ret = dev_get_valid_name(net, dev, dev->name);
Peter Pan(潘卫平)0696c3a2011-05-12 15:46:56 +00005154 if (ret < 0)
5155 goto out;
5156
Linus Torvalds1da177e2005-04-16 15:20:36 -07005157 /* Init, if this function is available */
Stephen Hemmingerd3147742008-11-19 21:32:24 -08005158 if (dev->netdev_ops->ndo_init) {
5159 ret = dev->netdev_ops->ndo_init(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005160 if (ret) {
5161 if (ret > 0)
5162 ret = -EIO;
Adrian Bunk90833aa2006-11-13 16:02:22 -08005163 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005164 }
5165 }
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09005166
Michał Mirosławd2ed2732013-01-29 15:14:16 +00005167 if (((dev->hw_features | dev->features) & NETIF_F_HW_VLAN_FILTER) &&
5168 (!dev->netdev_ops->ndo_vlan_rx_add_vid ||
5169 !dev->netdev_ops->ndo_vlan_rx_kill_vid)) {
5170 netdev_WARN(dev, "Buggy VLAN acceleration in driver!\n");
5171 ret = -EINVAL;
5172 goto err_uninit;
5173 }
5174
Pavel Emelyanov9c7dafb2012-08-08 21:52:46 +00005175 ret = -EBUSY;
5176 if (!dev->ifindex)
5177 dev->ifindex = dev_new_index(net);
5178 else if (__dev_get_by_index(net, dev->ifindex))
5179 goto err_uninit;
5180
Linus Torvalds1da177e2005-04-16 15:20:36 -07005181 if (dev->iflink == -1)
5182 dev->iflink = dev->ifindex;
5183
Michał Mirosław5455c692011-02-15 16:59:17 +00005184 /* Transfer changeable features to wanted_features and enable
5185 * software offloads (GSO and GRO).
5186 */
5187 dev->hw_features |= NETIF_F_SOFT_FEATURES;
Michał Mirosław14d12322011-02-22 16:52:28 +00005188 dev->features |= NETIF_F_SOFT_FEATURES;
5189 dev->wanted_features = dev->features & dev->hw_features;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005190
Tom Herbertc6e1a0d2011-04-04 22:30:30 -07005191 /* Turn on no cache copy if HW is doing checksum */
Michał Mirosław34324dc2011-11-15 15:29:55 +00005192 if (!(dev->flags & IFF_LOOPBACK)) {
5193 dev->hw_features |= NETIF_F_NOCACHE_COPY;
5194 if (dev->features & NETIF_F_ALL_CSUM) {
5195 dev->wanted_features |= NETIF_F_NOCACHE_COPY;
5196 dev->features |= NETIF_F_NOCACHE_COPY;
5197 }
Tom Herbertc6e1a0d2011-04-04 22:30:30 -07005198 }
5199
Michał Mirosław1180e7d2011-07-14 14:41:11 -07005200 /* Make NETIF_F_HIGHDMA inheritable to VLAN devices.
Brandon Philips16c3ea72010-09-15 09:24:24 +00005201 */
Michał Mirosław1180e7d2011-07-14 14:41:11 -07005202 dev->vlan_features |= NETIF_F_HIGHDMA;
Brandon Philips16c3ea72010-09-15 09:24:24 +00005203
Johannes Berg7ffbe3f2009-10-02 05:15:27 +00005204 ret = call_netdevice_notifiers(NETDEV_POST_INIT, dev);
5205 ret = notifier_to_errno(ret);
5206 if (ret)
5207 goto err_uninit;
5208
Eric W. Biederman8b41d182007-09-26 22:02:53 -07005209 ret = netdev_register_kobject(dev);
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005210 if (ret)
Herbert Xu7ce1b0e2007-07-30 16:29:40 -07005211 goto err_uninit;
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005212 dev->reg_state = NETREG_REGISTERED;
5213
Michał Mirosław6cb6a272011-04-02 22:48:47 -07005214 __netdev_update_features(dev);
Michał Mirosław8e9b59b2011-02-22 16:52:28 +00005215
Linus Torvalds1da177e2005-04-16 15:20:36 -07005216 /*
5217 * Default initial state at registry is that the
5218 * device is present.
5219 */
5220
5221 set_bit(__LINK_STATE_PRESENT, &dev->state);
5222
Ben Hutchings8f4cccb2012-08-20 22:16:51 +01005223 linkwatch_init_dev(dev);
5224
Linus Torvalds1da177e2005-04-16 15:20:36 -07005225 dev_init_scheduler(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005226 dev_hold(dev);
Eric W. Biedermance286d32007-09-12 13:53:49 +02005227 list_netdevice(dev);
Theodore Ts'o7bf23572012-07-04 21:23:25 -04005228 add_device_randomness(dev->dev_addr, dev->addr_len);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005229
Jiri Pirko948b3372013-01-08 01:38:25 +00005230 /* If the device has permanent device address, driver should
5231 * set dev_addr and also addr_assign_type should be set to
5232 * NET_ADDR_PERM (default value).
5233 */
5234 if (dev->addr_assign_type == NET_ADDR_PERM)
5235 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
5236
Linus Torvalds1da177e2005-04-16 15:20:36 -07005237 /* Notify protocols, that a new device appeared. */
Pavel Emelyanov056925a2007-09-16 15:42:43 -07005238 ret = call_netdevice_notifiers(NETDEV_REGISTER, dev);
Herbert Xufcc5a032007-07-30 17:03:38 -07005239 ret = notifier_to_errno(ret);
Daniel Lezcano93ee31f2007-10-30 15:38:18 -07005240 if (ret) {
5241 rollback_registered(dev);
5242 dev->reg_state = NETREG_UNREGISTERED;
5243 }
Eric W. Biedermand90a9092009-12-12 22:11:15 +00005244 /*
5245 * Prevent userspace races by waiting until the network
5246 * device is fully setup before sending notifications.
5247 */
Patrick McHardya2835762010-02-26 06:34:51 +00005248 if (!dev->rtnl_link_ops ||
5249 dev->rtnl_link_state == RTNL_LINK_INITIALIZED)
5250 rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005251
5252out:
5253 return ret;
Herbert Xu7ce1b0e2007-07-30 16:29:40 -07005254
5255err_uninit:
Stephen Hemmingerd3147742008-11-19 21:32:24 -08005256 if (dev->netdev_ops->ndo_uninit)
5257 dev->netdev_ops->ndo_uninit(dev);
Herbert Xu7ce1b0e2007-07-30 16:29:40 -07005258 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005259}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07005260EXPORT_SYMBOL(register_netdevice);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005261
5262/**
Benjamin Herrenschmidt937f1ba2009-01-14 21:05:05 -08005263 * init_dummy_netdev - init a dummy network device for NAPI
5264 * @dev: device to init
5265 *
5266 * This takes a network device structure and initialize the minimum
5267 * amount of fields so it can be used to schedule NAPI polls without
5268 * registering a full blown interface. This is to be used by drivers
5269 * that need to tie several hardware interfaces to a single NAPI
5270 * poll scheduler due to HW limitations.
5271 */
5272int init_dummy_netdev(struct net_device *dev)
5273{
5274 /* Clear everything. Note we don't initialize spinlocks
5275 * are they aren't supposed to be taken by any of the
5276 * NAPI code and this dummy netdev is supposed to be
5277 * only ever used for NAPI polls
5278 */
5279 memset(dev, 0, sizeof(struct net_device));
5280
5281 /* make sure we BUG if trying to hit standard
5282 * register/unregister code path
5283 */
5284 dev->reg_state = NETREG_DUMMY;
5285
Benjamin Herrenschmidt937f1ba2009-01-14 21:05:05 -08005286 /* NAPI wants this */
5287 INIT_LIST_HEAD(&dev->napi_list);
5288
5289 /* a dummy interface is started by default */
5290 set_bit(__LINK_STATE_PRESENT, &dev->state);
5291 set_bit(__LINK_STATE_START, &dev->state);
5292
Eric Dumazet29b44332010-10-11 10:22:12 +00005293 /* Note : We dont allocate pcpu_refcnt for dummy devices,
5294 * because users of this 'device' dont need to change
5295 * its refcount.
5296 */
5297
Benjamin Herrenschmidt937f1ba2009-01-14 21:05:05 -08005298 return 0;
5299}
5300EXPORT_SYMBOL_GPL(init_dummy_netdev);
5301
5302
5303/**
Linus Torvalds1da177e2005-04-16 15:20:36 -07005304 * register_netdev - register a network device
5305 * @dev: device to register
5306 *
5307 * Take a completed network device structure and add it to the kernel
5308 * interfaces. A %NETDEV_REGISTER message is sent to the netdev notifier
5309 * chain. 0 is returned on success. A negative errno code is returned
5310 * on a failure to set up the device, or if the name is a duplicate.
5311 *
Borislav Petkov38b4da32007-04-20 22:14:10 -07005312 * This is a wrapper around register_netdevice that takes the rtnl semaphore
Linus Torvalds1da177e2005-04-16 15:20:36 -07005313 * and expands the device name if you passed a format string to
5314 * alloc_netdev.
5315 */
5316int register_netdev(struct net_device *dev)
5317{
5318 int err;
5319
5320 rtnl_lock();
Linus Torvalds1da177e2005-04-16 15:20:36 -07005321 err = register_netdevice(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005322 rtnl_unlock();
5323 return err;
5324}
5325EXPORT_SYMBOL(register_netdev);
5326
Eric Dumazet29b44332010-10-11 10:22:12 +00005327int netdev_refcnt_read(const struct net_device *dev)
5328{
5329 int i, refcnt = 0;
5330
5331 for_each_possible_cpu(i)
5332 refcnt += *per_cpu_ptr(dev->pcpu_refcnt, i);
5333 return refcnt;
5334}
5335EXPORT_SYMBOL(netdev_refcnt_read);
5336
Ben Hutchings2c530402012-07-10 10:55:09 +00005337/**
Linus Torvalds1da177e2005-04-16 15:20:36 -07005338 * netdev_wait_allrefs - wait until all references are gone.
Randy Dunlap3de7a372012-08-18 14:36:44 +00005339 * @dev: target net_device
Linus Torvalds1da177e2005-04-16 15:20:36 -07005340 *
5341 * This is called when unregistering network devices.
5342 *
5343 * Any protocol or device that holds a reference should register
5344 * for netdevice notification, and cleanup and put back the
5345 * reference if they receive an UNREGISTER event.
5346 * We can get stuck here if buggy protocols don't correctly
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09005347 * call dev_put.
Linus Torvalds1da177e2005-04-16 15:20:36 -07005348 */
5349static void netdev_wait_allrefs(struct net_device *dev)
5350{
5351 unsigned long rebroadcast_time, warning_time;
Eric Dumazet29b44332010-10-11 10:22:12 +00005352 int refcnt;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005353
Eric Dumazete014deb2009-11-17 05:59:21 +00005354 linkwatch_forget_dev(dev);
5355
Linus Torvalds1da177e2005-04-16 15:20:36 -07005356 rebroadcast_time = warning_time = jiffies;
Eric Dumazet29b44332010-10-11 10:22:12 +00005357 refcnt = netdev_refcnt_read(dev);
5358
5359 while (refcnt != 0) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07005360 if (time_after(jiffies, rebroadcast_time + 1 * HZ)) {
Stephen Hemminger6756ae42006-03-20 22:23:58 -08005361 rtnl_lock();
Linus Torvalds1da177e2005-04-16 15:20:36 -07005362
5363 /* Rebroadcast unregister notification */
Pavel Emelyanov056925a2007-09-16 15:42:43 -07005364 call_netdevice_notifiers(NETDEV_UNREGISTER, dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005365
Eric Dumazet748e2d92012-08-22 21:50:59 +00005366 __rtnl_unlock();
Eric Dumazet0115e8e2012-08-22 17:19:46 +00005367 rcu_barrier();
Eric Dumazet748e2d92012-08-22 21:50:59 +00005368 rtnl_lock();
5369
Eric Dumazet0115e8e2012-08-22 17:19:46 +00005370 call_netdevice_notifiers(NETDEV_UNREGISTER_FINAL, dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005371 if (test_bit(__LINK_STATE_LINKWATCH_PENDING,
5372 &dev->state)) {
5373 /* We must not have linkwatch events
5374 * pending on unregister. If this
5375 * happens, we simply run the queue
5376 * unscheduled, resulting in a noop
5377 * for this device.
5378 */
5379 linkwatch_run_queue();
5380 }
5381
Stephen Hemminger6756ae42006-03-20 22:23:58 -08005382 __rtnl_unlock();
Linus Torvalds1da177e2005-04-16 15:20:36 -07005383
5384 rebroadcast_time = jiffies;
5385 }
5386
5387 msleep(250);
5388
Eric Dumazet29b44332010-10-11 10:22:12 +00005389 refcnt = netdev_refcnt_read(dev);
5390
Linus Torvalds1da177e2005-04-16 15:20:36 -07005391 if (time_after(jiffies, warning_time + 10 * HZ)) {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00005392 pr_emerg("unregister_netdevice: waiting for %s to become free. Usage count = %d\n",
5393 dev->name, refcnt);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005394 warning_time = jiffies;
5395 }
5396 }
5397}
5398
5399/* The sequence is:
5400 *
5401 * rtnl_lock();
5402 * ...
5403 * register_netdevice(x1);
5404 * register_netdevice(x2);
5405 * ...
5406 * unregister_netdevice(y1);
5407 * unregister_netdevice(y2);
5408 * ...
5409 * rtnl_unlock();
5410 * free_netdev(y1);
5411 * free_netdev(y2);
5412 *
Herbert Xu58ec3b42008-10-07 15:50:03 -07005413 * We are invoked by rtnl_unlock().
Linus Torvalds1da177e2005-04-16 15:20:36 -07005414 * This allows us to deal with problems:
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005415 * 1) We can delete sysfs objects which invoke hotplug
Linus Torvalds1da177e2005-04-16 15:20:36 -07005416 * without deadlocking with linkwatch via keventd.
5417 * 2) Since we run with the RTNL semaphore not held, we can sleep
5418 * safely in order to wait for the netdev refcnt to drop to zero.
Herbert Xu58ec3b42008-10-07 15:50:03 -07005419 *
5420 * We must not return until all unregister events added during
5421 * the interval the lock was held have been completed.
Linus Torvalds1da177e2005-04-16 15:20:36 -07005422 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07005423void netdev_run_todo(void)
5424{
Oleg Nesterov626ab0e2006-06-23 02:05:55 -07005425 struct list_head list;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005426
Linus Torvalds1da177e2005-04-16 15:20:36 -07005427 /* Snapshot list, allow later requests */
Oleg Nesterov626ab0e2006-06-23 02:05:55 -07005428 list_replace_init(&net_todo_list, &list);
Herbert Xu58ec3b42008-10-07 15:50:03 -07005429
5430 __rtnl_unlock();
Oleg Nesterov626ab0e2006-06-23 02:05:55 -07005431
Eric Dumazet0115e8e2012-08-22 17:19:46 +00005432
5433 /* Wait for rcu callbacks to finish before next phase */
Eric W. Biederman850a5452011-10-13 22:25:23 +00005434 if (!list_empty(&list))
5435 rcu_barrier();
5436
Linus Torvalds1da177e2005-04-16 15:20:36 -07005437 while (!list_empty(&list)) {
5438 struct net_device *dev
stephen hemmingere5e26d72010-02-24 14:01:38 +00005439 = list_first_entry(&list, struct net_device, todo_list);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005440 list_del(&dev->todo_list);
5441
Eric Dumazet748e2d92012-08-22 21:50:59 +00005442 rtnl_lock();
Eric Dumazet0115e8e2012-08-22 17:19:46 +00005443 call_netdevice_notifiers(NETDEV_UNREGISTER_FINAL, dev);
Eric Dumazet748e2d92012-08-22 21:50:59 +00005444 __rtnl_unlock();
Eric Dumazet0115e8e2012-08-22 17:19:46 +00005445
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005446 if (unlikely(dev->reg_state != NETREG_UNREGISTERING)) {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00005447 pr_err("network todo '%s' but state %d\n",
Linus Torvalds1da177e2005-04-16 15:20:36 -07005448 dev->name, dev->reg_state);
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005449 dump_stack();
5450 continue;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005451 }
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005452
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005453 dev->reg_state = NETREG_UNREGISTERED;
5454
Changli Gao152102c2010-03-30 20:16:22 +00005455 on_each_cpu(flush_backlog, dev, 1);
Stephen Hemminger6e583ce2008-08-03 21:29:57 -07005456
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005457 netdev_wait_allrefs(dev);
5458
5459 /* paranoia */
Eric Dumazet29b44332010-10-11 10:22:12 +00005460 BUG_ON(netdev_refcnt_read(dev));
Eric Dumazet33d480c2011-08-11 19:30:52 +00005461 WARN_ON(rcu_access_pointer(dev->ip_ptr));
5462 WARN_ON(rcu_access_pointer(dev->ip6_ptr));
Ilpo Järvinen547b7922008-07-25 21:43:18 -07005463 WARN_ON(dev->dn_ptr);
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005464
Stephen Hemmingerb17a7c12006-05-10 13:21:17 -07005465 if (dev->destructor)
5466 dev->destructor(dev);
Stephen Hemminger9093bbb2007-05-19 15:39:25 -07005467
5468 /* Free network device */
5469 kobject_put(&dev->dev.kobj);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005470 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07005471}
5472
Ben Hutchings3cfde792010-07-09 09:11:52 +00005473/* Convert net_device_stats to rtnl_link_stats64. They have the same
5474 * fields in the same order, with only the type differing.
5475 */
Eric Dumazet77a1abf2012-03-05 04:50:09 +00005476void netdev_stats_to_stats64(struct rtnl_link_stats64 *stats64,
5477 const struct net_device_stats *netdev_stats)
Ben Hutchings3cfde792010-07-09 09:11:52 +00005478{
5479#if BITS_PER_LONG == 64
Eric Dumazet77a1abf2012-03-05 04:50:09 +00005480 BUILD_BUG_ON(sizeof(*stats64) != sizeof(*netdev_stats));
5481 memcpy(stats64, netdev_stats, sizeof(*stats64));
Ben Hutchings3cfde792010-07-09 09:11:52 +00005482#else
5483 size_t i, n = sizeof(*stats64) / sizeof(u64);
5484 const unsigned long *src = (const unsigned long *)netdev_stats;
5485 u64 *dst = (u64 *)stats64;
5486
5487 BUILD_BUG_ON(sizeof(*netdev_stats) / sizeof(unsigned long) !=
5488 sizeof(*stats64) / sizeof(u64));
5489 for (i = 0; i < n; i++)
5490 dst[i] = src[i];
5491#endif
5492}
Eric Dumazet77a1abf2012-03-05 04:50:09 +00005493EXPORT_SYMBOL(netdev_stats_to_stats64);
Ben Hutchings3cfde792010-07-09 09:11:52 +00005494
Eric Dumazetd83345a2009-11-16 03:36:51 +00005495/**
Stephen Hemmingereeda3fd2008-11-19 21:40:23 -08005496 * dev_get_stats - get network device statistics
5497 * @dev: device to get statistics from
Eric Dumazet28172732010-07-07 14:58:56 -07005498 * @storage: place to store stats
Stephen Hemmingereeda3fd2008-11-19 21:40:23 -08005499 *
Ben Hutchingsd7753512010-07-09 09:12:41 +00005500 * Get network statistics from device. Return @storage.
5501 * The device driver may provide its own method by setting
5502 * dev->netdev_ops->get_stats64 or dev->netdev_ops->get_stats;
5503 * otherwise the internal statistics structure is used.
Stephen Hemmingereeda3fd2008-11-19 21:40:23 -08005504 */
Ben Hutchingsd7753512010-07-09 09:12:41 +00005505struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
5506 struct rtnl_link_stats64 *storage)
Eric Dumazet7004bf22009-05-18 00:34:33 +00005507{
Stephen Hemmingereeda3fd2008-11-19 21:40:23 -08005508 const struct net_device_ops *ops = dev->netdev_ops;
5509
Eric Dumazet28172732010-07-07 14:58:56 -07005510 if (ops->ndo_get_stats64) {
5511 memset(storage, 0, sizeof(*storage));
Eric Dumazetcaf586e2010-09-30 21:06:55 +00005512 ops->ndo_get_stats64(dev, storage);
5513 } else if (ops->ndo_get_stats) {
Ben Hutchings3cfde792010-07-09 09:11:52 +00005514 netdev_stats_to_stats64(storage, ops->ndo_get_stats(dev));
Eric Dumazetcaf586e2010-09-30 21:06:55 +00005515 } else {
5516 netdev_stats_to_stats64(storage, &dev->stats);
Eric Dumazet28172732010-07-07 14:58:56 -07005517 }
Eric Dumazetcaf586e2010-09-30 21:06:55 +00005518 storage->rx_dropped += atomic_long_read(&dev->rx_dropped);
Eric Dumazet28172732010-07-07 14:58:56 -07005519 return storage;
Rusty Russellc45d2862007-03-28 14:29:08 -07005520}
Stephen Hemmingereeda3fd2008-11-19 21:40:23 -08005521EXPORT_SYMBOL(dev_get_stats);
Rusty Russellc45d2862007-03-28 14:29:08 -07005522
Eric Dumazet24824a02010-10-02 06:11:55 +00005523struct netdev_queue *dev_ingress_queue_create(struct net_device *dev)
David S. Millerdc2b4842008-07-08 17:18:23 -07005524{
Eric Dumazet24824a02010-10-02 06:11:55 +00005525 struct netdev_queue *queue = dev_ingress_queue(dev);
David S. Millerdc2b4842008-07-08 17:18:23 -07005526
Eric Dumazet24824a02010-10-02 06:11:55 +00005527#ifdef CONFIG_NET_CLS_ACT
5528 if (queue)
5529 return queue;
5530 queue = kzalloc(sizeof(*queue), GFP_KERNEL);
5531 if (!queue)
5532 return NULL;
5533 netdev_init_one_queue(dev, queue, NULL);
Eric Dumazet24824a02010-10-02 06:11:55 +00005534 queue->qdisc = &noop_qdisc;
5535 queue->qdisc_sleeping = &noop_qdisc;
5536 rcu_assign_pointer(dev->ingress_queue, queue);
5537#endif
5538 return queue;
David S. Millerbb949fb2008-07-08 16:55:56 -07005539}
5540
Eric Dumazet2c60db02012-09-16 09:17:26 +00005541static const struct ethtool_ops default_ethtool_ops;
5542
Stanislaw Gruszkad07d7502013-01-10 23:19:10 +00005543void netdev_set_default_ethtool_ops(struct net_device *dev,
5544 const struct ethtool_ops *ops)
5545{
5546 if (dev->ethtool_ops == &default_ethtool_ops)
5547 dev->ethtool_ops = ops;
5548}
5549EXPORT_SYMBOL_GPL(netdev_set_default_ethtool_ops);
5550
Linus Torvalds1da177e2005-04-16 15:20:36 -07005551/**
Tom Herbert36909ea2011-01-09 19:36:31 +00005552 * alloc_netdev_mqs - allocate network device
Linus Torvalds1da177e2005-04-16 15:20:36 -07005553 * @sizeof_priv: size of private data to allocate space for
5554 * @name: device name format string
5555 * @setup: callback to initialize device
Tom Herbert36909ea2011-01-09 19:36:31 +00005556 * @txqs: the number of TX subqueues to allocate
5557 * @rxqs: the number of RX subqueues to allocate
Linus Torvalds1da177e2005-04-16 15:20:36 -07005558 *
5559 * Allocates a struct net_device with private data area for driver use
Peter P Waskiewicz Jrf25f4e42007-07-06 13:36:20 -07005560 * and performs basic initialization. Also allocates subquue structs
Tom Herbert36909ea2011-01-09 19:36:31 +00005561 * for each queue on the device.
Linus Torvalds1da177e2005-04-16 15:20:36 -07005562 */
Tom Herbert36909ea2011-01-09 19:36:31 +00005563struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
5564 void (*setup)(struct net_device *),
5565 unsigned int txqs, unsigned int rxqs)
Linus Torvalds1da177e2005-04-16 15:20:36 -07005566{
Linus Torvalds1da177e2005-04-16 15:20:36 -07005567 struct net_device *dev;
Stephen Hemminger79439862008-07-21 13:28:44 -07005568 size_t alloc_size;
Eric Dumazet1ce8e7b2009-05-27 04:42:37 +00005569 struct net_device *p;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005570
Stephen Hemmingerb6fe17d2006-08-29 17:06:13 -07005571 BUG_ON(strlen(name) >= sizeof(dev->name));
5572
Tom Herbert36909ea2011-01-09 19:36:31 +00005573 if (txqs < 1) {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00005574 pr_err("alloc_netdev: Unable to allocate device with zero queues\n");
Tom Herbert55513fb2010-10-18 17:55:58 +00005575 return NULL;
5576 }
5577
Tom Herbert36909ea2011-01-09 19:36:31 +00005578#ifdef CONFIG_RPS
5579 if (rxqs < 1) {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00005580 pr_err("alloc_netdev: Unable to allocate device with zero RX queues\n");
Tom Herbert36909ea2011-01-09 19:36:31 +00005581 return NULL;
5582 }
5583#endif
5584
David S. Millerfd2ea0a2008-07-17 01:56:23 -07005585 alloc_size = sizeof(struct net_device);
Alexey Dobriyand1643d22008-04-18 15:43:32 -07005586 if (sizeof_priv) {
5587 /* ensure 32-byte alignment of private area */
Eric Dumazet1ce8e7b2009-05-27 04:42:37 +00005588 alloc_size = ALIGN(alloc_size, NETDEV_ALIGN);
Alexey Dobriyand1643d22008-04-18 15:43:32 -07005589 alloc_size += sizeof_priv;
5590 }
5591 /* ensure 32-byte alignment of whole construct */
Eric Dumazet1ce8e7b2009-05-27 04:42:37 +00005592 alloc_size += NETDEV_ALIGN - 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005593
Paolo 'Blaisorblade' Giarrusso31380de2006-04-06 22:38:28 -07005594 p = kzalloc(alloc_size, GFP_KERNEL);
Joe Perches62b59422013-02-04 16:48:16 +00005595 if (!p)
Linus Torvalds1da177e2005-04-16 15:20:36 -07005596 return NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005597
Eric Dumazet1ce8e7b2009-05-27 04:42:37 +00005598 dev = PTR_ALIGN(p, NETDEV_ALIGN);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005599 dev->padded = (char *)dev - (char *)p;
Jiri Pirkoab9c73c2009-05-08 13:30:17 +00005600
Eric Dumazet29b44332010-10-11 10:22:12 +00005601 dev->pcpu_refcnt = alloc_percpu(int);
5602 if (!dev->pcpu_refcnt)
Tom Herberte6484932010-10-18 18:04:39 +00005603 goto free_p;
Jiri Pirkoab9c73c2009-05-08 13:30:17 +00005604
Linus Torvalds1da177e2005-04-16 15:20:36 -07005605 if (dev_addr_init(dev))
Eric Dumazet29b44332010-10-11 10:22:12 +00005606 goto free_pcpu;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005607
Jiri Pirko22bedad32010-04-01 21:22:57 +00005608 dev_mc_init(dev);
Jiri Pirkoa748ee22010-04-01 21:22:09 +00005609 dev_uc_init(dev);
Jiri Pirkoccffad252009-05-22 23:22:17 +00005610
YOSHIFUJI Hideakic346dca2008-03-25 21:47:49 +09005611 dev_net_set(dev, &init_net);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005612
Peter P Waskiewicz Jr82cc1a72008-03-21 03:43:19 -07005613 dev->gso_max_size = GSO_MAX_SIZE;
Ben Hutchings30b678d2012-07-30 15:57:00 +00005614 dev->gso_max_segs = GSO_MAX_SEGS;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005615
Herbert Xud565b0a2008-12-15 23:38:52 -08005616 INIT_LIST_HEAD(&dev->napi_list);
Eric W. Biederman9fdce092009-10-30 14:51:13 +00005617 INIT_LIST_HEAD(&dev->unreg_list);
Eric Dumazete014deb2009-11-17 05:59:21 +00005618 INIT_LIST_HEAD(&dev->link_watch_list);
Jiri Pirko9ff162a2013-01-03 22:48:49 +00005619 INIT_LIST_HEAD(&dev->upper_dev_list);
Eric Dumazet93f154b2009-05-18 22:19:19 -07005620 dev->priv_flags = IFF_XMIT_DST_RELEASE;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005621 setup(dev);
David S. Miller8d3bdbd2011-02-08 15:02:50 -08005622
5623 dev->num_tx_queues = txqs;
5624 dev->real_num_tx_queues = txqs;
5625 if (netif_alloc_netdev_queues(dev))
5626 goto free_all;
5627
5628#ifdef CONFIG_RPS
5629 dev->num_rx_queues = rxqs;
5630 dev->real_num_rx_queues = rxqs;
5631 if (netif_alloc_rx_queues(dev))
5632 goto free_all;
5633#endif
5634
Linus Torvalds1da177e2005-04-16 15:20:36 -07005635 strcpy(dev->name, name);
Vlad Dogarucbda10f2011-01-13 23:38:30 +00005636 dev->group = INIT_NETDEV_GROUP;
Eric Dumazet2c60db02012-09-16 09:17:26 +00005637 if (!dev->ethtool_ops)
5638 dev->ethtool_ops = &default_ethtool_ops;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005639 return dev;
Jiri Pirkoab9c73c2009-05-08 13:30:17 +00005640
David S. Miller8d3bdbd2011-02-08 15:02:50 -08005641free_all:
5642 free_netdev(dev);
5643 return NULL;
5644
Eric Dumazet29b44332010-10-11 10:22:12 +00005645free_pcpu:
5646 free_percpu(dev->pcpu_refcnt);
Tom Herberted9af2e2010-11-09 10:47:30 +00005647 kfree(dev->_tx);
Tom Herbertfe822242010-11-09 10:47:38 +00005648#ifdef CONFIG_RPS
5649 kfree(dev->_rx);
5650#endif
5651
Jiri Pirkoab9c73c2009-05-08 13:30:17 +00005652free_p:
5653 kfree(p);
5654 return NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005655}
Tom Herbert36909ea2011-01-09 19:36:31 +00005656EXPORT_SYMBOL(alloc_netdev_mqs);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005657
5658/**
5659 * free_netdev - free network device
5660 * @dev: device
5661 *
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09005662 * This function does the last stage of destroying an allocated device
5663 * interface. The reference to the device object is released.
Linus Torvalds1da177e2005-04-16 15:20:36 -07005664 * If this is the last reference then it will be freed.
5665 */
5666void free_netdev(struct net_device *dev)
5667{
Herbert Xud565b0a2008-12-15 23:38:52 -08005668 struct napi_struct *p, *n;
5669
Denis V. Lunevf3005d72008-04-16 02:02:18 -07005670 release_net(dev_net(dev));
5671
David S. Millere8a04642008-07-17 00:34:19 -07005672 kfree(dev->_tx);
Tom Herbertfe822242010-11-09 10:47:38 +00005673#ifdef CONFIG_RPS
5674 kfree(dev->_rx);
5675#endif
David S. Millere8a04642008-07-17 00:34:19 -07005676
Eric Dumazet33d480c2011-08-11 19:30:52 +00005677 kfree(rcu_dereference_protected(dev->ingress_queue, 1));
Eric Dumazet24824a02010-10-02 06:11:55 +00005678
Jiri Pirkof001fde2009-05-05 02:48:28 +00005679 /* Flush device addresses */
5680 dev_addr_flush(dev);
5681
Herbert Xud565b0a2008-12-15 23:38:52 -08005682 list_for_each_entry_safe(p, n, &dev->napi_list, dev_list)
5683 netif_napi_del(p);
5684
Eric Dumazet29b44332010-10-11 10:22:12 +00005685 free_percpu(dev->pcpu_refcnt);
5686 dev->pcpu_refcnt = NULL;
5687
Stephen Hemminger3041a062006-05-26 13:25:24 -07005688 /* Compatibility with error handling in drivers */
Linus Torvalds1da177e2005-04-16 15:20:36 -07005689 if (dev->reg_state == NETREG_UNINITIALIZED) {
5690 kfree((char *)dev - dev->padded);
5691 return;
5692 }
5693
5694 BUG_ON(dev->reg_state != NETREG_UNREGISTERED);
5695 dev->reg_state = NETREG_RELEASED;
5696
Greg Kroah-Hartman43cb76d2002-04-09 12:14:34 -07005697 /* will free via device release */
5698 put_device(&dev->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005699}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07005700EXPORT_SYMBOL(free_netdev);
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09005701
Stephen Hemmingerf0db2752008-09-30 02:23:58 -07005702/**
5703 * synchronize_net - Synchronize with packet receive processing
5704 *
5705 * Wait for packets currently being received to be done.
5706 * Does not block later packets from starting.
5707 */
YOSHIFUJI Hideaki4ec93ed2007-02-09 23:24:36 +09005708void synchronize_net(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -07005709{
5710 might_sleep();
Eric Dumazetbe3fc412011-05-23 23:07:32 +00005711 if (rtnl_is_locked())
5712 synchronize_rcu_expedited();
5713 else
5714 synchronize_rcu();
Linus Torvalds1da177e2005-04-16 15:20:36 -07005715}
Eric Dumazetd1b19df2009-09-03 01:29:39 -07005716EXPORT_SYMBOL(synchronize_net);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005717
5718/**
Eric Dumazet44a08732009-10-27 07:03:04 +00005719 * unregister_netdevice_queue - remove device from the kernel
Linus Torvalds1da177e2005-04-16 15:20:36 -07005720 * @dev: device
Eric Dumazet44a08732009-10-27 07:03:04 +00005721 * @head: list
Jaswinder Singh Rajput6ebfbc02009-11-22 20:43:13 -08005722 *
Linus Torvalds1da177e2005-04-16 15:20:36 -07005723 * This function shuts down a device interface and removes it
Wang Chend59b54b2007-12-11 02:28:03 -08005724 * from the kernel tables.
Eric Dumazet44a08732009-10-27 07:03:04 +00005725 * If head not NULL, device is queued to be unregistered later.
Linus Torvalds1da177e2005-04-16 15:20:36 -07005726 *
5727 * Callers must hold the rtnl semaphore. You may want
5728 * unregister_netdev() instead of this.
5729 */
5730
Eric Dumazet44a08732009-10-27 07:03:04 +00005731void unregister_netdevice_queue(struct net_device *dev, struct list_head *head)
Linus Torvalds1da177e2005-04-16 15:20:36 -07005732{
Herbert Xua6620712007-12-12 19:21:56 -08005733 ASSERT_RTNL();
5734
Eric Dumazet44a08732009-10-27 07:03:04 +00005735 if (head) {
Eric W. Biederman9fdce092009-10-30 14:51:13 +00005736 list_move_tail(&dev->unreg_list, head);
Eric Dumazet44a08732009-10-27 07:03:04 +00005737 } else {
5738 rollback_registered(dev);
5739 /* Finish processing unregister after unlock */
5740 net_set_todo(dev);
5741 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07005742}
Eric Dumazet44a08732009-10-27 07:03:04 +00005743EXPORT_SYMBOL(unregister_netdevice_queue);
Linus Torvalds1da177e2005-04-16 15:20:36 -07005744
5745/**
Eric Dumazet9b5e3832009-10-27 07:04:19 +00005746 * unregister_netdevice_many - unregister many devices
5747 * @head: list of devices
Eric Dumazet9b5e3832009-10-27 07:04:19 +00005748 */
5749void unregister_netdevice_many(struct list_head *head)
5750{
5751 struct net_device *dev;
5752
5753 if (!list_empty(head)) {
5754 rollback_registered_many(head);
5755 list_for_each_entry(dev, head, unreg_list)
5756 net_set_todo(dev);
5757 }
5758}
Eric Dumazet63c80992009-10-27 07:06:49 +00005759EXPORT_SYMBOL(unregister_netdevice_many);
Eric Dumazet9b5e3832009-10-27 07:04:19 +00005760
5761/**
Linus Torvalds1da177e2005-04-16 15:20:36 -07005762 * unregister_netdev - remove device from the kernel
5763 * @dev: device
5764 *
5765 * This function shuts down a device interface and removes it
Wang Chend59b54b2007-12-11 02:28:03 -08005766 * from the kernel tables.
Linus Torvalds1da177e2005-04-16 15:20:36 -07005767 *
5768 * This is just a wrapper for unregister_netdevice that takes
5769 * the rtnl semaphore. In general you want to use this and not
5770 * unregister_netdevice.
5771 */
5772void unregister_netdev(struct net_device *dev)
5773{
5774 rtnl_lock();
5775 unregister_netdevice(dev);
5776 rtnl_unlock();
5777}
Linus Torvalds1da177e2005-04-16 15:20:36 -07005778EXPORT_SYMBOL(unregister_netdev);
5779
Eric W. Biedermance286d32007-09-12 13:53:49 +02005780/**
5781 * dev_change_net_namespace - move device to different nethost namespace
5782 * @dev: device
5783 * @net: network namespace
5784 * @pat: If not NULL name pattern to try if the current device name
5785 * is already taken in the destination network namespace.
5786 *
5787 * This function shuts down a device interface and moves it
5788 * to a new network namespace. On success 0 is returned, on
5789 * a failure a netagive errno code is returned.
5790 *
5791 * Callers must hold the rtnl semaphore.
5792 */
5793
5794int dev_change_net_namespace(struct net_device *dev, struct net *net, const char *pat)
5795{
Eric W. Biedermance286d32007-09-12 13:53:49 +02005796 int err;
5797
5798 ASSERT_RTNL();
5799
5800 /* Don't allow namespace local devices to be moved. */
5801 err = -EINVAL;
5802 if (dev->features & NETIF_F_NETNS_LOCAL)
5803 goto out;
5804
5805 /* Ensure the device has been registrered */
Eric W. Biedermance286d32007-09-12 13:53:49 +02005806 if (dev->reg_state != NETREG_REGISTERED)
5807 goto out;
5808
5809 /* Get out if there is nothing todo */
5810 err = 0;
YOSHIFUJI Hideaki878628f2008-03-26 03:57:35 +09005811 if (net_eq(dev_net(dev), net))
Eric W. Biedermance286d32007-09-12 13:53:49 +02005812 goto out;
5813
5814 /* Pick the destination device name, and ensure
5815 * we can use it in the destination network namespace.
5816 */
5817 err = -EEXIST;
Octavian Purdilad9031022009-11-18 02:36:59 +00005818 if (__dev_get_by_name(net, dev->name)) {
Eric W. Biedermance286d32007-09-12 13:53:49 +02005819 /* We get here if we can't use the current device name */
5820 if (!pat)
5821 goto out;
Gao feng828de4f2012-09-13 20:58:27 +00005822 if (dev_get_valid_name(net, dev, pat) < 0)
Eric W. Biedermance286d32007-09-12 13:53:49 +02005823 goto out;
5824 }
5825
5826 /*
5827 * And now a mini version of register_netdevice unregister_netdevice.
5828 */
5829
5830 /* If device is running close it first. */
Pavel Emelyanov9b772652007-10-10 02:49:09 -07005831 dev_close(dev);
Eric W. Biedermance286d32007-09-12 13:53:49 +02005832
5833 /* And unlink it from device chain */
5834 err = -ENODEV;
5835 unlist_netdevice(dev);
5836
5837 synchronize_net();
5838
5839 /* Shutdown queueing discipline. */
5840 dev_shutdown(dev);
5841
5842 /* Notify protocols, that we are about to destroy
5843 this device. They should clean all the things.
David Lamparter3b27e102010-09-17 03:22:19 +00005844
5845 Note that dev->reg_state stays at NETREG_REGISTERED.
5846 This is wanted because this way 8021q and macvlan know
5847 the device is just moving and can keep their slaves up.
Eric W. Biedermance286d32007-09-12 13:53:49 +02005848 */
5849 call_netdevice_notifiers(NETDEV_UNREGISTER, dev);
Gao feng6549dd42012-08-23 15:36:55 +00005850 rcu_barrier();
5851 call_netdevice_notifiers(NETDEV_UNREGISTER_FINAL, dev);
Eric W. Biedermand2237d32011-10-21 06:24:20 +00005852 rtmsg_ifinfo(RTM_DELLINK, dev, ~0U);
Eric W. Biedermance286d32007-09-12 13:53:49 +02005853
5854 /*
5855 * Flush the unicast and multicast chains
5856 */
Jiri Pirkoa748ee22010-04-01 21:22:09 +00005857 dev_uc_flush(dev);
Jiri Pirko22bedad32010-04-01 21:22:57 +00005858 dev_mc_flush(dev);
Eric W. Biedermance286d32007-09-12 13:53:49 +02005859
Serge Hallyn4e66ae22012-12-03 16:17:12 +00005860 /* Send a netdev-removed uevent to the old namespace */
5861 kobject_uevent(&dev->dev.kobj, KOBJ_REMOVE);
5862
Eric W. Biedermance286d32007-09-12 13:53:49 +02005863 /* Actually switch the network namespace */
YOSHIFUJI Hideakic346dca2008-03-25 21:47:49 +09005864 dev_net_set(dev, net);
Eric W. Biedermance286d32007-09-12 13:53:49 +02005865
Eric W. Biedermance286d32007-09-12 13:53:49 +02005866 /* If there is an ifindex conflict assign a new one */
5867 if (__dev_get_by_index(net, dev->ifindex)) {
5868 int iflink = (dev->iflink == dev->ifindex);
5869 dev->ifindex = dev_new_index(net);
5870 if (iflink)
5871 dev->iflink = dev->ifindex;
5872 }
5873
Serge Hallyn4e66ae22012-12-03 16:17:12 +00005874 /* Send a netdev-add uevent to the new namespace */
5875 kobject_uevent(&dev->dev.kobj, KOBJ_ADD);
5876
Eric W. Biederman8b41d182007-09-26 22:02:53 -07005877 /* Fixup kobjects */
Eric W. Biedermana1b3f592010-05-04 17:36:49 -07005878 err = device_rename(&dev->dev, dev->name);
Eric W. Biederman8b41d182007-09-26 22:02:53 -07005879 WARN_ON(err);
Eric W. Biedermance286d32007-09-12 13:53:49 +02005880
5881 /* Add the device back in the hashes */
5882 list_netdevice(dev);
5883
5884 /* Notify protocols, that a new device appeared. */
5885 call_netdevice_notifiers(NETDEV_REGISTER, dev);
5886
Eric W. Biedermand90a9092009-12-12 22:11:15 +00005887 /*
5888 * Prevent userspace races by waiting until the network
5889 * device is fully setup before sending notifications.
5890 */
5891 rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U);
5892
Eric W. Biedermance286d32007-09-12 13:53:49 +02005893 synchronize_net();
5894 err = 0;
5895out:
5896 return err;
5897}
Johannes Berg463d0182009-07-14 00:33:35 +02005898EXPORT_SYMBOL_GPL(dev_change_net_namespace);
Eric W. Biedermance286d32007-09-12 13:53:49 +02005899
Linus Torvalds1da177e2005-04-16 15:20:36 -07005900static int dev_cpu_callback(struct notifier_block *nfb,
5901 unsigned long action,
5902 void *ocpu)
5903{
5904 struct sk_buff **list_skb;
Linus Torvalds1da177e2005-04-16 15:20:36 -07005905 struct sk_buff *skb;
5906 unsigned int cpu, oldcpu = (unsigned long)ocpu;
5907 struct softnet_data *sd, *oldsd;
5908
Rafael J. Wysocki8bb78442007-05-09 02:35:10 -07005909 if (action != CPU_DEAD && action != CPU_DEAD_FROZEN)
Linus Torvalds1da177e2005-04-16 15:20:36 -07005910 return NOTIFY_OK;
5911
5912 local_irq_disable();
5913 cpu = smp_processor_id();
5914 sd = &per_cpu(softnet_data, cpu);
5915 oldsd = &per_cpu(softnet_data, oldcpu);
5916
5917 /* Find end of our completion_queue. */
5918 list_skb = &sd->completion_queue;
5919 while (*list_skb)
5920 list_skb = &(*list_skb)->next;
5921 /* Append completion queue from offline CPU. */
5922 *list_skb = oldsd->completion_queue;
5923 oldsd->completion_queue = NULL;
5924
Linus Torvalds1da177e2005-04-16 15:20:36 -07005925 /* Append output queue from offline CPU. */
Changli Gaoa9cbd582010-04-26 23:06:24 +00005926 if (oldsd->output_queue) {
5927 *sd->output_queue_tailp = oldsd->output_queue;
5928 sd->output_queue_tailp = oldsd->output_queue_tailp;
5929 oldsd->output_queue = NULL;
5930 oldsd->output_queue_tailp = &oldsd->output_queue;
5931 }
Heiko Carstens264524d2011-06-06 20:50:03 +00005932 /* Append NAPI poll list from offline CPU. */
5933 if (!list_empty(&oldsd->poll_list)) {
5934 list_splice_init(&oldsd->poll_list, &sd->poll_list);
5935 raise_softirq_irqoff(NET_RX_SOFTIRQ);
5936 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07005937
5938 raise_softirq_irqoff(NET_TX_SOFTIRQ);
5939 local_irq_enable();
5940
5941 /* Process offline CPU's input_pkt_queue */
Tom Herbert76cc8b12010-05-20 18:37:59 +00005942 while ((skb = __skb_dequeue(&oldsd->process_queue))) {
5943 netif_rx(skb);
5944 input_queue_head_incr(oldsd);
5945 }
Tom Herbertfec5e652010-04-16 16:01:27 -07005946 while ((skb = __skb_dequeue(&oldsd->input_pkt_queue))) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07005947 netif_rx(skb);
Tom Herbert76cc8b12010-05-20 18:37:59 +00005948 input_queue_head_incr(oldsd);
Tom Herbertfec5e652010-04-16 16:01:27 -07005949 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07005950
5951 return NOTIFY_OK;
5952}
Linus Torvalds1da177e2005-04-16 15:20:36 -07005953
5954
Herbert Xu7f353bf2007-08-10 15:47:58 -07005955/**
Herbert Xub63365a2008-10-23 01:11:29 -07005956 * netdev_increment_features - increment feature set by one
5957 * @all: current feature set
5958 * @one: new feature set
5959 * @mask: mask feature set
Herbert Xu7f353bf2007-08-10 15:47:58 -07005960 *
5961 * Computes a new feature set after adding a device with feature set
Herbert Xub63365a2008-10-23 01:11:29 -07005962 * @one to the master device with current feature set @all. Will not
5963 * enable anything that is off in @mask. Returns the new feature set.
Herbert Xu7f353bf2007-08-10 15:47:58 -07005964 */
Michał Mirosławc8f44af2011-11-15 15:29:55 +00005965netdev_features_t netdev_increment_features(netdev_features_t all,
5966 netdev_features_t one, netdev_features_t mask)
Herbert Xu7f353bf2007-08-10 15:47:58 -07005967{
Michał Mirosław1742f182011-04-22 06:31:16 +00005968 if (mask & NETIF_F_GEN_CSUM)
5969 mask |= NETIF_F_ALL_CSUM;
5970 mask |= NETIF_F_VLAN_CHALLENGED;
5971
5972 all |= one & (NETIF_F_ONE_FOR_ALL|NETIF_F_ALL_CSUM) & mask;
5973 all &= one | ~NETIF_F_ALL_FOR_ALL;
5974
Michał Mirosław1742f182011-04-22 06:31:16 +00005975 /* If one device supports hw checksumming, set for all. */
5976 if (all & NETIF_F_GEN_CSUM)
5977 all &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_GEN_CSUM);
Herbert Xu7f353bf2007-08-10 15:47:58 -07005978
5979 return all;
5980}
Herbert Xub63365a2008-10-23 01:11:29 -07005981EXPORT_SYMBOL(netdev_increment_features);
Herbert Xu7f353bf2007-08-10 15:47:58 -07005982
Pavel Emelyanov30d97d32007-09-16 15:40:33 -07005983static struct hlist_head *netdev_create_hash(void)
5984{
5985 int i;
5986 struct hlist_head *hash;
5987
5988 hash = kmalloc(sizeof(*hash) * NETDEV_HASHENTRIES, GFP_KERNEL);
5989 if (hash != NULL)
5990 for (i = 0; i < NETDEV_HASHENTRIES; i++)
5991 INIT_HLIST_HEAD(&hash[i]);
5992
5993 return hash;
5994}
5995
Eric W. Biederman881d9662007-09-17 11:56:21 -07005996/* Initialize per network namespace state */
Pavel Emelyanov46650792007-10-08 20:38:39 -07005997static int __net_init netdev_init(struct net *net)
Eric W. Biederman881d9662007-09-17 11:56:21 -07005998{
Rustad, Mark D734b6542012-07-18 09:06:07 +00005999 if (net != &init_net)
6000 INIT_LIST_HEAD(&net->dev_base_head);
Eric W. Biederman881d9662007-09-17 11:56:21 -07006001
Pavel Emelyanov30d97d32007-09-16 15:40:33 -07006002 net->dev_name_head = netdev_create_hash();
6003 if (net->dev_name_head == NULL)
6004 goto err_name;
Eric W. Biederman881d9662007-09-17 11:56:21 -07006005
Pavel Emelyanov30d97d32007-09-16 15:40:33 -07006006 net->dev_index_head = netdev_create_hash();
6007 if (net->dev_index_head == NULL)
6008 goto err_idx;
Eric W. Biederman881d9662007-09-17 11:56:21 -07006009
6010 return 0;
Pavel Emelyanov30d97d32007-09-16 15:40:33 -07006011
6012err_idx:
6013 kfree(net->dev_name_head);
6014err_name:
6015 return -ENOMEM;
Eric W. Biederman881d9662007-09-17 11:56:21 -07006016}
6017
Stephen Hemmingerf0db2752008-09-30 02:23:58 -07006018/**
6019 * netdev_drivername - network driver for the device
6020 * @dev: network device
Stephen Hemmingerf0db2752008-09-30 02:23:58 -07006021 *
6022 * Determine network driver for device.
6023 */
David S. Miller3019de12011-06-06 16:41:33 -07006024const char *netdev_drivername(const struct net_device *dev)
Arjan van de Ven6579e572008-07-21 13:31:48 -07006025{
Stephen Hemmingercf04a4c72008-09-30 02:22:14 -07006026 const struct device_driver *driver;
6027 const struct device *parent;
David S. Miller3019de12011-06-06 16:41:33 -07006028 const char *empty = "";
Arjan van de Ven6579e572008-07-21 13:31:48 -07006029
6030 parent = dev->dev.parent;
Arjan van de Ven6579e572008-07-21 13:31:48 -07006031 if (!parent)
David S. Miller3019de12011-06-06 16:41:33 -07006032 return empty;
Arjan van de Ven6579e572008-07-21 13:31:48 -07006033
6034 driver = parent->driver;
6035 if (driver && driver->name)
David S. Miller3019de12011-06-06 16:41:33 -07006036 return driver->name;
6037 return empty;
Arjan van de Ven6579e572008-07-21 13:31:48 -07006038}
6039
Joe Perchesb004ff42012-09-12 20:12:19 -07006040static int __netdev_printk(const char *level, const struct net_device *dev,
Joe Perches256df2f2010-06-27 01:02:35 +00006041 struct va_format *vaf)
6042{
6043 int r;
6044
Joe Perchesb004ff42012-09-12 20:12:19 -07006045 if (dev && dev->dev.parent) {
Joe Perches666f3552012-09-12 20:14:11 -07006046 r = dev_printk_emit(level[1] - '0',
6047 dev->dev.parent,
6048 "%s %s %s: %pV",
6049 dev_driver_string(dev->dev.parent),
6050 dev_name(dev->dev.parent),
6051 netdev_name(dev), vaf);
Joe Perchesb004ff42012-09-12 20:12:19 -07006052 } else if (dev) {
Joe Perches256df2f2010-06-27 01:02:35 +00006053 r = printk("%s%s: %pV", level, netdev_name(dev), vaf);
Joe Perchesb004ff42012-09-12 20:12:19 -07006054 } else {
Joe Perches256df2f2010-06-27 01:02:35 +00006055 r = printk("%s(NULL net_device): %pV", level, vaf);
Joe Perchesb004ff42012-09-12 20:12:19 -07006056 }
Joe Perches256df2f2010-06-27 01:02:35 +00006057
6058 return r;
6059}
6060
6061int netdev_printk(const char *level, const struct net_device *dev,
6062 const char *format, ...)
6063{
6064 struct va_format vaf;
6065 va_list args;
6066 int r;
6067
6068 va_start(args, format);
6069
6070 vaf.fmt = format;
6071 vaf.va = &args;
6072
6073 r = __netdev_printk(level, dev, &vaf);
Joe Perchesb004ff42012-09-12 20:12:19 -07006074
Joe Perches256df2f2010-06-27 01:02:35 +00006075 va_end(args);
6076
6077 return r;
6078}
6079EXPORT_SYMBOL(netdev_printk);
6080
6081#define define_netdev_printk_level(func, level) \
6082int func(const struct net_device *dev, const char *fmt, ...) \
6083{ \
6084 int r; \
6085 struct va_format vaf; \
6086 va_list args; \
6087 \
6088 va_start(args, fmt); \
6089 \
6090 vaf.fmt = fmt; \
6091 vaf.va = &args; \
6092 \
6093 r = __netdev_printk(level, dev, &vaf); \
Joe Perchesb004ff42012-09-12 20:12:19 -07006094 \
Joe Perches256df2f2010-06-27 01:02:35 +00006095 va_end(args); \
6096 \
6097 return r; \
6098} \
6099EXPORT_SYMBOL(func);
6100
6101define_netdev_printk_level(netdev_emerg, KERN_EMERG);
6102define_netdev_printk_level(netdev_alert, KERN_ALERT);
6103define_netdev_printk_level(netdev_crit, KERN_CRIT);
6104define_netdev_printk_level(netdev_err, KERN_ERR);
6105define_netdev_printk_level(netdev_warn, KERN_WARNING);
6106define_netdev_printk_level(netdev_notice, KERN_NOTICE);
6107define_netdev_printk_level(netdev_info, KERN_INFO);
6108
Pavel Emelyanov46650792007-10-08 20:38:39 -07006109static void __net_exit netdev_exit(struct net *net)
Eric W. Biederman881d9662007-09-17 11:56:21 -07006110{
6111 kfree(net->dev_name_head);
6112 kfree(net->dev_index_head);
6113}
6114
Denis V. Lunev022cbae2007-11-13 03:23:50 -08006115static struct pernet_operations __net_initdata netdev_net_ops = {
Eric W. Biederman881d9662007-09-17 11:56:21 -07006116 .init = netdev_init,
6117 .exit = netdev_exit,
6118};
6119
Pavel Emelyanov46650792007-10-08 20:38:39 -07006120static void __net_exit default_device_exit(struct net *net)
Eric W. Biedermance286d32007-09-12 13:53:49 +02006121{
Eric W. Biedermane008b5f2009-11-29 22:25:30 +00006122 struct net_device *dev, *aux;
Eric W. Biedermance286d32007-09-12 13:53:49 +02006123 /*
Eric W. Biedermane008b5f2009-11-29 22:25:30 +00006124 * Push all migratable network devices back to the
Eric W. Biedermance286d32007-09-12 13:53:49 +02006125 * initial network namespace
6126 */
6127 rtnl_lock();
Eric W. Biedermane008b5f2009-11-29 22:25:30 +00006128 for_each_netdev_safe(net, dev, aux) {
Eric W. Biedermance286d32007-09-12 13:53:49 +02006129 int err;
Pavel Emelyanovaca51392008-05-08 01:24:25 -07006130 char fb_name[IFNAMSIZ];
Eric W. Biedermance286d32007-09-12 13:53:49 +02006131
6132 /* Ignore unmoveable devices (i.e. loopback) */
6133 if (dev->features & NETIF_F_NETNS_LOCAL)
6134 continue;
6135
Eric W. Biedermane008b5f2009-11-29 22:25:30 +00006136 /* Leave virtual devices for the generic cleanup */
6137 if (dev->rtnl_link_ops)
6138 continue;
Eric W. Biedermand0c082c2008-11-05 15:59:38 -08006139
Lucas De Marchi25985ed2011-03-30 22:57:33 -03006140 /* Push remaining network devices to init_net */
Pavel Emelyanovaca51392008-05-08 01:24:25 -07006141 snprintf(fb_name, IFNAMSIZ, "dev%d", dev->ifindex);
6142 err = dev_change_net_namespace(dev, &init_net, fb_name);
Eric W. Biedermance286d32007-09-12 13:53:49 +02006143 if (err) {
Joe Perches7b6cd1c2012-02-01 10:54:43 +00006144 pr_emerg("%s: failed to move %s to init_net: %d\n",
6145 __func__, dev->name, err);
Pavel Emelyanovaca51392008-05-08 01:24:25 -07006146 BUG();
Eric W. Biedermance286d32007-09-12 13:53:49 +02006147 }
6148 }
6149 rtnl_unlock();
6150}
6151
Eric W. Biederman04dc7f6b2009-12-03 02:29:04 +00006152static void __net_exit default_device_exit_batch(struct list_head *net_list)
6153{
6154 /* At exit all network devices most be removed from a network
Uwe Kleine-Königb5950762010-11-01 15:38:34 -04006155 * namespace. Do this in the reverse order of registration.
Eric W. Biederman04dc7f6b2009-12-03 02:29:04 +00006156 * Do this across as many network namespaces as possible to
6157 * improve batching efficiency.
6158 */
6159 struct net_device *dev;
6160 struct net *net;
6161 LIST_HEAD(dev_kill_list);
6162
6163 rtnl_lock();
6164 list_for_each_entry(net, net_list, exit_list) {
6165 for_each_netdev_reverse(net, dev) {
6166 if (dev->rtnl_link_ops)
6167 dev->rtnl_link_ops->dellink(dev, &dev_kill_list);
6168 else
6169 unregister_netdevice_queue(dev, &dev_kill_list);
6170 }
6171 }
6172 unregister_netdevice_many(&dev_kill_list);
Eric Dumazetceaaec92011-02-17 22:59:19 +00006173 list_del(&dev_kill_list);
Eric W. Biederman04dc7f6b2009-12-03 02:29:04 +00006174 rtnl_unlock();
6175}
6176
Denis V. Lunev022cbae2007-11-13 03:23:50 -08006177static struct pernet_operations __net_initdata default_device_ops = {
Eric W. Biedermance286d32007-09-12 13:53:49 +02006178 .exit = default_device_exit,
Eric W. Biederman04dc7f6b2009-12-03 02:29:04 +00006179 .exit_batch = default_device_exit_batch,
Eric W. Biedermance286d32007-09-12 13:53:49 +02006180};
6181
Linus Torvalds1da177e2005-04-16 15:20:36 -07006182/*
6183 * Initialize the DEV module. At boot time this walks the device list and
6184 * unhooks any devices that fail to initialise (normally hardware not
6185 * present) and leaves us with a valid list of present and active devices.
6186 *
6187 */
6188
6189/*
6190 * This is called single threaded during boot, so no need
6191 * to take the rtnl semaphore.
6192 */
6193static int __init net_dev_init(void)
6194{
6195 int i, rc = -ENOMEM;
6196
6197 BUG_ON(!dev_boot_phase);
6198
Linus Torvalds1da177e2005-04-16 15:20:36 -07006199 if (dev_proc_init())
6200 goto out;
6201
Eric W. Biederman8b41d182007-09-26 22:02:53 -07006202 if (netdev_kobject_init())
Linus Torvalds1da177e2005-04-16 15:20:36 -07006203 goto out;
6204
6205 INIT_LIST_HEAD(&ptype_all);
Pavel Emelyanov82d8a8672007-11-26 20:12:58 +08006206 for (i = 0; i < PTYPE_HASH_SIZE; i++)
Linus Torvalds1da177e2005-04-16 15:20:36 -07006207 INIT_LIST_HEAD(&ptype_base[i]);
6208
Vlad Yasevich62532da2012-11-15 08:49:10 +00006209 INIT_LIST_HEAD(&offload_base);
6210
Eric W. Biederman881d9662007-09-17 11:56:21 -07006211 if (register_pernet_subsys(&netdev_net_ops))
6212 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -07006213
6214 /*
6215 * Initialise the packet receive queues.
6216 */
6217
KAMEZAWA Hiroyuki6f912042006-04-10 22:52:50 -07006218 for_each_possible_cpu(i) {
Eric Dumazete36fa2f2010-04-19 21:17:14 +00006219 struct softnet_data *sd = &per_cpu(softnet_data, i);
Linus Torvalds1da177e2005-04-16 15:20:36 -07006220
Changli Gaodee42872010-05-02 05:42:16 +00006221 memset(sd, 0, sizeof(*sd));
Eric Dumazete36fa2f2010-04-19 21:17:14 +00006222 skb_queue_head_init(&sd->input_pkt_queue);
Changli Gao6e7676c2010-04-27 15:07:33 -07006223 skb_queue_head_init(&sd->process_queue);
Eric Dumazete36fa2f2010-04-19 21:17:14 +00006224 sd->completion_queue = NULL;
6225 INIT_LIST_HEAD(&sd->poll_list);
Changli Gaoa9cbd582010-04-26 23:06:24 +00006226 sd->output_queue = NULL;
6227 sd->output_queue_tailp = &sd->output_queue;
Eric Dumazetdf334542010-03-24 19:13:54 +00006228#ifdef CONFIG_RPS
Eric Dumazete36fa2f2010-04-19 21:17:14 +00006229 sd->csd.func = rps_trigger_softirq;
6230 sd->csd.info = sd;
6231 sd->csd.flags = 0;
6232 sd->cpu = i;
Tom Herbert1e94d722010-03-18 17:45:44 -07006233#endif
Tom Herbert0a9627f2010-03-16 08:03:29 +00006234
Eric Dumazete36fa2f2010-04-19 21:17:14 +00006235 sd->backlog.poll = process_backlog;
6236 sd->backlog.weight = weight_p;
6237 sd->backlog.gro_list = NULL;
6238 sd->backlog.gro_count = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -07006239 }
6240
Linus Torvalds1da177e2005-04-16 15:20:36 -07006241 dev_boot_phase = 0;
6242
Eric W. Biederman505d4f72008-11-07 22:54:20 -08006243 /* The loopback device is special if any other network devices
6244 * is present in a network namespace the loopback device must
6245 * be present. Since we now dynamically allocate and free the
6246 * loopback device ensure this invariant is maintained by
6247 * keeping the loopback device as the first device on the
6248 * list of network devices. Ensuring the loopback devices
6249 * is the first device that appears and the last network device
6250 * that disappears.
6251 */
6252 if (register_pernet_device(&loopback_net_ops))
6253 goto out;
6254
6255 if (register_pernet_device(&default_device_ops))
6256 goto out;
6257
Carlos R. Mafra962cf362008-05-15 11:15:37 -03006258 open_softirq(NET_TX_SOFTIRQ, net_tx_action);
6259 open_softirq(NET_RX_SOFTIRQ, net_rx_action);
Linus Torvalds1da177e2005-04-16 15:20:36 -07006260
6261 hotcpu_notifier(dev_cpu_callback, 0);
6262 dst_init();
6263 dev_mcast_init();
6264 rc = 0;
6265out:
6266 return rc;
6267}
6268
6269subsys_initcall(net_dev_init);