]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - net/core/pktgen.c
net-timestamp: Make the clone operation stand-alone from phy timestamping
[karo-tx-linux.git] / net / core / pktgen.c
1 /*
2  * Authors:
3  * Copyright 2001, 2002 by Robert Olsson <robert.olsson@its.uu.se>
4  *                             Uppsala University and
5  *                             Swedish University of Agricultural Sciences
6  *
7  * Alexey Kuznetsov  <kuznet@ms2.inr.ac.ru>
8  * Ben Greear <greearb@candelatech.com>
9  * Jens Låås <jens.laas@data.slu.se>
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version
14  * 2 of the License, or (at your option) any later version.
15  *
16  *
17  * A tool for loading the network with preconfigurated packets.
18  * The tool is implemented as a linux module.  Parameters are output
19  * device, delay (to hard_xmit), number of packets, and whether
20  * to use multiple SKBs or just the same one.
21  * pktgen uses the installed interface's output routine.
22  *
23  * Additional hacking by:
24  *
25  * Jens.Laas@data.slu.se
26  * Improved by ANK. 010120.
27  * Improved by ANK even more. 010212.
28  * MAC address typo fixed. 010417 --ro
29  * Integrated.  020301 --DaveM
30  * Added multiskb option 020301 --DaveM
31  * Scaling of results. 020417--sigurdur@linpro.no
32  * Significant re-work of the module:
33  *   *  Convert to threaded model to more efficiently be able to transmit
34  *       and receive on multiple interfaces at once.
35  *   *  Converted many counters to __u64 to allow longer runs.
36  *   *  Allow configuration of ranges, like min/max IP address, MACs,
37  *       and UDP-ports, for both source and destination, and can
38  *       set to use a random distribution or sequentially walk the range.
39  *   *  Can now change most values after starting.
40  *   *  Place 12-byte packet in UDP payload with magic number,
41  *       sequence number, and timestamp.
42  *   *  Add receiver code that detects dropped pkts, re-ordered pkts, and
43  *       latencies (with micro-second) precision.
44  *   *  Add IOCTL interface to easily get counters & configuration.
45  *   --Ben Greear <greearb@candelatech.com>
46  *
47  * Renamed multiskb to clone_skb and cleaned up sending core for two distinct
48  * skb modes. A clone_skb=0 mode for Ben "ranges" work and a clone_skb != 0
49  * as a "fastpath" with a configurable number of clones after alloc's.
50  * clone_skb=0 means all packets are allocated this also means ranges time
51  * stamps etc can be used. clone_skb=100 means 1 malloc is followed by 100
52  * clones.
53  *
54  * Also moved to /proc/net/pktgen/
55  * --ro
56  *
57  * Sept 10:  Fixed threading/locking.  Lots of bone-headed and more clever
58  *    mistakes.  Also merged in DaveM's patch in the -pre6 patch.
59  * --Ben Greear <greearb@candelatech.com>
60  *
61  * Integrated to 2.5.x 021029 --Lucio Maciel (luciomaciel@zipmail.com.br)
62  *
63  *
64  * 021124 Finished major redesign and rewrite for new functionality.
65  * See Documentation/networking/pktgen.txt for how to use this.
66  *
67  * The new operation:
68  * For each CPU one thread/process is created at start. This process checks
69  * for running devices in the if_list and sends packets until count is 0 it
70  * also the thread checks the thread->control which is used for inter-process
71  * communication. controlling process "posts" operations to the threads this
72  * way.
73  * The if_list is RCU protected, and the if_lock remains to protect updating
74  * of if_list, from "add_device" as it invoked from userspace (via proc write).
75  *
76  * By design there should only be *one* "controlling" process. In practice
77  * multiple write accesses gives unpredictable result. Understood by "write"
78  * to /proc gives result code thats should be read be the "writer".
79  * For practical use this should be no problem.
80  *
81  * Note when adding devices to a specific CPU there good idea to also assign
82  * /proc/irq/XX/smp_affinity so TX-interrupts gets bound to the same CPU.
83  * --ro
84  *
85  * Fix refcount off by one if first packet fails, potential null deref,
86  * memleak 030710- KJP
87  *
88  * First "ranges" functionality for ipv6 030726 --ro
89  *
90  * Included flow support. 030802 ANK.
91  *
92  * Fixed unaligned access on IA-64 Grant Grundler <grundler@parisc-linux.org>
93  *
94  * Remove if fix from added Harald Welte <laforge@netfilter.org> 040419
95  * ia64 compilation fix from  Aron Griffis <aron@hp.com> 040604
96  *
97  * New xmit() return, do_div and misc clean up by Stephen Hemminger
98  * <shemminger@osdl.org> 040923
99  *
100  * Randy Dunlap fixed u64 printk compiler waring
101  *
102  * Remove FCS from BW calculation.  Lennert Buytenhek <buytenh@wantstofly.org>
103  * New time handling. Lennert Buytenhek <buytenh@wantstofly.org> 041213
104  *
105  * Corrections from Nikolai Malykh (nmalykh@bilim.com)
106  * Removed unused flags F_SET_SRCMAC & F_SET_SRCIP 041230
107  *
108  * interruptible_sleep_on_timeout() replaced Nishanth Aravamudan <nacc@us.ibm.com>
109  * 050103
110  *
111  * MPLS support by Steven Whitehouse <steve@chygwyn.com>
112  *
113  * 802.1Q/Q-in-Q support by Francesco Fondelli (FF) <francesco.fondelli@gmail.com>
114  *
115  * Fixed src_mac command to set source mac of packet to value specified in
116  * command by Adit Ranadive <adit.262@gmail.com>
117  *
118  */
119
120 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
121
122 #include <linux/sys.h>
123 #include <linux/types.h>
124 #include <linux/module.h>
125 #include <linux/moduleparam.h>
126 #include <linux/kernel.h>
127 #include <linux/mutex.h>
128 #include <linux/sched.h>
129 #include <linux/slab.h>
130 #include <linux/vmalloc.h>
131 #include <linux/unistd.h>
132 #include <linux/string.h>
133 #include <linux/ptrace.h>
134 #include <linux/errno.h>
135 #include <linux/ioport.h>
136 #include <linux/interrupt.h>
137 #include <linux/capability.h>
138 #include <linux/hrtimer.h>
139 #include <linux/freezer.h>
140 #include <linux/delay.h>
141 #include <linux/timer.h>
142 #include <linux/list.h>
143 #include <linux/init.h>
144 #include <linux/skbuff.h>
145 #include <linux/netdevice.h>
146 #include <linux/inet.h>
147 #include <linux/inetdevice.h>
148 #include <linux/rtnetlink.h>
149 #include <linux/if_arp.h>
150 #include <linux/if_vlan.h>
151 #include <linux/in.h>
152 #include <linux/ip.h>
153 #include <linux/ipv6.h>
154 #include <linux/udp.h>
155 #include <linux/proc_fs.h>
156 #include <linux/seq_file.h>
157 #include <linux/wait.h>
158 #include <linux/etherdevice.h>
159 #include <linux/kthread.h>
160 #include <linux/prefetch.h>
161 #include <net/net_namespace.h>
162 #include <net/checksum.h>
163 #include <net/ipv6.h>
164 #include <net/udp.h>
165 #include <net/ip6_checksum.h>
166 #include <net/addrconf.h>
167 #ifdef CONFIG_XFRM
168 #include <net/xfrm.h>
169 #endif
170 #include <net/netns/generic.h>
171 #include <asm/byteorder.h>
172 #include <linux/rcupdate.h>
173 #include <linux/bitops.h>
174 #include <linux/io.h>
175 #include <linux/timex.h>
176 #include <linux/uaccess.h>
177 #include <asm/dma.h>
178 #include <asm/div64.h>          /* do_div */
179
180 #define VERSION "2.74"
181 #define IP_NAME_SZ 32
182 #define MAX_MPLS_LABELS 16 /* This is the max label stack depth */
183 #define MPLS_STACK_BOTTOM htonl(0x00000100)
184
185 #define func_enter() pr_debug("entering %s\n", __func__);
186
187 /* Device flag bits */
188 #define F_IPSRC_RND   (1<<0)    /* IP-Src Random  */
189 #define F_IPDST_RND   (1<<1)    /* IP-Dst Random  */
190 #define F_UDPSRC_RND  (1<<2)    /* UDP-Src Random */
191 #define F_UDPDST_RND  (1<<3)    /* UDP-Dst Random */
192 #define F_MACSRC_RND  (1<<4)    /* MAC-Src Random */
193 #define F_MACDST_RND  (1<<5)    /* MAC-Dst Random */
194 #define F_TXSIZE_RND  (1<<6)    /* Transmit size is random */
195 #define F_IPV6        (1<<7)    /* Interface in IPV6 Mode */
196 #define F_MPLS_RND    (1<<8)    /* Random MPLS labels */
197 #define F_VID_RND     (1<<9)    /* Random VLAN ID */
198 #define F_SVID_RND    (1<<10)   /* Random SVLAN ID */
199 #define F_FLOW_SEQ    (1<<11)   /* Sequential flows */
200 #define F_IPSEC_ON    (1<<12)   /* ipsec on for flows */
201 #define F_QUEUE_MAP_RND (1<<13) /* queue map Random */
202 #define F_QUEUE_MAP_CPU (1<<14) /* queue map mirrors smp_processor_id() */
203 #define F_NODE          (1<<15) /* Node memory alloc*/
204 #define F_UDPCSUM       (1<<16) /* Include UDP checksum */
205 #define F_NO_TIMESTAMP  (1<<17) /* Don't timestamp packets (default TS) */
206
207 /* Thread control flag bits */
208 #define T_STOP        (1<<0)    /* Stop run */
209 #define T_RUN         (1<<1)    /* Start run */
210 #define T_REMDEVALL   (1<<2)    /* Remove all devs */
211 #define T_REMDEV      (1<<3)    /* Remove one dev */
212
213 /* If lock -- protects updating of if_list */
214 #define   if_lock(t)           spin_lock(&(t->if_lock));
215 #define   if_unlock(t)           spin_unlock(&(t->if_lock));
216
217 /* Used to help with determining the pkts on receive */
218 #define PKTGEN_MAGIC 0xbe9be955
219 #define PG_PROC_DIR "pktgen"
220 #define PGCTRL      "pgctrl"
221
222 #define MAX_CFLOWS  65536
223
224 #define VLAN_TAG_SIZE(x) ((x)->vlan_id == 0xffff ? 0 : 4)
225 #define SVLAN_TAG_SIZE(x) ((x)->svlan_id == 0xffff ? 0 : 4)
226
227 struct flow_state {
228         __be32 cur_daddr;
229         int count;
230 #ifdef CONFIG_XFRM
231         struct xfrm_state *x;
232 #endif
233         __u32 flags;
234 };
235
236 /* flow flag bits */
237 #define F_INIT   (1<<0)         /* flow has been initialized */
238
239 struct pktgen_dev {
240         /*
241          * Try to keep frequent/infrequent used vars. separated.
242          */
243         struct proc_dir_entry *entry;   /* proc file */
244         struct pktgen_thread *pg_thread;/* the owner */
245         struct list_head list;          /* chaining in the thread's run-queue */
246         struct rcu_head  rcu;           /* freed by RCU */
247
248         int running;            /* if false, the test will stop */
249
250         /* If min != max, then we will either do a linear iteration, or
251          * we will do a random selection from within the range.
252          */
253         __u32 flags;
254         int removal_mark;       /* non-zero => the device is marked for
255                                  * removal by worker thread */
256
257         int min_pkt_size;
258         int max_pkt_size;
259         int pkt_overhead;       /* overhead for MPLS, VLANs, IPSEC etc */
260         int nfrags;
261         struct page *page;
262         u64 delay;              /* nano-seconds */
263
264         __u64 count;            /* Default No packets to send */
265         __u64 sofar;            /* How many pkts we've sent so far */
266         __u64 tx_bytes;         /* How many bytes we've transmitted */
267         __u64 errors;           /* Errors when trying to transmit, */
268
269         /* runtime counters relating to clone_skb */
270
271         __u64 allocated_skbs;
272         __u32 clone_count;
273         int last_ok;            /* Was last skb sent?
274                                  * Or a failed transmit of some sort?
275                                  * This will keep sequence numbers in order
276                                  */
277         ktime_t next_tx;
278         ktime_t started_at;
279         ktime_t stopped_at;
280         u64     idle_acc;       /* nano-seconds */
281
282         __u32 seq_num;
283
284         int clone_skb;          /*
285                                  * Use multiple SKBs during packet gen.
286                                  * If this number is greater than 1, then
287                                  * that many copies of the same packet will be
288                                  * sent before a new packet is allocated.
289                                  * If you want to send 1024 identical packets
290                                  * before creating a new packet,
291                                  * set clone_skb to 1024.
292                                  */
293
294         char dst_min[IP_NAME_SZ];       /* IP, ie 1.2.3.4 */
295         char dst_max[IP_NAME_SZ];       /* IP, ie 1.2.3.4 */
296         char src_min[IP_NAME_SZ];       /* IP, ie 1.2.3.4 */
297         char src_max[IP_NAME_SZ];       /* IP, ie 1.2.3.4 */
298
299         struct in6_addr in6_saddr;
300         struct in6_addr in6_daddr;
301         struct in6_addr cur_in6_daddr;
302         struct in6_addr cur_in6_saddr;
303         /* For ranges */
304         struct in6_addr min_in6_daddr;
305         struct in6_addr max_in6_daddr;
306         struct in6_addr min_in6_saddr;
307         struct in6_addr max_in6_saddr;
308
309         /* If we're doing ranges, random or incremental, then this
310          * defines the min/max for those ranges.
311          */
312         __be32 saddr_min;       /* inclusive, source IP address */
313         __be32 saddr_max;       /* exclusive, source IP address */
314         __be32 daddr_min;       /* inclusive, dest IP address */
315         __be32 daddr_max;       /* exclusive, dest IP address */
316
317         __u16 udp_src_min;      /* inclusive, source UDP port */
318         __u16 udp_src_max;      /* exclusive, source UDP port */
319         __u16 udp_dst_min;      /* inclusive, dest UDP port */
320         __u16 udp_dst_max;      /* exclusive, dest UDP port */
321
322         /* DSCP + ECN */
323         __u8 tos;            /* six MSB of (former) IPv4 TOS
324                                 are for dscp codepoint */
325         __u8 traffic_class;  /* ditto for the (former) Traffic Class in IPv6
326                                 (see RFC 3260, sec. 4) */
327
328         /* MPLS */
329         unsigned int nr_labels; /* Depth of stack, 0 = no MPLS */
330         __be32 labels[MAX_MPLS_LABELS];
331
332         /* VLAN/SVLAN (802.1Q/Q-in-Q) */
333         __u8  vlan_p;
334         __u8  vlan_cfi;
335         __u16 vlan_id;  /* 0xffff means no vlan tag */
336
337         __u8  svlan_p;
338         __u8  svlan_cfi;
339         __u16 svlan_id; /* 0xffff means no svlan tag */
340
341         __u32 src_mac_count;    /* How many MACs to iterate through */
342         __u32 dst_mac_count;    /* How many MACs to iterate through */
343
344         unsigned char dst_mac[ETH_ALEN];
345         unsigned char src_mac[ETH_ALEN];
346
347         __u32 cur_dst_mac_offset;
348         __u32 cur_src_mac_offset;
349         __be32 cur_saddr;
350         __be32 cur_daddr;
351         __u16 ip_id;
352         __u16 cur_udp_dst;
353         __u16 cur_udp_src;
354         __u16 cur_queue_map;
355         __u32 cur_pkt_size;
356         __u32 last_pkt_size;
357
358         __u8 hh[14];
359         /* = {
360            0x00, 0x80, 0xC8, 0x79, 0xB3, 0xCB,
361
362            We fill in SRC address later
363            0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
364            0x08, 0x00
365            };
366          */
367         __u16 pad;              /* pad out the hh struct to an even 16 bytes */
368
369         struct sk_buff *skb;    /* skb we are to transmit next, used for when we
370                                  * are transmitting the same one multiple times
371                                  */
372         struct net_device *odev; /* The out-going device.
373                                   * Note that the device should have it's
374                                   * pg_info pointer pointing back to this
375                                   * device.
376                                   * Set when the user specifies the out-going
377                                   * device name (not when the inject is
378                                   * started as it used to do.)
379                                   */
380         char odevname[32];
381         struct flow_state *flows;
382         unsigned int cflows;    /* Concurrent flows (config) */
383         unsigned int lflow;             /* Flow length  (config) */
384         unsigned int nflows;    /* accumulated flows (stats) */
385         unsigned int curfl;             /* current sequenced flow (state)*/
386
387         u16 queue_map_min;
388         u16 queue_map_max;
389         __u32 skb_priority;     /* skb priority field */
390         int node;               /* Memory node */
391
392 #ifdef CONFIG_XFRM
393         __u8    ipsmode;                /* IPSEC mode (config) */
394         __u8    ipsproto;               /* IPSEC type (config) */
395         __u32   spi;
396         struct dst_entry dst;
397         struct dst_ops dstops;
398 #endif
399         char result[512];
400 };
401
402 struct pktgen_hdr {
403         __be32 pgh_magic;
404         __be32 seq_num;
405         __be32 tv_sec;
406         __be32 tv_usec;
407 };
408
409
410 static int pg_net_id __read_mostly;
411
412 struct pktgen_net {
413         struct net              *net;
414         struct proc_dir_entry   *proc_dir;
415         struct list_head        pktgen_threads;
416         bool                    pktgen_exiting;
417 };
418
419 struct pktgen_thread {
420         spinlock_t if_lock;             /* for list of devices */
421         struct list_head if_list;       /* All device here */
422         struct list_head th_list;
423         struct task_struct *tsk;
424         char result[512];
425
426         /* Field for thread to receive "posted" events terminate,
427            stop ifs etc. */
428
429         u32 control;
430         int cpu;
431
432         wait_queue_head_t queue;
433         struct completion start_done;
434         struct pktgen_net *net;
435 };
436
437 #define REMOVE 1
438 #define FIND   0
439
440 static const char version[] =
441         "Packet Generator for packet performance testing. "
442         "Version: " VERSION "\n";
443
444 static int pktgen_remove_device(struct pktgen_thread *t, struct pktgen_dev *i);
445 static int pktgen_add_device(struct pktgen_thread *t, const char *ifname);
446 static struct pktgen_dev *pktgen_find_dev(struct pktgen_thread *t,
447                                           const char *ifname, bool exact);
448 static int pktgen_device_event(struct notifier_block *, unsigned long, void *);
449 static void pktgen_run_all_threads(struct pktgen_net *pn);
450 static void pktgen_reset_all_threads(struct pktgen_net *pn);
451 static void pktgen_stop_all_threads_ifs(struct pktgen_net *pn);
452
453 static void pktgen_stop(struct pktgen_thread *t);
454 static void pktgen_clear_counters(struct pktgen_dev *pkt_dev);
455
456 /* Module parameters, defaults. */
457 static int pg_count_d __read_mostly = 1000;
458 static int pg_delay_d __read_mostly;
459 static int pg_clone_skb_d  __read_mostly;
460 static int debug  __read_mostly;
461
462 static DEFINE_MUTEX(pktgen_thread_lock);
463
464 static struct notifier_block pktgen_notifier_block = {
465         .notifier_call = pktgen_device_event,
466 };
467
468 /*
469  * /proc handling functions
470  *
471  */
472
473 static int pgctrl_show(struct seq_file *seq, void *v)
474 {
475         seq_puts(seq, version);
476         return 0;
477 }
478
479 static ssize_t pgctrl_write(struct file *file, const char __user *buf,
480                             size_t count, loff_t *ppos)
481 {
482         char data[128];
483         struct pktgen_net *pn = net_generic(current->nsproxy->net_ns, pg_net_id);
484
485         if (!capable(CAP_NET_ADMIN))
486                 return -EPERM;
487
488         if (count == 0)
489                 return -EINVAL;
490
491         if (count > sizeof(data))
492                 count = sizeof(data);
493
494         if (copy_from_user(data, buf, count))
495                 return -EFAULT;
496
497         data[count - 1] = 0;    /* Strip trailing '\n' and terminate string */
498
499         if (!strcmp(data, "stop"))
500                 pktgen_stop_all_threads_ifs(pn);
501
502         else if (!strcmp(data, "start"))
503                 pktgen_run_all_threads(pn);
504
505         else if (!strcmp(data, "reset"))
506                 pktgen_reset_all_threads(pn);
507
508         else
509                 pr_warning("Unknown command: %s\n", data);
510
511         return count;
512 }
513
514 static int pgctrl_open(struct inode *inode, struct file *file)
515 {
516         return single_open(file, pgctrl_show, PDE_DATA(inode));
517 }
518
519 static const struct file_operations pktgen_fops = {
520         .owner   = THIS_MODULE,
521         .open    = pgctrl_open,
522         .read    = seq_read,
523         .llseek  = seq_lseek,
524         .write   = pgctrl_write,
525         .release = single_release,
526 };
527
528 static int pktgen_if_show(struct seq_file *seq, void *v)
529 {
530         const struct pktgen_dev *pkt_dev = seq->private;
531         ktime_t stopped;
532         u64 idle;
533
534         seq_printf(seq,
535                    "Params: count %llu  min_pkt_size: %u  max_pkt_size: %u\n",
536                    (unsigned long long)pkt_dev->count, pkt_dev->min_pkt_size,
537                    pkt_dev->max_pkt_size);
538
539         seq_printf(seq,
540                    "     frags: %d  delay: %llu  clone_skb: %d  ifname: %s\n",
541                    pkt_dev->nfrags, (unsigned long long) pkt_dev->delay,
542                    pkt_dev->clone_skb, pkt_dev->odevname);
543
544         seq_printf(seq, "     flows: %u flowlen: %u\n", pkt_dev->cflows,
545                    pkt_dev->lflow);
546
547         seq_printf(seq,
548                    "     queue_map_min: %u  queue_map_max: %u\n",
549                    pkt_dev->queue_map_min,
550                    pkt_dev->queue_map_max);
551
552         if (pkt_dev->skb_priority)
553                 seq_printf(seq, "     skb_priority: %u\n",
554                            pkt_dev->skb_priority);
555
556         if (pkt_dev->flags & F_IPV6) {
557                 seq_printf(seq,
558                            "     saddr: %pI6c  min_saddr: %pI6c  max_saddr: %pI6c\n"
559                            "     daddr: %pI6c  min_daddr: %pI6c  max_daddr: %pI6c\n",
560                            &pkt_dev->in6_saddr,
561                            &pkt_dev->min_in6_saddr, &pkt_dev->max_in6_saddr,
562                            &pkt_dev->in6_daddr,
563                            &pkt_dev->min_in6_daddr, &pkt_dev->max_in6_daddr);
564         } else {
565                 seq_printf(seq,
566                            "     dst_min: %s  dst_max: %s\n",
567                            pkt_dev->dst_min, pkt_dev->dst_max);
568                 seq_printf(seq,
569                            "        src_min: %s  src_max: %s\n",
570                            pkt_dev->src_min, pkt_dev->src_max);
571         }
572
573         seq_puts(seq, "     src_mac: ");
574
575         seq_printf(seq, "%pM ",
576                    is_zero_ether_addr(pkt_dev->src_mac) ?
577                              pkt_dev->odev->dev_addr : pkt_dev->src_mac);
578
579         seq_puts(seq, "dst_mac: ");
580         seq_printf(seq, "%pM\n", pkt_dev->dst_mac);
581
582         seq_printf(seq,
583                    "     udp_src_min: %d  udp_src_max: %d"
584                    "  udp_dst_min: %d  udp_dst_max: %d\n",
585                    pkt_dev->udp_src_min, pkt_dev->udp_src_max,
586                    pkt_dev->udp_dst_min, pkt_dev->udp_dst_max);
587
588         seq_printf(seq,
589                    "     src_mac_count: %d  dst_mac_count: %d\n",
590                    pkt_dev->src_mac_count, pkt_dev->dst_mac_count);
591
592         if (pkt_dev->nr_labels) {
593                 unsigned int i;
594                 seq_puts(seq, "     mpls: ");
595                 for (i = 0; i < pkt_dev->nr_labels; i++)
596                         seq_printf(seq, "%08x%s", ntohl(pkt_dev->labels[i]),
597                                    i == pkt_dev->nr_labels-1 ? "\n" : ", ");
598         }
599
600         if (pkt_dev->vlan_id != 0xffff)
601                 seq_printf(seq, "     vlan_id: %u  vlan_p: %u  vlan_cfi: %u\n",
602                            pkt_dev->vlan_id, pkt_dev->vlan_p,
603                            pkt_dev->vlan_cfi);
604
605         if (pkt_dev->svlan_id != 0xffff)
606                 seq_printf(seq, "     svlan_id: %u  vlan_p: %u  vlan_cfi: %u\n",
607                            pkt_dev->svlan_id, pkt_dev->svlan_p,
608                            pkt_dev->svlan_cfi);
609
610         if (pkt_dev->tos)
611                 seq_printf(seq, "     tos: 0x%02x\n", pkt_dev->tos);
612
613         if (pkt_dev->traffic_class)
614                 seq_printf(seq, "     traffic_class: 0x%02x\n", pkt_dev->traffic_class);
615
616         if (pkt_dev->node >= 0)
617                 seq_printf(seq, "     node: %d\n", pkt_dev->node);
618
619         seq_puts(seq, "     Flags: ");
620
621         if (pkt_dev->flags & F_IPV6)
622                 seq_puts(seq, "IPV6  ");
623
624         if (pkt_dev->flags & F_IPSRC_RND)
625                 seq_puts(seq, "IPSRC_RND  ");
626
627         if (pkt_dev->flags & F_IPDST_RND)
628                 seq_puts(seq, "IPDST_RND  ");
629
630         if (pkt_dev->flags & F_TXSIZE_RND)
631                 seq_puts(seq, "TXSIZE_RND  ");
632
633         if (pkt_dev->flags & F_UDPSRC_RND)
634                 seq_puts(seq, "UDPSRC_RND  ");
635
636         if (pkt_dev->flags & F_UDPDST_RND)
637                 seq_puts(seq, "UDPDST_RND  ");
638
639         if (pkt_dev->flags & F_UDPCSUM)
640                 seq_puts(seq, "UDPCSUM  ");
641
642         if (pkt_dev->flags & F_NO_TIMESTAMP)
643                 seq_puts(seq, "NO_TIMESTAMP  ");
644
645         if (pkt_dev->flags & F_MPLS_RND)
646                 seq_puts(seq,  "MPLS_RND  ");
647
648         if (pkt_dev->flags & F_QUEUE_MAP_RND)
649                 seq_puts(seq,  "QUEUE_MAP_RND  ");
650
651         if (pkt_dev->flags & F_QUEUE_MAP_CPU)
652                 seq_puts(seq,  "QUEUE_MAP_CPU  ");
653
654         if (pkt_dev->cflows) {
655                 if (pkt_dev->flags & F_FLOW_SEQ)
656                         seq_puts(seq,  "FLOW_SEQ  "); /*in sequence flows*/
657                 else
658                         seq_puts(seq,  "FLOW_RND  ");
659         }
660
661 #ifdef CONFIG_XFRM
662         if (pkt_dev->flags & F_IPSEC_ON) {
663                 seq_puts(seq,  "IPSEC  ");
664                 if (pkt_dev->spi)
665                         seq_printf(seq, "spi:%u", pkt_dev->spi);
666         }
667 #endif
668
669         if (pkt_dev->flags & F_MACSRC_RND)
670                 seq_puts(seq, "MACSRC_RND  ");
671
672         if (pkt_dev->flags & F_MACDST_RND)
673                 seq_puts(seq, "MACDST_RND  ");
674
675         if (pkt_dev->flags & F_VID_RND)
676                 seq_puts(seq, "VID_RND  ");
677
678         if (pkt_dev->flags & F_SVID_RND)
679                 seq_puts(seq, "SVID_RND  ");
680
681         if (pkt_dev->flags & F_NODE)
682                 seq_puts(seq, "NODE_ALLOC  ");
683
684         seq_puts(seq, "\n");
685
686         /* not really stopped, more like last-running-at */
687         stopped = pkt_dev->running ? ktime_get() : pkt_dev->stopped_at;
688         idle = pkt_dev->idle_acc;
689         do_div(idle, NSEC_PER_USEC);
690
691         seq_printf(seq,
692                    "Current:\n     pkts-sofar: %llu  errors: %llu\n",
693                    (unsigned long long)pkt_dev->sofar,
694                    (unsigned long long)pkt_dev->errors);
695
696         seq_printf(seq,
697                    "     started: %lluus  stopped: %lluus idle: %lluus\n",
698                    (unsigned long long) ktime_to_us(pkt_dev->started_at),
699                    (unsigned long long) ktime_to_us(stopped),
700                    (unsigned long long) idle);
701
702         seq_printf(seq,
703                    "     seq_num: %d  cur_dst_mac_offset: %d  cur_src_mac_offset: %d\n",
704                    pkt_dev->seq_num, pkt_dev->cur_dst_mac_offset,
705                    pkt_dev->cur_src_mac_offset);
706
707         if (pkt_dev->flags & F_IPV6) {
708                 seq_printf(seq, "     cur_saddr: %pI6c  cur_daddr: %pI6c\n",
709                                 &pkt_dev->cur_in6_saddr,
710                                 &pkt_dev->cur_in6_daddr);
711         } else
712                 seq_printf(seq, "     cur_saddr: %pI4  cur_daddr: %pI4\n",
713                            &pkt_dev->cur_saddr, &pkt_dev->cur_daddr);
714
715         seq_printf(seq, "     cur_udp_dst: %d  cur_udp_src: %d\n",
716                    pkt_dev->cur_udp_dst, pkt_dev->cur_udp_src);
717
718         seq_printf(seq, "     cur_queue_map: %u\n", pkt_dev->cur_queue_map);
719
720         seq_printf(seq, "     flows: %u\n", pkt_dev->nflows);
721
722         if (pkt_dev->result[0])
723                 seq_printf(seq, "Result: %s\n", pkt_dev->result);
724         else
725                 seq_puts(seq, "Result: Idle\n");
726
727         return 0;
728 }
729
730
731 static int hex32_arg(const char __user *user_buffer, unsigned long maxlen,
732                      __u32 *num)
733 {
734         int i = 0;
735         *num = 0;
736
737         for (; i < maxlen; i++) {
738                 int value;
739                 char c;
740                 *num <<= 4;
741                 if (get_user(c, &user_buffer[i]))
742                         return -EFAULT;
743                 value = hex_to_bin(c);
744                 if (value >= 0)
745                         *num |= value;
746                 else
747                         break;
748         }
749         return i;
750 }
751
752 static int count_trail_chars(const char __user * user_buffer,
753                              unsigned int maxlen)
754 {
755         int i;
756
757         for (i = 0; i < maxlen; i++) {
758                 char c;
759                 if (get_user(c, &user_buffer[i]))
760                         return -EFAULT;
761                 switch (c) {
762                 case '\"':
763                 case '\n':
764                 case '\r':
765                 case '\t':
766                 case ' ':
767                 case '=':
768                         break;
769                 default:
770                         goto done;
771                 }
772         }
773 done:
774         return i;
775 }
776
777 static long num_arg(const char __user *user_buffer, unsigned long maxlen,
778                                 unsigned long *num)
779 {
780         int i;
781         *num = 0;
782
783         for (i = 0; i < maxlen; i++) {
784                 char c;
785                 if (get_user(c, &user_buffer[i]))
786                         return -EFAULT;
787                 if ((c >= '0') && (c <= '9')) {
788                         *num *= 10;
789                         *num += c - '0';
790                 } else
791                         break;
792         }
793         return i;
794 }
795
796 static int strn_len(const char __user * user_buffer, unsigned int maxlen)
797 {
798         int i;
799
800         for (i = 0; i < maxlen; i++) {
801                 char c;
802                 if (get_user(c, &user_buffer[i]))
803                         return -EFAULT;
804                 switch (c) {
805                 case '\"':
806                 case '\n':
807                 case '\r':
808                 case '\t':
809                 case ' ':
810                         goto done_str;
811                 default:
812                         break;
813                 }
814         }
815 done_str:
816         return i;
817 }
818
819 static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev)
820 {
821         unsigned int n = 0;
822         char c;
823         ssize_t i = 0;
824         int len;
825
826         pkt_dev->nr_labels = 0;
827         do {
828                 __u32 tmp;
829                 len = hex32_arg(&buffer[i], 8, &tmp);
830                 if (len <= 0)
831                         return len;
832                 pkt_dev->labels[n] = htonl(tmp);
833                 if (pkt_dev->labels[n] & MPLS_STACK_BOTTOM)
834                         pkt_dev->flags |= F_MPLS_RND;
835                 i += len;
836                 if (get_user(c, &buffer[i]))
837                         return -EFAULT;
838                 i++;
839                 n++;
840                 if (n >= MAX_MPLS_LABELS)
841                         return -E2BIG;
842         } while (c == ',');
843
844         pkt_dev->nr_labels = n;
845         return i;
846 }
847
848 static ssize_t pktgen_if_write(struct file *file,
849                                const char __user * user_buffer, size_t count,
850                                loff_t * offset)
851 {
852         struct seq_file *seq = file->private_data;
853         struct pktgen_dev *pkt_dev = seq->private;
854         int i, max, len;
855         char name[16], valstr[32];
856         unsigned long value = 0;
857         char *pg_result = NULL;
858         int tmp = 0;
859         char buf[128];
860
861         pg_result = &(pkt_dev->result[0]);
862
863         if (count < 1) {
864                 pr_warning("wrong command format\n");
865                 return -EINVAL;
866         }
867
868         max = count;
869         tmp = count_trail_chars(user_buffer, max);
870         if (tmp < 0) {
871                 pr_warning("illegal format\n");
872                 return tmp;
873         }
874         i = tmp;
875
876         /* Read variable name */
877
878         len = strn_len(&user_buffer[i], sizeof(name) - 1);
879         if (len < 0)
880                 return len;
881
882         memset(name, 0, sizeof(name));
883         if (copy_from_user(name, &user_buffer[i], len))
884                 return -EFAULT;
885         i += len;
886
887         max = count - i;
888         len = count_trail_chars(&user_buffer[i], max);
889         if (len < 0)
890                 return len;
891
892         i += len;
893
894         if (debug) {
895                 size_t copy = min_t(size_t, count, 1023);
896                 char tb[copy + 1];
897                 if (copy_from_user(tb, user_buffer, copy))
898                         return -EFAULT;
899                 tb[copy] = 0;
900                 pr_debug("%s,%lu  buffer -:%s:-\n",
901                          name, (unsigned long)count, tb);
902         }
903
904         if (!strcmp(name, "min_pkt_size")) {
905                 len = num_arg(&user_buffer[i], 10, &value);
906                 if (len < 0)
907                         return len;
908
909                 i += len;
910                 if (value < 14 + 20 + 8)
911                         value = 14 + 20 + 8;
912                 if (value != pkt_dev->min_pkt_size) {
913                         pkt_dev->min_pkt_size = value;
914                         pkt_dev->cur_pkt_size = value;
915                 }
916                 sprintf(pg_result, "OK: min_pkt_size=%u",
917                         pkt_dev->min_pkt_size);
918                 return count;
919         }
920
921         if (!strcmp(name, "max_pkt_size")) {
922                 len = num_arg(&user_buffer[i], 10, &value);
923                 if (len < 0)
924                         return len;
925
926                 i += len;
927                 if (value < 14 + 20 + 8)
928                         value = 14 + 20 + 8;
929                 if (value != pkt_dev->max_pkt_size) {
930                         pkt_dev->max_pkt_size = value;
931                         pkt_dev->cur_pkt_size = value;
932                 }
933                 sprintf(pg_result, "OK: max_pkt_size=%u",
934                         pkt_dev->max_pkt_size);
935                 return count;
936         }
937
938         /* Shortcut for min = max */
939
940         if (!strcmp(name, "pkt_size")) {
941                 len = num_arg(&user_buffer[i], 10, &value);
942                 if (len < 0)
943                         return len;
944
945                 i += len;
946                 if (value < 14 + 20 + 8)
947                         value = 14 + 20 + 8;
948                 if (value != pkt_dev->min_pkt_size) {
949                         pkt_dev->min_pkt_size = value;
950                         pkt_dev->max_pkt_size = value;
951                         pkt_dev->cur_pkt_size = value;
952                 }
953                 sprintf(pg_result, "OK: pkt_size=%u", pkt_dev->min_pkt_size);
954                 return count;
955         }
956
957         if (!strcmp(name, "debug")) {
958                 len = num_arg(&user_buffer[i], 10, &value);
959                 if (len < 0)
960                         return len;
961
962                 i += len;
963                 debug = value;
964                 sprintf(pg_result, "OK: debug=%u", debug);
965                 return count;
966         }
967
968         if (!strcmp(name, "frags")) {
969                 len = num_arg(&user_buffer[i], 10, &value);
970                 if (len < 0)
971                         return len;
972
973                 i += len;
974                 pkt_dev->nfrags = value;
975                 sprintf(pg_result, "OK: frags=%u", pkt_dev->nfrags);
976                 return count;
977         }
978         if (!strcmp(name, "delay")) {
979                 len = num_arg(&user_buffer[i], 10, &value);
980                 if (len < 0)
981                         return len;
982
983                 i += len;
984                 if (value == 0x7FFFFFFF)
985                         pkt_dev->delay = ULLONG_MAX;
986                 else
987                         pkt_dev->delay = (u64)value;
988
989                 sprintf(pg_result, "OK: delay=%llu",
990                         (unsigned long long) pkt_dev->delay);
991                 return count;
992         }
993         if (!strcmp(name, "rate")) {
994                 len = num_arg(&user_buffer[i], 10, &value);
995                 if (len < 0)
996                         return len;
997
998                 i += len;
999                 if (!value)
1000                         return len;
1001                 pkt_dev->delay = pkt_dev->min_pkt_size*8*NSEC_PER_USEC/value;
1002                 if (debug)
1003                         pr_info("Delay set at: %llu ns\n", pkt_dev->delay);
1004
1005                 sprintf(pg_result, "OK: rate=%lu", value);
1006                 return count;
1007         }
1008         if (!strcmp(name, "ratep")) {
1009                 len = num_arg(&user_buffer[i], 10, &value);
1010                 if (len < 0)
1011                         return len;
1012
1013                 i += len;
1014                 if (!value)
1015                         return len;
1016                 pkt_dev->delay = NSEC_PER_SEC/value;
1017                 if (debug)
1018                         pr_info("Delay set at: %llu ns\n", pkt_dev->delay);
1019
1020                 sprintf(pg_result, "OK: rate=%lu", value);
1021                 return count;
1022         }
1023         if (!strcmp(name, "udp_src_min")) {
1024                 len = num_arg(&user_buffer[i], 10, &value);
1025                 if (len < 0)
1026                         return len;
1027
1028                 i += len;
1029                 if (value != pkt_dev->udp_src_min) {
1030                         pkt_dev->udp_src_min = value;
1031                         pkt_dev->cur_udp_src = value;
1032                 }
1033                 sprintf(pg_result, "OK: udp_src_min=%u", pkt_dev->udp_src_min);
1034                 return count;
1035         }
1036         if (!strcmp(name, "udp_dst_min")) {
1037                 len = num_arg(&user_buffer[i], 10, &value);
1038                 if (len < 0)
1039                         return len;
1040
1041                 i += len;
1042                 if (value != pkt_dev->udp_dst_min) {
1043                         pkt_dev->udp_dst_min = value;
1044                         pkt_dev->cur_udp_dst = value;
1045                 }
1046                 sprintf(pg_result, "OK: udp_dst_min=%u", pkt_dev->udp_dst_min);
1047                 return count;
1048         }
1049         if (!strcmp(name, "udp_src_max")) {
1050                 len = num_arg(&user_buffer[i], 10, &value);
1051                 if (len < 0)
1052                         return len;
1053
1054                 i += len;
1055                 if (value != pkt_dev->udp_src_max) {
1056                         pkt_dev->udp_src_max = value;
1057                         pkt_dev->cur_udp_src = value;
1058                 }
1059                 sprintf(pg_result, "OK: udp_src_max=%u", pkt_dev->udp_src_max);
1060                 return count;
1061         }
1062         if (!strcmp(name, "udp_dst_max")) {
1063                 len = num_arg(&user_buffer[i], 10, &value);
1064                 if (len < 0)
1065                         return len;
1066
1067                 i += len;
1068                 if (value != pkt_dev->udp_dst_max) {
1069                         pkt_dev->udp_dst_max = value;
1070                         pkt_dev->cur_udp_dst = value;
1071                 }
1072                 sprintf(pg_result, "OK: udp_dst_max=%u", pkt_dev->udp_dst_max);
1073                 return count;
1074         }
1075         if (!strcmp(name, "clone_skb")) {
1076                 len = num_arg(&user_buffer[i], 10, &value);
1077                 if (len < 0)
1078                         return len;
1079                 if ((value > 0) &&
1080                     (!(pkt_dev->odev->priv_flags & IFF_TX_SKB_SHARING)))
1081                         return -ENOTSUPP;
1082                 i += len;
1083                 pkt_dev->clone_skb = value;
1084
1085                 sprintf(pg_result, "OK: clone_skb=%d", pkt_dev->clone_skb);
1086                 return count;
1087         }
1088         if (!strcmp(name, "count")) {
1089                 len = num_arg(&user_buffer[i], 10, &value);
1090                 if (len < 0)
1091                         return len;
1092
1093                 i += len;
1094                 pkt_dev->count = value;
1095                 sprintf(pg_result, "OK: count=%llu",
1096                         (unsigned long long)pkt_dev->count);
1097                 return count;
1098         }
1099         if (!strcmp(name, "src_mac_count")) {
1100                 len = num_arg(&user_buffer[i], 10, &value);
1101                 if (len < 0)
1102                         return len;
1103
1104                 i += len;
1105                 if (pkt_dev->src_mac_count != value) {
1106                         pkt_dev->src_mac_count = value;
1107                         pkt_dev->cur_src_mac_offset = 0;
1108                 }
1109                 sprintf(pg_result, "OK: src_mac_count=%d",
1110                         pkt_dev->src_mac_count);
1111                 return count;
1112         }
1113         if (!strcmp(name, "dst_mac_count")) {
1114                 len = num_arg(&user_buffer[i], 10, &value);
1115                 if (len < 0)
1116                         return len;
1117
1118                 i += len;
1119                 if (pkt_dev->dst_mac_count != value) {
1120                         pkt_dev->dst_mac_count = value;
1121                         pkt_dev->cur_dst_mac_offset = 0;
1122                 }
1123                 sprintf(pg_result, "OK: dst_mac_count=%d",
1124                         pkt_dev->dst_mac_count);
1125                 return count;
1126         }
1127         if (!strcmp(name, "node")) {
1128                 len = num_arg(&user_buffer[i], 10, &value);
1129                 if (len < 0)
1130                         return len;
1131
1132                 i += len;
1133
1134                 if (node_possible(value)) {
1135                         pkt_dev->node = value;
1136                         sprintf(pg_result, "OK: node=%d", pkt_dev->node);
1137                         if (pkt_dev->page) {
1138                                 put_page(pkt_dev->page);
1139                                 pkt_dev->page = NULL;
1140                         }
1141                 }
1142                 else
1143                         sprintf(pg_result, "ERROR: node not possible");
1144                 return count;
1145         }
1146         if (!strcmp(name, "flag")) {
1147                 char f[32];
1148                 memset(f, 0, 32);
1149                 len = strn_len(&user_buffer[i], sizeof(f) - 1);
1150                 if (len < 0)
1151                         return len;
1152
1153                 if (copy_from_user(f, &user_buffer[i], len))
1154                         return -EFAULT;
1155                 i += len;
1156                 if (strcmp(f, "IPSRC_RND") == 0)
1157                         pkt_dev->flags |= F_IPSRC_RND;
1158
1159                 else if (strcmp(f, "!IPSRC_RND") == 0)
1160                         pkt_dev->flags &= ~F_IPSRC_RND;
1161
1162                 else if (strcmp(f, "TXSIZE_RND") == 0)
1163                         pkt_dev->flags |= F_TXSIZE_RND;
1164
1165                 else if (strcmp(f, "!TXSIZE_RND") == 0)
1166                         pkt_dev->flags &= ~F_TXSIZE_RND;
1167
1168                 else if (strcmp(f, "IPDST_RND") == 0)
1169                         pkt_dev->flags |= F_IPDST_RND;
1170
1171                 else if (strcmp(f, "!IPDST_RND") == 0)
1172                         pkt_dev->flags &= ~F_IPDST_RND;
1173
1174                 else if (strcmp(f, "UDPSRC_RND") == 0)
1175                         pkt_dev->flags |= F_UDPSRC_RND;
1176
1177                 else if (strcmp(f, "!UDPSRC_RND") == 0)
1178                         pkt_dev->flags &= ~F_UDPSRC_RND;
1179
1180                 else if (strcmp(f, "UDPDST_RND") == 0)
1181                         pkt_dev->flags |= F_UDPDST_RND;
1182
1183                 else if (strcmp(f, "!UDPDST_RND") == 0)
1184                         pkt_dev->flags &= ~F_UDPDST_RND;
1185
1186                 else if (strcmp(f, "MACSRC_RND") == 0)
1187                         pkt_dev->flags |= F_MACSRC_RND;
1188
1189                 else if (strcmp(f, "!MACSRC_RND") == 0)
1190                         pkt_dev->flags &= ~F_MACSRC_RND;
1191
1192                 else if (strcmp(f, "MACDST_RND") == 0)
1193                         pkt_dev->flags |= F_MACDST_RND;
1194
1195                 else if (strcmp(f, "!MACDST_RND") == 0)
1196                         pkt_dev->flags &= ~F_MACDST_RND;
1197
1198                 else if (strcmp(f, "MPLS_RND") == 0)
1199                         pkt_dev->flags |= F_MPLS_RND;
1200
1201                 else if (strcmp(f, "!MPLS_RND") == 0)
1202                         pkt_dev->flags &= ~F_MPLS_RND;
1203
1204                 else if (strcmp(f, "VID_RND") == 0)
1205                         pkt_dev->flags |= F_VID_RND;
1206
1207                 else if (strcmp(f, "!VID_RND") == 0)
1208                         pkt_dev->flags &= ~F_VID_RND;
1209
1210                 else if (strcmp(f, "SVID_RND") == 0)
1211                         pkt_dev->flags |= F_SVID_RND;
1212
1213                 else if (strcmp(f, "!SVID_RND") == 0)
1214                         pkt_dev->flags &= ~F_SVID_RND;
1215
1216                 else if (strcmp(f, "FLOW_SEQ") == 0)
1217                         pkt_dev->flags |= F_FLOW_SEQ;
1218
1219                 else if (strcmp(f, "QUEUE_MAP_RND") == 0)
1220                         pkt_dev->flags |= F_QUEUE_MAP_RND;
1221
1222                 else if (strcmp(f, "!QUEUE_MAP_RND") == 0)
1223                         pkt_dev->flags &= ~F_QUEUE_MAP_RND;
1224
1225                 else if (strcmp(f, "QUEUE_MAP_CPU") == 0)
1226                         pkt_dev->flags |= F_QUEUE_MAP_CPU;
1227
1228                 else if (strcmp(f, "!QUEUE_MAP_CPU") == 0)
1229                         pkt_dev->flags &= ~F_QUEUE_MAP_CPU;
1230 #ifdef CONFIG_XFRM
1231                 else if (strcmp(f, "IPSEC") == 0)
1232                         pkt_dev->flags |= F_IPSEC_ON;
1233 #endif
1234
1235                 else if (strcmp(f, "!IPV6") == 0)
1236                         pkt_dev->flags &= ~F_IPV6;
1237
1238                 else if (strcmp(f, "NODE_ALLOC") == 0)
1239                         pkt_dev->flags |= F_NODE;
1240
1241                 else if (strcmp(f, "!NODE_ALLOC") == 0)
1242                         pkt_dev->flags &= ~F_NODE;
1243
1244                 else if (strcmp(f, "UDPCSUM") == 0)
1245                         pkt_dev->flags |= F_UDPCSUM;
1246
1247                 else if (strcmp(f, "!UDPCSUM") == 0)
1248                         pkt_dev->flags &= ~F_UDPCSUM;
1249
1250                 else if (strcmp(f, "NO_TIMESTAMP") == 0)
1251                         pkt_dev->flags |= F_NO_TIMESTAMP;
1252
1253                 else {
1254                         sprintf(pg_result,
1255                                 "Flag -:%s:- unknown\nAvailable flags, (prepend ! to un-set flag):\n%s",
1256                                 f,
1257                                 "IPSRC_RND, IPDST_RND, UDPSRC_RND, UDPDST_RND, "
1258                                 "MACSRC_RND, MACDST_RND, TXSIZE_RND, IPV6, "
1259                                 "MPLS_RND, VID_RND, SVID_RND, FLOW_SEQ, "
1260                                 "QUEUE_MAP_RND, QUEUE_MAP_CPU, UDPCSUM, "
1261                                 "NO_TIMESTAMP, "
1262 #ifdef CONFIG_XFRM
1263                                 "IPSEC, "
1264 #endif
1265                                 "NODE_ALLOC\n");
1266                         return count;
1267                 }
1268                 sprintf(pg_result, "OK: flags=0x%x", pkt_dev->flags);
1269                 return count;
1270         }
1271         if (!strcmp(name, "dst_min") || !strcmp(name, "dst")) {
1272                 len = strn_len(&user_buffer[i], sizeof(pkt_dev->dst_min) - 1);
1273                 if (len < 0)
1274                         return len;
1275
1276                 if (copy_from_user(buf, &user_buffer[i], len))
1277                         return -EFAULT;
1278                 buf[len] = 0;
1279                 if (strcmp(buf, pkt_dev->dst_min) != 0) {
1280                         memset(pkt_dev->dst_min, 0, sizeof(pkt_dev->dst_min));
1281                         strncpy(pkt_dev->dst_min, buf, len);
1282                         pkt_dev->daddr_min = in_aton(pkt_dev->dst_min);
1283                         pkt_dev->cur_daddr = pkt_dev->daddr_min;
1284                 }
1285                 if (debug)
1286                         pr_debug("dst_min set to: %s\n", pkt_dev->dst_min);
1287                 i += len;
1288                 sprintf(pg_result, "OK: dst_min=%s", pkt_dev->dst_min);
1289                 return count;
1290         }
1291         if (!strcmp(name, "dst_max")) {
1292                 len = strn_len(&user_buffer[i], sizeof(pkt_dev->dst_max) - 1);
1293                 if (len < 0)
1294                         return len;
1295
1296
1297                 if (copy_from_user(buf, &user_buffer[i], len))
1298                         return -EFAULT;
1299
1300                 buf[len] = 0;
1301                 if (strcmp(buf, pkt_dev->dst_max) != 0) {
1302                         memset(pkt_dev->dst_max, 0, sizeof(pkt_dev->dst_max));
1303                         strncpy(pkt_dev->dst_max, buf, len);
1304                         pkt_dev->daddr_max = in_aton(pkt_dev->dst_max);
1305                         pkt_dev->cur_daddr = pkt_dev->daddr_max;
1306                 }
1307                 if (debug)
1308                         pr_debug("dst_max set to: %s\n", pkt_dev->dst_max);
1309                 i += len;
1310                 sprintf(pg_result, "OK: dst_max=%s", pkt_dev->dst_max);
1311                 return count;
1312         }
1313         if (!strcmp(name, "dst6")) {
1314                 len = strn_len(&user_buffer[i], sizeof(buf) - 1);
1315                 if (len < 0)
1316                         return len;
1317
1318                 pkt_dev->flags |= F_IPV6;
1319
1320                 if (copy_from_user(buf, &user_buffer[i], len))
1321                         return -EFAULT;
1322                 buf[len] = 0;
1323
1324                 in6_pton(buf, -1, pkt_dev->in6_daddr.s6_addr, -1, NULL);
1325                 snprintf(buf, sizeof(buf), "%pI6c", &pkt_dev->in6_daddr);
1326
1327                 pkt_dev->cur_in6_daddr = pkt_dev->in6_daddr;
1328
1329                 if (debug)
1330                         pr_debug("dst6 set to: %s\n", buf);
1331
1332                 i += len;
1333                 sprintf(pg_result, "OK: dst6=%s", buf);
1334                 return count;
1335         }
1336         if (!strcmp(name, "dst6_min")) {
1337                 len = strn_len(&user_buffer[i], sizeof(buf) - 1);
1338                 if (len < 0)
1339                         return len;
1340
1341                 pkt_dev->flags |= F_IPV6;
1342
1343                 if (copy_from_user(buf, &user_buffer[i], len))
1344                         return -EFAULT;
1345                 buf[len] = 0;
1346
1347                 in6_pton(buf, -1, pkt_dev->min_in6_daddr.s6_addr, -1, NULL);
1348                 snprintf(buf, sizeof(buf), "%pI6c", &pkt_dev->min_in6_daddr);
1349
1350                 pkt_dev->cur_in6_daddr = pkt_dev->min_in6_daddr;
1351                 if (debug)
1352                         pr_debug("dst6_min set to: %s\n", buf);
1353
1354                 i += len;
1355                 sprintf(pg_result, "OK: dst6_min=%s", buf);
1356                 return count;
1357         }
1358         if (!strcmp(name, "dst6_max")) {
1359                 len = strn_len(&user_buffer[i], sizeof(buf) - 1);
1360                 if (len < 0)
1361                         return len;
1362
1363                 pkt_dev->flags |= F_IPV6;
1364
1365                 if (copy_from_user(buf, &user_buffer[i], len))
1366                         return -EFAULT;
1367                 buf[len] = 0;
1368
1369                 in6_pton(buf, -1, pkt_dev->max_in6_daddr.s6_addr, -1, NULL);
1370                 snprintf(buf, sizeof(buf), "%pI6c", &pkt_dev->max_in6_daddr);
1371
1372                 if (debug)
1373                         pr_debug("dst6_max set to: %s\n", buf);
1374
1375                 i += len;
1376                 sprintf(pg_result, "OK: dst6_max=%s", buf);
1377                 return count;
1378         }
1379         if (!strcmp(name, "src6")) {
1380                 len = strn_len(&user_buffer[i], sizeof(buf) - 1);
1381                 if (len < 0)
1382                         return len;
1383
1384                 pkt_dev->flags |= F_IPV6;
1385
1386                 if (copy_from_user(buf, &user_buffer[i], len))
1387                         return -EFAULT;
1388                 buf[len] = 0;
1389
1390                 in6_pton(buf, -1, pkt_dev->in6_saddr.s6_addr, -1, NULL);
1391                 snprintf(buf, sizeof(buf), "%pI6c", &pkt_dev->in6_saddr);
1392
1393                 pkt_dev->cur_in6_saddr = pkt_dev->in6_saddr;
1394
1395                 if (debug)
1396                         pr_debug("src6 set to: %s\n", buf);
1397
1398                 i += len;
1399                 sprintf(pg_result, "OK: src6=%s", buf);
1400                 return count;
1401         }
1402         if (!strcmp(name, "src_min")) {
1403                 len = strn_len(&user_buffer[i], sizeof(pkt_dev->src_min) - 1);
1404                 if (len < 0)
1405                         return len;
1406
1407                 if (copy_from_user(buf, &user_buffer[i], len))
1408                         return -EFAULT;
1409                 buf[len] = 0;
1410                 if (strcmp(buf, pkt_dev->src_min) != 0) {
1411                         memset(pkt_dev->src_min, 0, sizeof(pkt_dev->src_min));
1412                         strncpy(pkt_dev->src_min, buf, len);
1413                         pkt_dev->saddr_min = in_aton(pkt_dev->src_min);
1414                         pkt_dev->cur_saddr = pkt_dev->saddr_min;
1415                 }
1416                 if (debug)
1417                         pr_debug("src_min set to: %s\n", pkt_dev->src_min);
1418                 i += len;
1419                 sprintf(pg_result, "OK: src_min=%s", pkt_dev->src_min);
1420                 return count;
1421         }
1422         if (!strcmp(name, "src_max")) {
1423                 len = strn_len(&user_buffer[i], sizeof(pkt_dev->src_max) - 1);
1424                 if (len < 0)
1425                         return len;
1426
1427                 if (copy_from_user(buf, &user_buffer[i], len))
1428                         return -EFAULT;
1429                 buf[len] = 0;
1430                 if (strcmp(buf, pkt_dev->src_max) != 0) {
1431                         memset(pkt_dev->src_max, 0, sizeof(pkt_dev->src_max));
1432                         strncpy(pkt_dev->src_max, buf, len);
1433                         pkt_dev->saddr_max = in_aton(pkt_dev->src_max);
1434                         pkt_dev->cur_saddr = pkt_dev->saddr_max;
1435                 }
1436                 if (debug)
1437                         pr_debug("src_max set to: %s\n", pkt_dev->src_max);
1438                 i += len;
1439                 sprintf(pg_result, "OK: src_max=%s", pkt_dev->src_max);
1440                 return count;
1441         }
1442         if (!strcmp(name, "dst_mac")) {
1443                 len = strn_len(&user_buffer[i], sizeof(valstr) - 1);
1444                 if (len < 0)
1445                         return len;
1446
1447                 memset(valstr, 0, sizeof(valstr));
1448                 if (copy_from_user(valstr, &user_buffer[i], len))
1449                         return -EFAULT;
1450
1451                 if (!mac_pton(valstr, pkt_dev->dst_mac))
1452                         return -EINVAL;
1453                 /* Set up Dest MAC */
1454                 ether_addr_copy(&pkt_dev->hh[0], pkt_dev->dst_mac);
1455
1456                 sprintf(pg_result, "OK: dstmac %pM", pkt_dev->dst_mac);
1457                 return count;
1458         }
1459         if (!strcmp(name, "src_mac")) {
1460                 len = strn_len(&user_buffer[i], sizeof(valstr) - 1);
1461                 if (len < 0)
1462                         return len;
1463
1464                 memset(valstr, 0, sizeof(valstr));
1465                 if (copy_from_user(valstr, &user_buffer[i], len))
1466                         return -EFAULT;
1467
1468                 if (!mac_pton(valstr, pkt_dev->src_mac))
1469                         return -EINVAL;
1470                 /* Set up Src MAC */
1471                 ether_addr_copy(&pkt_dev->hh[6], pkt_dev->src_mac);
1472
1473                 sprintf(pg_result, "OK: srcmac %pM", pkt_dev->src_mac);
1474                 return count;
1475         }
1476
1477         if (!strcmp(name, "clear_counters")) {
1478                 pktgen_clear_counters(pkt_dev);
1479                 sprintf(pg_result, "OK: Clearing counters.\n");
1480                 return count;
1481         }
1482
1483         if (!strcmp(name, "flows")) {
1484                 len = num_arg(&user_buffer[i], 10, &value);
1485                 if (len < 0)
1486                         return len;
1487
1488                 i += len;
1489                 if (value > MAX_CFLOWS)
1490                         value = MAX_CFLOWS;
1491
1492                 pkt_dev->cflows = value;
1493                 sprintf(pg_result, "OK: flows=%u", pkt_dev->cflows);
1494                 return count;
1495         }
1496 #ifdef CONFIG_XFRM
1497         if (!strcmp(name, "spi")) {
1498                 len = num_arg(&user_buffer[i], 10, &value);
1499                 if (len < 0)
1500                         return len;
1501
1502                 i += len;
1503                 pkt_dev->spi = value;
1504                 sprintf(pg_result, "OK: spi=%u", pkt_dev->spi);
1505                 return count;
1506         }
1507 #endif
1508         if (!strcmp(name, "flowlen")) {
1509                 len = num_arg(&user_buffer[i], 10, &value);
1510                 if (len < 0)
1511                         return len;
1512
1513                 i += len;
1514                 pkt_dev->lflow = value;
1515                 sprintf(pg_result, "OK: flowlen=%u", pkt_dev->lflow);
1516                 return count;
1517         }
1518
1519         if (!strcmp(name, "queue_map_min")) {
1520                 len = num_arg(&user_buffer[i], 5, &value);
1521                 if (len < 0)
1522                         return len;
1523
1524                 i += len;
1525                 pkt_dev->queue_map_min = value;
1526                 sprintf(pg_result, "OK: queue_map_min=%u", pkt_dev->queue_map_min);
1527                 return count;
1528         }
1529
1530         if (!strcmp(name, "queue_map_max")) {
1531                 len = num_arg(&user_buffer[i], 5, &value);
1532                 if (len < 0)
1533                         return len;
1534
1535                 i += len;
1536                 pkt_dev->queue_map_max = value;
1537                 sprintf(pg_result, "OK: queue_map_max=%u", pkt_dev->queue_map_max);
1538                 return count;
1539         }
1540
1541         if (!strcmp(name, "mpls")) {
1542                 unsigned int n, cnt;
1543
1544                 len = get_labels(&user_buffer[i], pkt_dev);
1545                 if (len < 0)
1546                         return len;
1547                 i += len;
1548                 cnt = sprintf(pg_result, "OK: mpls=");
1549                 for (n = 0; n < pkt_dev->nr_labels; n++)
1550                         cnt += sprintf(pg_result + cnt,
1551                                        "%08x%s", ntohl(pkt_dev->labels[n]),
1552                                        n == pkt_dev->nr_labels-1 ? "" : ",");
1553
1554                 if (pkt_dev->nr_labels && pkt_dev->vlan_id != 0xffff) {
1555                         pkt_dev->vlan_id = 0xffff; /* turn off VLAN/SVLAN */
1556                         pkt_dev->svlan_id = 0xffff;
1557
1558                         if (debug)
1559                                 pr_debug("VLAN/SVLAN auto turned off\n");
1560                 }
1561                 return count;
1562         }
1563
1564         if (!strcmp(name, "vlan_id")) {
1565                 len = num_arg(&user_buffer[i], 4, &value);
1566                 if (len < 0)
1567                         return len;
1568
1569                 i += len;
1570                 if (value <= 4095) {
1571                         pkt_dev->vlan_id = value;  /* turn on VLAN */
1572
1573                         if (debug)
1574                                 pr_debug("VLAN turned on\n");
1575
1576                         if (debug && pkt_dev->nr_labels)
1577                                 pr_debug("MPLS auto turned off\n");
1578
1579                         pkt_dev->nr_labels = 0;    /* turn off MPLS */
1580                         sprintf(pg_result, "OK: vlan_id=%u", pkt_dev->vlan_id);
1581                 } else {
1582                         pkt_dev->vlan_id = 0xffff; /* turn off VLAN/SVLAN */
1583                         pkt_dev->svlan_id = 0xffff;
1584
1585                         if (debug)
1586                                 pr_debug("VLAN/SVLAN turned off\n");
1587                 }
1588                 return count;
1589         }
1590
1591         if (!strcmp(name, "vlan_p")) {
1592                 len = num_arg(&user_buffer[i], 1, &value);
1593                 if (len < 0)
1594                         return len;
1595
1596                 i += len;
1597                 if ((value <= 7) && (pkt_dev->vlan_id != 0xffff)) {
1598                         pkt_dev->vlan_p = value;
1599                         sprintf(pg_result, "OK: vlan_p=%u", pkt_dev->vlan_p);
1600                 } else {
1601                         sprintf(pg_result, "ERROR: vlan_p must be 0-7");
1602                 }
1603                 return count;
1604         }
1605
1606         if (!strcmp(name, "vlan_cfi")) {
1607                 len = num_arg(&user_buffer[i], 1, &value);
1608                 if (len < 0)
1609                         return len;
1610
1611                 i += len;
1612                 if ((value <= 1) && (pkt_dev->vlan_id != 0xffff)) {
1613                         pkt_dev->vlan_cfi = value;
1614                         sprintf(pg_result, "OK: vlan_cfi=%u", pkt_dev->vlan_cfi);
1615                 } else {
1616                         sprintf(pg_result, "ERROR: vlan_cfi must be 0-1");
1617                 }
1618                 return count;
1619         }
1620
1621         if (!strcmp(name, "svlan_id")) {
1622                 len = num_arg(&user_buffer[i], 4, &value);
1623                 if (len < 0)
1624                         return len;
1625
1626                 i += len;
1627                 if ((value <= 4095) && ((pkt_dev->vlan_id != 0xffff))) {
1628                         pkt_dev->svlan_id = value;  /* turn on SVLAN */
1629
1630                         if (debug)
1631                                 pr_debug("SVLAN turned on\n");
1632
1633                         if (debug && pkt_dev->nr_labels)
1634                                 pr_debug("MPLS auto turned off\n");
1635
1636                         pkt_dev->nr_labels = 0;    /* turn off MPLS */
1637                         sprintf(pg_result, "OK: svlan_id=%u", pkt_dev->svlan_id);
1638                 } else {
1639                         pkt_dev->vlan_id = 0xffff; /* turn off VLAN/SVLAN */
1640                         pkt_dev->svlan_id = 0xffff;
1641
1642                         if (debug)
1643                                 pr_debug("VLAN/SVLAN turned off\n");
1644                 }
1645                 return count;
1646         }
1647
1648         if (!strcmp(name, "svlan_p")) {
1649                 len = num_arg(&user_buffer[i], 1, &value);
1650                 if (len < 0)
1651                         return len;
1652
1653                 i += len;
1654                 if ((value <= 7) && (pkt_dev->svlan_id != 0xffff)) {
1655                         pkt_dev->svlan_p = value;
1656                         sprintf(pg_result, "OK: svlan_p=%u", pkt_dev->svlan_p);
1657                 } else {
1658                         sprintf(pg_result, "ERROR: svlan_p must be 0-7");
1659                 }
1660                 return count;
1661         }
1662
1663         if (!strcmp(name, "svlan_cfi")) {
1664                 len = num_arg(&user_buffer[i], 1, &value);
1665                 if (len < 0)
1666                         return len;
1667
1668                 i += len;
1669                 if ((value <= 1) && (pkt_dev->svlan_id != 0xffff)) {
1670                         pkt_dev->svlan_cfi = value;
1671                         sprintf(pg_result, "OK: svlan_cfi=%u", pkt_dev->svlan_cfi);
1672                 } else {
1673                         sprintf(pg_result, "ERROR: svlan_cfi must be 0-1");
1674                 }
1675                 return count;
1676         }
1677
1678         if (!strcmp(name, "tos")) {
1679                 __u32 tmp_value = 0;
1680                 len = hex32_arg(&user_buffer[i], 2, &tmp_value);
1681                 if (len < 0)
1682                         return len;
1683
1684                 i += len;
1685                 if (len == 2) {
1686                         pkt_dev->tos = tmp_value;
1687                         sprintf(pg_result, "OK: tos=0x%02x", pkt_dev->tos);
1688                 } else {
1689                         sprintf(pg_result, "ERROR: tos must be 00-ff");
1690                 }
1691                 return count;
1692         }
1693
1694         if (!strcmp(name, "traffic_class")) {
1695                 __u32 tmp_value = 0;
1696                 len = hex32_arg(&user_buffer[i], 2, &tmp_value);
1697                 if (len < 0)
1698                         return len;
1699
1700                 i += len;
1701                 if (len == 2) {
1702                         pkt_dev->traffic_class = tmp_value;
1703                         sprintf(pg_result, "OK: traffic_class=0x%02x", pkt_dev->traffic_class);
1704                 } else {
1705                         sprintf(pg_result, "ERROR: traffic_class must be 00-ff");
1706                 }
1707                 return count;
1708         }
1709
1710         if (!strcmp(name, "skb_priority")) {
1711                 len = num_arg(&user_buffer[i], 9, &value);
1712                 if (len < 0)
1713                         return len;
1714
1715                 i += len;
1716                 pkt_dev->skb_priority = value;
1717                 sprintf(pg_result, "OK: skb_priority=%i",
1718                         pkt_dev->skb_priority);
1719                 return count;
1720         }
1721
1722         sprintf(pkt_dev->result, "No such parameter \"%s\"", name);
1723         return -EINVAL;
1724 }
1725
1726 static int pktgen_if_open(struct inode *inode, struct file *file)
1727 {
1728         return single_open(file, pktgen_if_show, PDE_DATA(inode));
1729 }
1730
1731 static const struct file_operations pktgen_if_fops = {
1732         .owner   = THIS_MODULE,
1733         .open    = pktgen_if_open,
1734         .read    = seq_read,
1735         .llseek  = seq_lseek,
1736         .write   = pktgen_if_write,
1737         .release = single_release,
1738 };
1739
1740 static int pktgen_thread_show(struct seq_file *seq, void *v)
1741 {
1742         struct pktgen_thread *t = seq->private;
1743         const struct pktgen_dev *pkt_dev;
1744
1745         BUG_ON(!t);
1746
1747         seq_puts(seq, "Running: ");
1748
1749         rcu_read_lock();
1750         list_for_each_entry_rcu(pkt_dev, &t->if_list, list)
1751                 if (pkt_dev->running)
1752                         seq_printf(seq, "%s ", pkt_dev->odevname);
1753
1754         seq_puts(seq, "\nStopped: ");
1755
1756         list_for_each_entry_rcu(pkt_dev, &t->if_list, list)
1757                 if (!pkt_dev->running)
1758                         seq_printf(seq, "%s ", pkt_dev->odevname);
1759
1760         if (t->result[0])
1761                 seq_printf(seq, "\nResult: %s\n", t->result);
1762         else
1763                 seq_puts(seq, "\nResult: NA\n");
1764
1765         rcu_read_unlock();
1766
1767         return 0;
1768 }
1769
1770 static ssize_t pktgen_thread_write(struct file *file,
1771                                    const char __user * user_buffer,
1772                                    size_t count, loff_t * offset)
1773 {
1774         struct seq_file *seq = file->private_data;
1775         struct pktgen_thread *t = seq->private;
1776         int i, max, len, ret;
1777         char name[40];
1778         char *pg_result;
1779
1780         if (count < 1) {
1781                 //      sprintf(pg_result, "Wrong command format");
1782                 return -EINVAL;
1783         }
1784
1785         max = count;
1786         len = count_trail_chars(user_buffer, max);
1787         if (len < 0)
1788                 return len;
1789
1790         i = len;
1791
1792         /* Read variable name */
1793
1794         len = strn_len(&user_buffer[i], sizeof(name) - 1);
1795         if (len < 0)
1796                 return len;
1797
1798         memset(name, 0, sizeof(name));
1799         if (copy_from_user(name, &user_buffer[i], len))
1800                 return -EFAULT;
1801         i += len;
1802
1803         max = count - i;
1804         len = count_trail_chars(&user_buffer[i], max);
1805         if (len < 0)
1806                 return len;
1807
1808         i += len;
1809
1810         if (debug)
1811                 pr_debug("t=%s, count=%lu\n", name, (unsigned long)count);
1812
1813         if (!t) {
1814                 pr_err("ERROR: No thread\n");
1815                 ret = -EINVAL;
1816                 goto out;
1817         }
1818
1819         pg_result = &(t->result[0]);
1820
1821         if (!strcmp(name, "add_device")) {
1822                 char f[32];
1823                 memset(f, 0, 32);
1824                 len = strn_len(&user_buffer[i], sizeof(f) - 1);
1825                 if (len < 0) {
1826                         ret = len;
1827                         goto out;
1828                 }
1829                 if (copy_from_user(f, &user_buffer[i], len))
1830                         return -EFAULT;
1831                 i += len;
1832                 mutex_lock(&pktgen_thread_lock);
1833                 ret = pktgen_add_device(t, f);
1834                 mutex_unlock(&pktgen_thread_lock);
1835                 if (!ret) {
1836                         ret = count;
1837                         sprintf(pg_result, "OK: add_device=%s", f);
1838                 } else
1839                         sprintf(pg_result, "ERROR: can not add device %s", f);
1840                 goto out;
1841         }
1842
1843         if (!strcmp(name, "rem_device_all")) {
1844                 mutex_lock(&pktgen_thread_lock);
1845                 t->control |= T_REMDEVALL;
1846                 mutex_unlock(&pktgen_thread_lock);
1847                 schedule_timeout_interruptible(msecs_to_jiffies(125));  /* Propagate thread->control  */
1848                 ret = count;
1849                 sprintf(pg_result, "OK: rem_device_all");
1850                 goto out;
1851         }
1852
1853         if (!strcmp(name, "max_before_softirq")) {
1854                 sprintf(pg_result, "OK: Note! max_before_softirq is obsoleted -- Do not use");
1855                 ret = count;
1856                 goto out;
1857         }
1858
1859         ret = -EINVAL;
1860 out:
1861         return ret;
1862 }
1863
1864 static int pktgen_thread_open(struct inode *inode, struct file *file)
1865 {
1866         return single_open(file, pktgen_thread_show, PDE_DATA(inode));
1867 }
1868
1869 static const struct file_operations pktgen_thread_fops = {
1870         .owner   = THIS_MODULE,
1871         .open    = pktgen_thread_open,
1872         .read    = seq_read,
1873         .llseek  = seq_lseek,
1874         .write   = pktgen_thread_write,
1875         .release = single_release,
1876 };
1877
1878 /* Think find or remove for NN */
1879 static struct pktgen_dev *__pktgen_NN_threads(const struct pktgen_net *pn,
1880                                               const char *ifname, int remove)
1881 {
1882         struct pktgen_thread *t;
1883         struct pktgen_dev *pkt_dev = NULL;
1884         bool exact = (remove == FIND);
1885
1886         list_for_each_entry(t, &pn->pktgen_threads, th_list) {
1887                 pkt_dev = pktgen_find_dev(t, ifname, exact);
1888                 if (pkt_dev) {
1889                         if (remove) {
1890                                 pkt_dev->removal_mark = 1;
1891                                 t->control |= T_REMDEV;
1892                         }
1893                         break;
1894                 }
1895         }
1896         return pkt_dev;
1897 }
1898
1899 /*
1900  * mark a device for removal
1901  */
1902 static void pktgen_mark_device(const struct pktgen_net *pn, const char *ifname)
1903 {
1904         struct pktgen_dev *pkt_dev = NULL;
1905         const int max_tries = 10, msec_per_try = 125;
1906         int i = 0;
1907
1908         mutex_lock(&pktgen_thread_lock);
1909         pr_debug("%s: marking %s for removal\n", __func__, ifname);
1910
1911         while (1) {
1912
1913                 pkt_dev = __pktgen_NN_threads(pn, ifname, REMOVE);
1914                 if (pkt_dev == NULL)
1915                         break;  /* success */
1916
1917                 mutex_unlock(&pktgen_thread_lock);
1918                 pr_debug("%s: waiting for %s to disappear....\n",
1919                          __func__, ifname);
1920                 schedule_timeout_interruptible(msecs_to_jiffies(msec_per_try));
1921                 mutex_lock(&pktgen_thread_lock);
1922
1923                 if (++i >= max_tries) {
1924                         pr_err("%s: timed out after waiting %d msec for device %s to be removed\n",
1925                                __func__, msec_per_try * i, ifname);
1926                         break;
1927                 }
1928
1929         }
1930
1931         mutex_unlock(&pktgen_thread_lock);
1932 }
1933
1934 static void pktgen_change_name(const struct pktgen_net *pn, struct net_device *dev)
1935 {
1936         struct pktgen_thread *t;
1937
1938         list_for_each_entry(t, &pn->pktgen_threads, th_list) {
1939                 struct pktgen_dev *pkt_dev;
1940
1941                 rcu_read_lock();
1942                 list_for_each_entry_rcu(pkt_dev, &t->if_list, list) {
1943                         if (pkt_dev->odev != dev)
1944                                 continue;
1945
1946                         proc_remove(pkt_dev->entry);
1947
1948                         pkt_dev->entry = proc_create_data(dev->name, 0600,
1949                                                           pn->proc_dir,
1950                                                           &pktgen_if_fops,
1951                                                           pkt_dev);
1952                         if (!pkt_dev->entry)
1953                                 pr_err("can't move proc entry for '%s'\n",
1954                                        dev->name);
1955                         break;
1956                 }
1957                 rcu_read_unlock();
1958         }
1959 }
1960
1961 static int pktgen_device_event(struct notifier_block *unused,
1962                                unsigned long event, void *ptr)
1963 {
1964         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1965         struct pktgen_net *pn = net_generic(dev_net(dev), pg_net_id);
1966
1967         if (pn->pktgen_exiting)
1968                 return NOTIFY_DONE;
1969
1970         /* It is OK that we do not hold the group lock right now,
1971          * as we run under the RTNL lock.
1972          */
1973
1974         switch (event) {
1975         case NETDEV_CHANGENAME:
1976                 pktgen_change_name(pn, dev);
1977                 break;
1978
1979         case NETDEV_UNREGISTER:
1980                 pktgen_mark_device(pn, dev->name);
1981                 break;
1982         }
1983
1984         return NOTIFY_DONE;
1985 }
1986
1987 static struct net_device *pktgen_dev_get_by_name(const struct pktgen_net *pn,
1988                                                  struct pktgen_dev *pkt_dev,
1989                                                  const char *ifname)
1990 {
1991         char b[IFNAMSIZ+5];
1992         int i;
1993
1994         for (i = 0; ifname[i] != '@'; i++) {
1995                 if (i == IFNAMSIZ)
1996                         break;
1997
1998                 b[i] = ifname[i];
1999         }
2000         b[i] = 0;
2001
2002         return dev_get_by_name(pn->net, b);
2003 }
2004
2005
2006 /* Associate pktgen_dev with a device. */
2007
2008 static int pktgen_setup_dev(const struct pktgen_net *pn,
2009                             struct pktgen_dev *pkt_dev, const char *ifname)
2010 {
2011         struct net_device *odev;
2012         int err;
2013
2014         /* Clean old setups */
2015         if (pkt_dev->odev) {
2016                 dev_put(pkt_dev->odev);
2017                 pkt_dev->odev = NULL;
2018         }
2019
2020         odev = pktgen_dev_get_by_name(pn, pkt_dev, ifname);
2021         if (!odev) {
2022                 pr_err("no such netdevice: \"%s\"\n", ifname);
2023                 return -ENODEV;
2024         }
2025
2026         if (odev->type != ARPHRD_ETHER) {
2027                 pr_err("not an ethernet device: \"%s\"\n", ifname);
2028                 err = -EINVAL;
2029         } else if (!netif_running(odev)) {
2030                 pr_err("device is down: \"%s\"\n", ifname);
2031                 err = -ENETDOWN;
2032         } else {
2033                 pkt_dev->odev = odev;
2034                 return 0;
2035         }
2036
2037         dev_put(odev);
2038         return err;
2039 }
2040
2041 /* Read pkt_dev from the interface and set up internal pktgen_dev
2042  * structure to have the right information to create/send packets
2043  */
2044 static void pktgen_setup_inject(struct pktgen_dev *pkt_dev)
2045 {
2046         int ntxq;
2047
2048         if (!pkt_dev->odev) {
2049                 pr_err("ERROR: pkt_dev->odev == NULL in setup_inject\n");
2050                 sprintf(pkt_dev->result,
2051                         "ERROR: pkt_dev->odev == NULL in setup_inject.\n");
2052                 return;
2053         }
2054
2055         /* make sure that we don't pick a non-existing transmit queue */
2056         ntxq = pkt_dev->odev->real_num_tx_queues;
2057
2058         if (ntxq <= pkt_dev->queue_map_min) {
2059                 pr_warning("WARNING: Requested queue_map_min (zero-based) (%d) exceeds valid range [0 - %d] for (%d) queues on %s, resetting\n",
2060                            pkt_dev->queue_map_min, (ntxq ?: 1) - 1, ntxq,
2061                            pkt_dev->odevname);
2062                 pkt_dev->queue_map_min = (ntxq ?: 1) - 1;
2063         }
2064         if (pkt_dev->queue_map_max >= ntxq) {
2065                 pr_warning("WARNING: Requested queue_map_max (zero-based) (%d) exceeds valid range [0 - %d] for (%d) queues on %s, resetting\n",
2066                            pkt_dev->queue_map_max, (ntxq ?: 1) - 1, ntxq,
2067                            pkt_dev->odevname);
2068                 pkt_dev->queue_map_max = (ntxq ?: 1) - 1;
2069         }
2070
2071         /* Default to the interface's mac if not explicitly set. */
2072
2073         if (is_zero_ether_addr(pkt_dev->src_mac))
2074                 ether_addr_copy(&(pkt_dev->hh[6]), pkt_dev->odev->dev_addr);
2075
2076         /* Set up Dest MAC */
2077         ether_addr_copy(&(pkt_dev->hh[0]), pkt_dev->dst_mac);
2078
2079         if (pkt_dev->flags & F_IPV6) {
2080                 int i, set = 0, err = 1;
2081                 struct inet6_dev *idev;
2082
2083                 if (pkt_dev->min_pkt_size == 0) {
2084                         pkt_dev->min_pkt_size = 14 + sizeof(struct ipv6hdr)
2085                                                 + sizeof(struct udphdr)
2086                                                 + sizeof(struct pktgen_hdr)
2087                                                 + pkt_dev->pkt_overhead;
2088                 }
2089
2090                 for (i = 0; i < IN6_ADDR_HSIZE; i++)
2091                         if (pkt_dev->cur_in6_saddr.s6_addr[i]) {
2092                                 set = 1;
2093                                 break;
2094                         }
2095
2096                 if (!set) {
2097
2098                         /*
2099                          * Use linklevel address if unconfigured.
2100                          *
2101                          * use ipv6_get_lladdr if/when it's get exported
2102                          */
2103
2104                         rcu_read_lock();
2105                         idev = __in6_dev_get(pkt_dev->odev);
2106                         if (idev) {
2107                                 struct inet6_ifaddr *ifp;
2108
2109                                 read_lock_bh(&idev->lock);
2110                                 list_for_each_entry(ifp, &idev->addr_list, if_list) {
2111                                         if ((ifp->scope & IFA_LINK) &&
2112                                             !(ifp->flags & IFA_F_TENTATIVE)) {
2113                                                 pkt_dev->cur_in6_saddr = ifp->addr;
2114                                                 err = 0;
2115                                                 break;
2116                                         }
2117                                 }
2118                                 read_unlock_bh(&idev->lock);
2119                         }
2120                         rcu_read_unlock();
2121                         if (err)
2122                                 pr_err("ERROR: IPv6 link address not available\n");
2123                 }
2124         } else {
2125                 if (pkt_dev->min_pkt_size == 0) {
2126                         pkt_dev->min_pkt_size = 14 + sizeof(struct iphdr)
2127                                                 + sizeof(struct udphdr)
2128                                                 + sizeof(struct pktgen_hdr)
2129                                                 + pkt_dev->pkt_overhead;
2130                 }
2131
2132                 pkt_dev->saddr_min = 0;
2133                 pkt_dev->saddr_max = 0;
2134                 if (strlen(pkt_dev->src_min) == 0) {
2135
2136                         struct in_device *in_dev;
2137
2138                         rcu_read_lock();
2139                         in_dev = __in_dev_get_rcu(pkt_dev->odev);
2140                         if (in_dev) {
2141                                 if (in_dev->ifa_list) {
2142                                         pkt_dev->saddr_min =
2143                                             in_dev->ifa_list->ifa_address;
2144                                         pkt_dev->saddr_max = pkt_dev->saddr_min;
2145                                 }
2146                         }
2147                         rcu_read_unlock();
2148                 } else {
2149                         pkt_dev->saddr_min = in_aton(pkt_dev->src_min);
2150                         pkt_dev->saddr_max = in_aton(pkt_dev->src_max);
2151                 }
2152
2153                 pkt_dev->daddr_min = in_aton(pkt_dev->dst_min);
2154                 pkt_dev->daddr_max = in_aton(pkt_dev->dst_max);
2155         }
2156         /* Initialize current values. */
2157         pkt_dev->cur_pkt_size = pkt_dev->min_pkt_size;
2158         if (pkt_dev->min_pkt_size > pkt_dev->max_pkt_size)
2159                 pkt_dev->max_pkt_size = pkt_dev->min_pkt_size;
2160
2161         pkt_dev->cur_dst_mac_offset = 0;
2162         pkt_dev->cur_src_mac_offset = 0;
2163         pkt_dev->cur_saddr = pkt_dev->saddr_min;
2164         pkt_dev->cur_daddr = pkt_dev->daddr_min;
2165         pkt_dev->cur_udp_dst = pkt_dev->udp_dst_min;
2166         pkt_dev->cur_udp_src = pkt_dev->udp_src_min;
2167         pkt_dev->nflows = 0;
2168 }
2169
2170
2171 static void spin(struct pktgen_dev *pkt_dev, ktime_t spin_until)
2172 {
2173         ktime_t start_time, end_time;
2174         s64 remaining;
2175         struct hrtimer_sleeper t;
2176
2177         hrtimer_init_on_stack(&t.timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
2178         hrtimer_set_expires(&t.timer, spin_until);
2179
2180         remaining = ktime_to_ns(hrtimer_expires_remaining(&t.timer));
2181         if (remaining <= 0) {
2182                 pkt_dev->next_tx = ktime_add_ns(spin_until, pkt_dev->delay);
2183                 return;
2184         }
2185
2186         start_time = ktime_get();
2187         if (remaining < 100000) {
2188                 /* for small delays (<100us), just loop until limit is reached */
2189                 do {
2190                         end_time = ktime_get();
2191                 } while (ktime_compare(end_time, spin_until) < 0);
2192         } else {
2193                 /* see do_nanosleep */
2194                 hrtimer_init_sleeper(&t, current);
2195                 do {
2196                         set_current_state(TASK_INTERRUPTIBLE);
2197                         hrtimer_start_expires(&t.timer, HRTIMER_MODE_ABS);
2198                         if (!hrtimer_active(&t.timer))
2199                                 t.task = NULL;
2200
2201                         if (likely(t.task))
2202                                 schedule();
2203
2204                         hrtimer_cancel(&t.timer);
2205                 } while (t.task && pkt_dev->running && !signal_pending(current));
2206                 __set_current_state(TASK_RUNNING);
2207                 end_time = ktime_get();
2208         }
2209
2210         pkt_dev->idle_acc += ktime_to_ns(ktime_sub(end_time, start_time));
2211         pkt_dev->next_tx = ktime_add_ns(spin_until, pkt_dev->delay);
2212 }
2213
2214 static inline void set_pkt_overhead(struct pktgen_dev *pkt_dev)
2215 {
2216         pkt_dev->pkt_overhead = 0;
2217         pkt_dev->pkt_overhead += pkt_dev->nr_labels*sizeof(u32);
2218         pkt_dev->pkt_overhead += VLAN_TAG_SIZE(pkt_dev);
2219         pkt_dev->pkt_overhead += SVLAN_TAG_SIZE(pkt_dev);
2220 }
2221
2222 static inline int f_seen(const struct pktgen_dev *pkt_dev, int flow)
2223 {
2224         return !!(pkt_dev->flows[flow].flags & F_INIT);
2225 }
2226
2227 static inline int f_pick(struct pktgen_dev *pkt_dev)
2228 {
2229         int flow = pkt_dev->curfl;
2230
2231         if (pkt_dev->flags & F_FLOW_SEQ) {
2232                 if (pkt_dev->flows[flow].count >= pkt_dev->lflow) {
2233                         /* reset time */
2234                         pkt_dev->flows[flow].count = 0;
2235                         pkt_dev->flows[flow].flags = 0;
2236                         pkt_dev->curfl += 1;
2237                         if (pkt_dev->curfl >= pkt_dev->cflows)
2238                                 pkt_dev->curfl = 0; /*reset */
2239                 }
2240         } else {
2241                 flow = prandom_u32() % pkt_dev->cflows;
2242                 pkt_dev->curfl = flow;
2243
2244                 if (pkt_dev->flows[flow].count > pkt_dev->lflow) {
2245                         pkt_dev->flows[flow].count = 0;
2246                         pkt_dev->flows[flow].flags = 0;
2247                 }
2248         }
2249
2250         return pkt_dev->curfl;
2251 }
2252
2253
2254 #ifdef CONFIG_XFRM
2255 /* If there was already an IPSEC SA, we keep it as is, else
2256  * we go look for it ...
2257 */
2258 #define DUMMY_MARK 0
2259 static void get_ipsec_sa(struct pktgen_dev *pkt_dev, int flow)
2260 {
2261         struct xfrm_state *x = pkt_dev->flows[flow].x;
2262         struct pktgen_net *pn = net_generic(dev_net(pkt_dev->odev), pg_net_id);
2263         if (!x) {
2264
2265                 if (pkt_dev->spi) {
2266                         /* We need as quick as possible to find the right SA
2267                          * Searching with minimum criteria to archieve this.
2268                          */
2269                         x = xfrm_state_lookup_byspi(pn->net, htonl(pkt_dev->spi), AF_INET);
2270                 } else {
2271                         /* slow path: we dont already have xfrm_state */
2272                         x = xfrm_stateonly_find(pn->net, DUMMY_MARK,
2273                                                 (xfrm_address_t *)&pkt_dev->cur_daddr,
2274                                                 (xfrm_address_t *)&pkt_dev->cur_saddr,
2275                                                 AF_INET,
2276                                                 pkt_dev->ipsmode,
2277                                                 pkt_dev->ipsproto, 0);
2278                 }
2279                 if (x) {
2280                         pkt_dev->flows[flow].x = x;
2281                         set_pkt_overhead(pkt_dev);
2282                         pkt_dev->pkt_overhead += x->props.header_len;
2283                 }
2284
2285         }
2286 }
2287 #endif
2288 static void set_cur_queue_map(struct pktgen_dev *pkt_dev)
2289 {
2290
2291         if (pkt_dev->flags & F_QUEUE_MAP_CPU)
2292                 pkt_dev->cur_queue_map = smp_processor_id();
2293
2294         else if (pkt_dev->queue_map_min <= pkt_dev->queue_map_max) {
2295                 __u16 t;
2296                 if (pkt_dev->flags & F_QUEUE_MAP_RND) {
2297                         t = prandom_u32() %
2298                                 (pkt_dev->queue_map_max -
2299                                  pkt_dev->queue_map_min + 1)
2300                                 + pkt_dev->queue_map_min;
2301                 } else {
2302                         t = pkt_dev->cur_queue_map + 1;
2303                         if (t > pkt_dev->queue_map_max)
2304                                 t = pkt_dev->queue_map_min;
2305                 }
2306                 pkt_dev->cur_queue_map = t;
2307         }
2308         pkt_dev->cur_queue_map  = pkt_dev->cur_queue_map % pkt_dev->odev->real_num_tx_queues;
2309 }
2310
2311 /* Increment/randomize headers according to flags and current values
2312  * for IP src/dest, UDP src/dst port, MAC-Addr src/dst
2313  */
2314 static void mod_cur_headers(struct pktgen_dev *pkt_dev)
2315 {
2316         __u32 imn;
2317         __u32 imx;
2318         int flow = 0;
2319
2320         if (pkt_dev->cflows)
2321                 flow = f_pick(pkt_dev);
2322
2323         /*  Deal with source MAC */
2324         if (pkt_dev->src_mac_count > 1) {
2325                 __u32 mc;
2326                 __u32 tmp;
2327
2328                 if (pkt_dev->flags & F_MACSRC_RND)
2329                         mc = prandom_u32() % pkt_dev->src_mac_count;
2330                 else {
2331                         mc = pkt_dev->cur_src_mac_offset++;
2332                         if (pkt_dev->cur_src_mac_offset >=
2333                             pkt_dev->src_mac_count)
2334                                 pkt_dev->cur_src_mac_offset = 0;
2335                 }
2336
2337                 tmp = pkt_dev->src_mac[5] + (mc & 0xFF);
2338                 pkt_dev->hh[11] = tmp;
2339                 tmp = (pkt_dev->src_mac[4] + ((mc >> 8) & 0xFF) + (tmp >> 8));
2340                 pkt_dev->hh[10] = tmp;
2341                 tmp = (pkt_dev->src_mac[3] + ((mc >> 16) & 0xFF) + (tmp >> 8));
2342                 pkt_dev->hh[9] = tmp;
2343                 tmp = (pkt_dev->src_mac[2] + ((mc >> 24) & 0xFF) + (tmp >> 8));
2344                 pkt_dev->hh[8] = tmp;
2345                 tmp = (pkt_dev->src_mac[1] + (tmp >> 8));
2346                 pkt_dev->hh[7] = tmp;
2347         }
2348
2349         /*  Deal with Destination MAC */
2350         if (pkt_dev->dst_mac_count > 1) {
2351                 __u32 mc;
2352                 __u32 tmp;
2353
2354                 if (pkt_dev->flags & F_MACDST_RND)
2355                         mc = prandom_u32() % pkt_dev->dst_mac_count;
2356
2357                 else {
2358                         mc = pkt_dev->cur_dst_mac_offset++;
2359                         if (pkt_dev->cur_dst_mac_offset >=
2360                             pkt_dev->dst_mac_count) {
2361                                 pkt_dev->cur_dst_mac_offset = 0;
2362                         }
2363                 }
2364
2365                 tmp = pkt_dev->dst_mac[5] + (mc & 0xFF);
2366                 pkt_dev->hh[5] = tmp;
2367                 tmp = (pkt_dev->dst_mac[4] + ((mc >> 8) & 0xFF) + (tmp >> 8));
2368                 pkt_dev->hh[4] = tmp;
2369                 tmp = (pkt_dev->dst_mac[3] + ((mc >> 16) & 0xFF) + (tmp >> 8));
2370                 pkt_dev->hh[3] = tmp;
2371                 tmp = (pkt_dev->dst_mac[2] + ((mc >> 24) & 0xFF) + (tmp >> 8));
2372                 pkt_dev->hh[2] = tmp;
2373                 tmp = (pkt_dev->dst_mac[1] + (tmp >> 8));
2374                 pkt_dev->hh[1] = tmp;
2375         }
2376
2377         if (pkt_dev->flags & F_MPLS_RND) {
2378                 unsigned int i;
2379                 for (i = 0; i < pkt_dev->nr_labels; i++)
2380                         if (pkt_dev->labels[i] & MPLS_STACK_BOTTOM)
2381                                 pkt_dev->labels[i] = MPLS_STACK_BOTTOM |
2382                                              ((__force __be32)prandom_u32() &
2383                                                       htonl(0x000fffff));
2384         }
2385
2386         if ((pkt_dev->flags & F_VID_RND) && (pkt_dev->vlan_id != 0xffff)) {
2387                 pkt_dev->vlan_id = prandom_u32() & (4096 - 1);
2388         }
2389
2390         if ((pkt_dev->flags & F_SVID_RND) && (pkt_dev->svlan_id != 0xffff)) {
2391                 pkt_dev->svlan_id = prandom_u32() & (4096 - 1);
2392         }
2393
2394         if (pkt_dev->udp_src_min < pkt_dev->udp_src_max) {
2395                 if (pkt_dev->flags & F_UDPSRC_RND)
2396                         pkt_dev->cur_udp_src = prandom_u32() %
2397                                 (pkt_dev->udp_src_max - pkt_dev->udp_src_min)
2398                                 + pkt_dev->udp_src_min;
2399
2400                 else {
2401                         pkt_dev->cur_udp_src++;
2402                         if (pkt_dev->cur_udp_src >= pkt_dev->udp_src_max)
2403                                 pkt_dev->cur_udp_src = pkt_dev->udp_src_min;
2404                 }
2405         }
2406
2407         if (pkt_dev->udp_dst_min < pkt_dev->udp_dst_max) {
2408                 if (pkt_dev->flags & F_UDPDST_RND) {
2409                         pkt_dev->cur_udp_dst = prandom_u32() %
2410                                 (pkt_dev->udp_dst_max - pkt_dev->udp_dst_min)
2411                                 + pkt_dev->udp_dst_min;
2412                 } else {
2413                         pkt_dev->cur_udp_dst++;
2414                         if (pkt_dev->cur_udp_dst >= pkt_dev->udp_dst_max)
2415                                 pkt_dev->cur_udp_dst = pkt_dev->udp_dst_min;
2416                 }
2417         }
2418
2419         if (!(pkt_dev->flags & F_IPV6)) {
2420
2421                 imn = ntohl(pkt_dev->saddr_min);
2422                 imx = ntohl(pkt_dev->saddr_max);
2423                 if (imn < imx) {
2424                         __u32 t;
2425                         if (pkt_dev->flags & F_IPSRC_RND)
2426                                 t = prandom_u32() % (imx - imn) + imn;
2427                         else {
2428                                 t = ntohl(pkt_dev->cur_saddr);
2429                                 t++;
2430                                 if (t > imx)
2431                                         t = imn;
2432
2433                         }
2434                         pkt_dev->cur_saddr = htonl(t);
2435                 }
2436
2437                 if (pkt_dev->cflows && f_seen(pkt_dev, flow)) {
2438                         pkt_dev->cur_daddr = pkt_dev->flows[flow].cur_daddr;
2439                 } else {
2440                         imn = ntohl(pkt_dev->daddr_min);
2441                         imx = ntohl(pkt_dev->daddr_max);
2442                         if (imn < imx) {
2443                                 __u32 t;
2444                                 __be32 s;
2445                                 if (pkt_dev->flags & F_IPDST_RND) {
2446
2447                                         do {
2448                                                 t = prandom_u32() %
2449                                                         (imx - imn) + imn;
2450                                                 s = htonl(t);
2451                                         } while (ipv4_is_loopback(s) ||
2452                                                 ipv4_is_multicast(s) ||
2453                                                 ipv4_is_lbcast(s) ||
2454                                                 ipv4_is_zeronet(s) ||
2455                                                 ipv4_is_local_multicast(s));
2456                                         pkt_dev->cur_daddr = s;
2457                                 } else {
2458                                         t = ntohl(pkt_dev->cur_daddr);
2459                                         t++;
2460                                         if (t > imx) {
2461                                                 t = imn;
2462                                         }
2463                                         pkt_dev->cur_daddr = htonl(t);
2464                                 }
2465                         }
2466                         if (pkt_dev->cflows) {
2467                                 pkt_dev->flows[flow].flags |= F_INIT;
2468                                 pkt_dev->flows[flow].cur_daddr =
2469                                     pkt_dev->cur_daddr;
2470 #ifdef CONFIG_XFRM
2471                                 if (pkt_dev->flags & F_IPSEC_ON)
2472                                         get_ipsec_sa(pkt_dev, flow);
2473 #endif
2474                                 pkt_dev->nflows++;
2475                         }
2476                 }
2477         } else {                /* IPV6 * */
2478
2479                 if (!ipv6_addr_any(&pkt_dev->min_in6_daddr)) {
2480                         int i;
2481
2482                         /* Only random destinations yet */
2483
2484                         for (i = 0; i < 4; i++) {
2485                                 pkt_dev->cur_in6_daddr.s6_addr32[i] =
2486                                     (((__force __be32)prandom_u32() |
2487                                       pkt_dev->min_in6_daddr.s6_addr32[i]) &
2488                                      pkt_dev->max_in6_daddr.s6_addr32[i]);
2489                         }
2490                 }
2491         }
2492
2493         if (pkt_dev->min_pkt_size < pkt_dev->max_pkt_size) {
2494                 __u32 t;
2495                 if (pkt_dev->flags & F_TXSIZE_RND) {
2496                         t = prandom_u32() %
2497                                 (pkt_dev->max_pkt_size - pkt_dev->min_pkt_size)
2498                                 + pkt_dev->min_pkt_size;
2499                 } else {
2500                         t = pkt_dev->cur_pkt_size + 1;
2501                         if (t > pkt_dev->max_pkt_size)
2502                                 t = pkt_dev->min_pkt_size;
2503                 }
2504                 pkt_dev->cur_pkt_size = t;
2505         }
2506
2507         set_cur_queue_map(pkt_dev);
2508
2509         pkt_dev->flows[flow].count++;
2510 }
2511
2512
2513 #ifdef CONFIG_XFRM
2514 static u32 pktgen_dst_metrics[RTAX_MAX + 1] = {
2515
2516         [RTAX_HOPLIMIT] = 0x5, /* Set a static hoplimit */
2517 };
2518
2519 static int pktgen_output_ipsec(struct sk_buff *skb, struct pktgen_dev *pkt_dev)
2520 {
2521         struct xfrm_state *x = pkt_dev->flows[pkt_dev->curfl].x;
2522         int err = 0;
2523         struct net *net = dev_net(pkt_dev->odev);
2524
2525         if (!x)
2526                 return 0;
2527         /* XXX: we dont support tunnel mode for now until
2528          * we resolve the dst issue */
2529         if ((x->props.mode != XFRM_MODE_TRANSPORT) && (pkt_dev->spi == 0))
2530                 return 0;
2531
2532         /* But when user specify an valid SPI, transformation
2533          * supports both transport/tunnel mode + ESP/AH type.
2534          */
2535         if ((x->props.mode == XFRM_MODE_TUNNEL) && (pkt_dev->spi != 0))
2536                 skb->_skb_refdst = (unsigned long)&pkt_dev->dst | SKB_DST_NOREF;
2537
2538         rcu_read_lock_bh();
2539         err = x->outer_mode->output(x, skb);
2540         rcu_read_unlock_bh();
2541         if (err) {
2542                 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATEMODEERROR);
2543                 goto error;
2544         }
2545         err = x->type->output(x, skb);
2546         if (err) {
2547                 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATEPROTOERROR);
2548                 goto error;
2549         }
2550         spin_lock_bh(&x->lock);
2551         x->curlft.bytes += skb->len;
2552         x->curlft.packets++;
2553         spin_unlock_bh(&x->lock);
2554 error:
2555         return err;
2556 }
2557
2558 static void free_SAs(struct pktgen_dev *pkt_dev)
2559 {
2560         if (pkt_dev->cflows) {
2561                 /* let go of the SAs if we have them */
2562                 int i;
2563                 for (i = 0; i < pkt_dev->cflows; i++) {
2564                         struct xfrm_state *x = pkt_dev->flows[i].x;
2565                         if (x) {
2566                                 xfrm_state_put(x);
2567                                 pkt_dev->flows[i].x = NULL;
2568                         }
2569                 }
2570         }
2571 }
2572
2573 static int process_ipsec(struct pktgen_dev *pkt_dev,
2574                               struct sk_buff *skb, __be16 protocol)
2575 {
2576         if (pkt_dev->flags & F_IPSEC_ON) {
2577                 struct xfrm_state *x = pkt_dev->flows[pkt_dev->curfl].x;
2578                 int nhead = 0;
2579                 if (x) {
2580                         int ret;
2581                         __u8 *eth;
2582                         struct iphdr *iph;
2583
2584                         nhead = x->props.header_len - skb_headroom(skb);
2585                         if (nhead > 0) {
2586                                 ret = pskb_expand_head(skb, nhead, 0, GFP_ATOMIC);
2587                                 if (ret < 0) {
2588                                         pr_err("Error expanding ipsec packet %d\n",
2589                                                ret);
2590                                         goto err;
2591                                 }
2592                         }
2593
2594                         /* ipsec is not expecting ll header */
2595                         skb_pull(skb, ETH_HLEN);
2596                         ret = pktgen_output_ipsec(skb, pkt_dev);
2597                         if (ret) {
2598                                 pr_err("Error creating ipsec packet %d\n", ret);
2599                                 goto err;
2600                         }
2601                         /* restore ll */
2602                         eth = (__u8 *) skb_push(skb, ETH_HLEN);
2603                         memcpy(eth, pkt_dev->hh, 12);
2604                         *(u16 *) &eth[12] = protocol;
2605
2606                         /* Update IPv4 header len as well as checksum value */
2607                         iph = ip_hdr(skb);
2608                         iph->tot_len = htons(skb->len - ETH_HLEN);
2609                         ip_send_check(iph);
2610                 }
2611         }
2612         return 1;
2613 err:
2614         kfree_skb(skb);
2615         return 0;
2616 }
2617 #endif
2618
2619 static void mpls_push(__be32 *mpls, struct pktgen_dev *pkt_dev)
2620 {
2621         unsigned int i;
2622         for (i = 0; i < pkt_dev->nr_labels; i++)
2623                 *mpls++ = pkt_dev->labels[i] & ~MPLS_STACK_BOTTOM;
2624
2625         mpls--;
2626         *mpls |= MPLS_STACK_BOTTOM;
2627 }
2628
2629 static inline __be16 build_tci(unsigned int id, unsigned int cfi,
2630                                unsigned int prio)
2631 {
2632         return htons(id | (cfi << 12) | (prio << 13));
2633 }
2634
2635 static void pktgen_finalize_skb(struct pktgen_dev *pkt_dev, struct sk_buff *skb,
2636                                 int datalen)
2637 {
2638         struct timeval timestamp;
2639         struct pktgen_hdr *pgh;
2640
2641         pgh = (struct pktgen_hdr *)skb_put(skb, sizeof(*pgh));
2642         datalen -= sizeof(*pgh);
2643
2644         if (pkt_dev->nfrags <= 0) {
2645                 memset(skb_put(skb, datalen), 0, datalen);
2646         } else {
2647                 int frags = pkt_dev->nfrags;
2648                 int i, len;
2649                 int frag_len;
2650
2651
2652                 if (frags > MAX_SKB_FRAGS)
2653                         frags = MAX_SKB_FRAGS;
2654                 len = datalen - frags * PAGE_SIZE;
2655                 if (len > 0) {
2656                         memset(skb_put(skb, len), 0, len);
2657                         datalen = frags * PAGE_SIZE;
2658                 }
2659
2660                 i = 0;
2661                 frag_len = (datalen/frags) < PAGE_SIZE ?
2662                            (datalen/frags) : PAGE_SIZE;
2663                 while (datalen > 0) {
2664                         if (unlikely(!pkt_dev->page)) {
2665                                 int node = numa_node_id();
2666
2667                                 if (pkt_dev->node >= 0 && (pkt_dev->flags & F_NODE))
2668                                         node = pkt_dev->node;
2669                                 pkt_dev->page = alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, 0);
2670                                 if (!pkt_dev->page)
2671                                         break;
2672                         }
2673                         get_page(pkt_dev->page);
2674                         skb_frag_set_page(skb, i, pkt_dev->page);
2675                         skb_shinfo(skb)->frags[i].page_offset = 0;
2676                         /*last fragment, fill rest of data*/
2677                         if (i == (frags - 1))
2678                                 skb_frag_size_set(&skb_shinfo(skb)->frags[i],
2679                                     (datalen < PAGE_SIZE ? datalen : PAGE_SIZE));
2680                         else
2681                                 skb_frag_size_set(&skb_shinfo(skb)->frags[i], frag_len);
2682                         datalen -= skb_frag_size(&skb_shinfo(skb)->frags[i]);
2683                         skb->len += skb_frag_size(&skb_shinfo(skb)->frags[i]);
2684                         skb->data_len += skb_frag_size(&skb_shinfo(skb)->frags[i]);
2685                         i++;
2686                         skb_shinfo(skb)->nr_frags = i;
2687                 }
2688         }
2689
2690         /* Stamp the time, and sequence number,
2691          * convert them to network byte order
2692          */
2693         pgh->pgh_magic = htonl(PKTGEN_MAGIC);
2694         pgh->seq_num = htonl(pkt_dev->seq_num);
2695
2696         if (pkt_dev->flags & F_NO_TIMESTAMP) {
2697                 pgh->tv_sec = 0;
2698                 pgh->tv_usec = 0;
2699         } else {
2700                 do_gettimeofday(&timestamp);
2701                 pgh->tv_sec = htonl(timestamp.tv_sec);
2702                 pgh->tv_usec = htonl(timestamp.tv_usec);
2703         }
2704 }
2705
2706 static struct sk_buff *pktgen_alloc_skb(struct net_device *dev,
2707                                         struct pktgen_dev *pkt_dev,
2708                                         unsigned int extralen)
2709 {
2710         struct sk_buff *skb = NULL;
2711         unsigned int size = pkt_dev->cur_pkt_size + 64 + extralen +
2712                             pkt_dev->pkt_overhead;
2713
2714         if (pkt_dev->flags & F_NODE) {
2715                 int node = pkt_dev->node >= 0 ? pkt_dev->node : numa_node_id();
2716
2717                 skb = __alloc_skb(NET_SKB_PAD + size, GFP_NOWAIT, 0, node);
2718                 if (likely(skb)) {
2719                         skb_reserve(skb, NET_SKB_PAD);
2720                         skb->dev = dev;
2721                 }
2722         } else {
2723                  skb = __netdev_alloc_skb(dev, size, GFP_NOWAIT);
2724         }
2725
2726         return skb;
2727 }
2728
2729 static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
2730                                         struct pktgen_dev *pkt_dev)
2731 {
2732         struct sk_buff *skb = NULL;
2733         __u8 *eth;
2734         struct udphdr *udph;
2735         int datalen, iplen;
2736         struct iphdr *iph;
2737         __be16 protocol = htons(ETH_P_IP);
2738         __be32 *mpls;
2739         __be16 *vlan_tci = NULL;                 /* Encapsulates priority and VLAN ID */
2740         __be16 *vlan_encapsulated_proto = NULL;  /* packet type ID field (or len) for VLAN tag */
2741         __be16 *svlan_tci = NULL;                /* Encapsulates priority and SVLAN ID */
2742         __be16 *svlan_encapsulated_proto = NULL; /* packet type ID field (or len) for SVLAN tag */
2743         u16 queue_map;
2744
2745         if (pkt_dev->nr_labels)
2746                 protocol = htons(ETH_P_MPLS_UC);
2747
2748         if (pkt_dev->vlan_id != 0xffff)
2749                 protocol = htons(ETH_P_8021Q);
2750
2751         /* Update any of the values, used when we're incrementing various
2752          * fields.
2753          */
2754         mod_cur_headers(pkt_dev);
2755         queue_map = pkt_dev->cur_queue_map;
2756
2757         datalen = (odev->hard_header_len + 16) & ~0xf;
2758
2759         skb = pktgen_alloc_skb(odev, pkt_dev, datalen);
2760         if (!skb) {
2761                 sprintf(pkt_dev->result, "No memory");
2762                 return NULL;
2763         }
2764
2765         prefetchw(skb->data);
2766         skb_reserve(skb, datalen);
2767
2768         /*  Reserve for ethernet and IP header  */
2769         eth = (__u8 *) skb_push(skb, 14);
2770         mpls = (__be32 *)skb_put(skb, pkt_dev->nr_labels*sizeof(__u32));
2771         if (pkt_dev->nr_labels)
2772                 mpls_push(mpls, pkt_dev);
2773
2774         if (pkt_dev->vlan_id != 0xffff) {
2775                 if (pkt_dev->svlan_id != 0xffff) {
2776                         svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16));
2777                         *svlan_tci = build_tci(pkt_dev->svlan_id,
2778                                                pkt_dev->svlan_cfi,
2779                                                pkt_dev->svlan_p);
2780                         svlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16));
2781                         *svlan_encapsulated_proto = htons(ETH_P_8021Q);
2782                 }
2783                 vlan_tci = (__be16 *)skb_put(skb, sizeof(__be16));
2784                 *vlan_tci = build_tci(pkt_dev->vlan_id,
2785                                       pkt_dev->vlan_cfi,
2786                                       pkt_dev->vlan_p);
2787                 vlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16));
2788                 *vlan_encapsulated_proto = htons(ETH_P_IP);
2789         }
2790
2791         skb_set_mac_header(skb, 0);
2792         skb_set_network_header(skb, skb->len);
2793         iph = (struct iphdr *) skb_put(skb, sizeof(struct iphdr));
2794
2795         skb_set_transport_header(skb, skb->len);
2796         udph = (struct udphdr *) skb_put(skb, sizeof(struct udphdr));
2797         skb_set_queue_mapping(skb, queue_map);
2798         skb->priority = pkt_dev->skb_priority;
2799
2800         memcpy(eth, pkt_dev->hh, 12);
2801         *(__be16 *) & eth[12] = protocol;
2802
2803         /* Eth + IPh + UDPh + mpls */
2804         datalen = pkt_dev->cur_pkt_size - 14 - 20 - 8 -
2805                   pkt_dev->pkt_overhead;
2806         if (datalen < 0 || datalen < sizeof(struct pktgen_hdr))
2807                 datalen = sizeof(struct pktgen_hdr);
2808
2809         udph->source = htons(pkt_dev->cur_udp_src);
2810         udph->dest = htons(pkt_dev->cur_udp_dst);
2811         udph->len = htons(datalen + 8); /* DATA + udphdr */
2812         udph->check = 0;
2813
2814         iph->ihl = 5;
2815         iph->version = 4;
2816         iph->ttl = 32;
2817         iph->tos = pkt_dev->tos;
2818         iph->protocol = IPPROTO_UDP;    /* UDP */
2819         iph->saddr = pkt_dev->cur_saddr;
2820         iph->daddr = pkt_dev->cur_daddr;
2821         iph->id = htons(pkt_dev->ip_id);
2822         pkt_dev->ip_id++;
2823         iph->frag_off = 0;
2824         iplen = 20 + 8 + datalen;
2825         iph->tot_len = htons(iplen);
2826         ip_send_check(iph);
2827         skb->protocol = protocol;
2828         skb->dev = odev;
2829         skb->pkt_type = PACKET_HOST;
2830
2831         if (!(pkt_dev->flags & F_UDPCSUM)) {
2832                 skb->ip_summed = CHECKSUM_NONE;
2833         } else if (odev->features & NETIF_F_V4_CSUM) {
2834                 skb->ip_summed = CHECKSUM_PARTIAL;
2835                 skb->csum = 0;
2836                 udp4_hwcsum(skb, udph->source, udph->dest);
2837         } else {
2838                 __wsum csum = udp_csum(skb);
2839
2840                 /* add protocol-dependent pseudo-header */
2841                 udph->check = csum_tcpudp_magic(udph->source, udph->dest,
2842                                                 datalen + 8, IPPROTO_UDP, csum);
2843
2844                 if (udph->check == 0)
2845                         udph->check = CSUM_MANGLED_0;
2846         }
2847
2848         pktgen_finalize_skb(pkt_dev, skb, datalen);
2849
2850 #ifdef CONFIG_XFRM
2851         if (!process_ipsec(pkt_dev, skb, protocol))
2852                 return NULL;
2853 #endif
2854
2855         return skb;
2856 }
2857
2858 static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
2859                                         struct pktgen_dev *pkt_dev)
2860 {
2861         struct sk_buff *skb = NULL;
2862         __u8 *eth;
2863         struct udphdr *udph;
2864         int datalen, udplen;
2865         struct ipv6hdr *iph;
2866         __be16 protocol = htons(ETH_P_IPV6);
2867         __be32 *mpls;
2868         __be16 *vlan_tci = NULL;                 /* Encapsulates priority and VLAN ID */
2869         __be16 *vlan_encapsulated_proto = NULL;  /* packet type ID field (or len) for VLAN tag */
2870         __be16 *svlan_tci = NULL;                /* Encapsulates priority and SVLAN ID */
2871         __be16 *svlan_encapsulated_proto = NULL; /* packet type ID field (or len) for SVLAN tag */
2872         u16 queue_map;
2873
2874         if (pkt_dev->nr_labels)
2875                 protocol = htons(ETH_P_MPLS_UC);
2876
2877         if (pkt_dev->vlan_id != 0xffff)
2878                 protocol = htons(ETH_P_8021Q);
2879
2880         /* Update any of the values, used when we're incrementing various
2881          * fields.
2882          */
2883         mod_cur_headers(pkt_dev);
2884         queue_map = pkt_dev->cur_queue_map;
2885
2886         skb = pktgen_alloc_skb(odev, pkt_dev, 16);
2887         if (!skb) {
2888                 sprintf(pkt_dev->result, "No memory");
2889                 return NULL;
2890         }
2891
2892         prefetchw(skb->data);
2893         skb_reserve(skb, 16);
2894
2895         /*  Reserve for ethernet and IP header  */
2896         eth = (__u8 *) skb_push(skb, 14);
2897         mpls = (__be32 *)skb_put(skb, pkt_dev->nr_labels*sizeof(__u32));
2898         if (pkt_dev->nr_labels)
2899                 mpls_push(mpls, pkt_dev);
2900
2901         if (pkt_dev->vlan_id != 0xffff) {
2902                 if (pkt_dev->svlan_id != 0xffff) {
2903                         svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16));
2904                         *svlan_tci = build_tci(pkt_dev->svlan_id,
2905                                                pkt_dev->svlan_cfi,
2906                                                pkt_dev->svlan_p);
2907                         svlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16));
2908                         *svlan_encapsulated_proto = htons(ETH_P_8021Q);
2909                 }
2910                 vlan_tci = (__be16 *)skb_put(skb, sizeof(__be16));
2911                 *vlan_tci = build_tci(pkt_dev->vlan_id,
2912                                       pkt_dev->vlan_cfi,
2913                                       pkt_dev->vlan_p);
2914                 vlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16));
2915                 *vlan_encapsulated_proto = htons(ETH_P_IPV6);
2916         }
2917
2918         skb_set_mac_header(skb, 0);
2919         skb_set_network_header(skb, skb->len);
2920         iph = (struct ipv6hdr *) skb_put(skb, sizeof(struct ipv6hdr));
2921
2922         skb_set_transport_header(skb, skb->len);
2923         udph = (struct udphdr *) skb_put(skb, sizeof(struct udphdr));
2924         skb_set_queue_mapping(skb, queue_map);
2925         skb->priority = pkt_dev->skb_priority;
2926
2927         memcpy(eth, pkt_dev->hh, 12);
2928         *(__be16 *) &eth[12] = protocol;
2929
2930         /* Eth + IPh + UDPh + mpls */
2931         datalen = pkt_dev->cur_pkt_size - 14 -
2932                   sizeof(struct ipv6hdr) - sizeof(struct udphdr) -
2933                   pkt_dev->pkt_overhead;
2934
2935         if (datalen < 0 || datalen < sizeof(struct pktgen_hdr)) {
2936                 datalen = sizeof(struct pktgen_hdr);
2937                 net_info_ratelimited("increased datalen to %d\n", datalen);
2938         }
2939
2940         udplen = datalen + sizeof(struct udphdr);
2941         udph->source = htons(pkt_dev->cur_udp_src);
2942         udph->dest = htons(pkt_dev->cur_udp_dst);
2943         udph->len = htons(udplen);
2944         udph->check = 0;
2945
2946         *(__be32 *) iph = htonl(0x60000000);    /* Version + flow */
2947
2948         if (pkt_dev->traffic_class) {
2949                 /* Version + traffic class + flow (0) */
2950                 *(__be32 *)iph |= htonl(0x60000000 | (pkt_dev->traffic_class << 20));
2951         }
2952
2953         iph->hop_limit = 32;
2954
2955         iph->payload_len = htons(udplen);
2956         iph->nexthdr = IPPROTO_UDP;
2957
2958         iph->daddr = pkt_dev->cur_in6_daddr;
2959         iph->saddr = pkt_dev->cur_in6_saddr;
2960
2961         skb->protocol = protocol;
2962         skb->dev = odev;
2963         skb->pkt_type = PACKET_HOST;
2964
2965         if (!(pkt_dev->flags & F_UDPCSUM)) {
2966                 skb->ip_summed = CHECKSUM_NONE;
2967         } else if (odev->features & NETIF_F_V6_CSUM) {
2968                 skb->ip_summed = CHECKSUM_PARTIAL;
2969                 skb->csum_start = skb_transport_header(skb) - skb->head;
2970                 skb->csum_offset = offsetof(struct udphdr, check);
2971                 udph->check = ~csum_ipv6_magic(&iph->saddr, &iph->daddr, udplen, IPPROTO_UDP, 0);
2972         } else {
2973                 __wsum csum = udp_csum(skb);
2974
2975                 /* add protocol-dependent pseudo-header */
2976                 udph->check = csum_ipv6_magic(&iph->saddr, &iph->daddr, udplen, IPPROTO_UDP, csum);
2977
2978                 if (udph->check == 0)
2979                         udph->check = CSUM_MANGLED_0;
2980         }
2981
2982         pktgen_finalize_skb(pkt_dev, skb, datalen);
2983
2984         return skb;
2985 }
2986
2987 static struct sk_buff *fill_packet(struct net_device *odev,
2988                                    struct pktgen_dev *pkt_dev)
2989 {
2990         if (pkt_dev->flags & F_IPV6)
2991                 return fill_packet_ipv6(odev, pkt_dev);
2992         else
2993                 return fill_packet_ipv4(odev, pkt_dev);
2994 }
2995
2996 static void pktgen_clear_counters(struct pktgen_dev *pkt_dev)
2997 {
2998         pkt_dev->seq_num = 1;
2999         pkt_dev->idle_acc = 0;
3000         pkt_dev->sofar = 0;
3001         pkt_dev->tx_bytes = 0;
3002         pkt_dev->errors = 0;
3003 }
3004
3005 /* Set up structure for sending pkts, clear counters */
3006
3007 static void pktgen_run(struct pktgen_thread *t)
3008 {
3009         struct pktgen_dev *pkt_dev;
3010         int started = 0;
3011
3012         func_enter();
3013
3014         rcu_read_lock();
3015         list_for_each_entry_rcu(pkt_dev, &t->if_list, list) {
3016
3017                 /*
3018                  * setup odev and create initial packet.
3019                  */
3020                 pktgen_setup_inject(pkt_dev);
3021
3022                 if (pkt_dev->odev) {
3023                         pktgen_clear_counters(pkt_dev);
3024                         pkt_dev->skb = NULL;
3025                         pkt_dev->started_at = pkt_dev->next_tx = ktime_get();
3026
3027                         set_pkt_overhead(pkt_dev);
3028
3029                         strcpy(pkt_dev->result, "Starting");
3030                         pkt_dev->running = 1;   /* Cranke yeself! */
3031                         started++;
3032                 } else
3033                         strcpy(pkt_dev->result, "Error starting");
3034         }
3035         rcu_read_unlock();
3036         if (started)
3037                 t->control &= ~(T_STOP);
3038 }
3039
3040 static void pktgen_stop_all_threads_ifs(struct pktgen_net *pn)
3041 {
3042         struct pktgen_thread *t;
3043
3044         func_enter();
3045
3046         mutex_lock(&pktgen_thread_lock);
3047
3048         list_for_each_entry(t, &pn->pktgen_threads, th_list)
3049                 t->control |= T_STOP;
3050
3051         mutex_unlock(&pktgen_thread_lock);
3052 }
3053
3054 static int thread_is_running(const struct pktgen_thread *t)
3055 {
3056         const struct pktgen_dev *pkt_dev;
3057
3058         rcu_read_lock();
3059         list_for_each_entry_rcu(pkt_dev, &t->if_list, list)
3060                 if (pkt_dev->running) {
3061                         rcu_read_unlock();
3062                         return 1;
3063                 }
3064         rcu_read_unlock();
3065         return 0;
3066 }
3067
3068 static int pktgen_wait_thread_run(struct pktgen_thread *t)
3069 {
3070         while (thread_is_running(t)) {
3071
3072                 msleep_interruptible(100);
3073
3074                 if (signal_pending(current))
3075                         goto signal;
3076         }
3077         return 1;
3078 signal:
3079         return 0;
3080 }
3081
3082 static int pktgen_wait_all_threads_run(struct pktgen_net *pn)
3083 {
3084         struct pktgen_thread *t;
3085         int sig = 1;
3086
3087         mutex_lock(&pktgen_thread_lock);
3088
3089         list_for_each_entry(t, &pn->pktgen_threads, th_list) {
3090                 sig = pktgen_wait_thread_run(t);
3091                 if (sig == 0)
3092                         break;
3093         }
3094
3095         if (sig == 0)
3096                 list_for_each_entry(t, &pn->pktgen_threads, th_list)
3097                         t->control |= (T_STOP);
3098
3099         mutex_unlock(&pktgen_thread_lock);
3100         return sig;
3101 }
3102
3103 static void pktgen_run_all_threads(struct pktgen_net *pn)
3104 {
3105         struct pktgen_thread *t;
3106
3107         func_enter();
3108
3109         mutex_lock(&pktgen_thread_lock);
3110
3111         list_for_each_entry(t, &pn->pktgen_threads, th_list)
3112                 t->control |= (T_RUN);
3113
3114         mutex_unlock(&pktgen_thread_lock);
3115
3116         /* Propagate thread->control  */
3117         schedule_timeout_interruptible(msecs_to_jiffies(125));
3118
3119         pktgen_wait_all_threads_run(pn);
3120 }
3121
3122 static void pktgen_reset_all_threads(struct pktgen_net *pn)
3123 {
3124         struct pktgen_thread *t;
3125
3126         func_enter();
3127
3128         mutex_lock(&pktgen_thread_lock);
3129
3130         list_for_each_entry(t, &pn->pktgen_threads, th_list)
3131                 t->control |= (T_REMDEVALL);
3132
3133         mutex_unlock(&pktgen_thread_lock);
3134
3135         /* Propagate thread->control  */
3136         schedule_timeout_interruptible(msecs_to_jiffies(125));
3137
3138         pktgen_wait_all_threads_run(pn);
3139 }
3140
3141 static void show_results(struct pktgen_dev *pkt_dev, int nr_frags)
3142 {
3143         __u64 bps, mbps, pps;
3144         char *p = pkt_dev->result;
3145         ktime_t elapsed = ktime_sub(pkt_dev->stopped_at,
3146                                     pkt_dev->started_at);
3147         ktime_t idle = ns_to_ktime(pkt_dev->idle_acc);
3148
3149         p += sprintf(p, "OK: %llu(c%llu+d%llu) usec, %llu (%dbyte,%dfrags)\n",
3150                      (unsigned long long)ktime_to_us(elapsed),
3151                      (unsigned long long)ktime_to_us(ktime_sub(elapsed, idle)),
3152                      (unsigned long long)ktime_to_us(idle),
3153                      (unsigned long long)pkt_dev->sofar,
3154                      pkt_dev->cur_pkt_size, nr_frags);
3155
3156         pps = div64_u64(pkt_dev->sofar * NSEC_PER_SEC,
3157                         ktime_to_ns(elapsed));
3158
3159         bps = pps * 8 * pkt_dev->cur_pkt_size;
3160
3161         mbps = bps;
3162         do_div(mbps, 1000000);
3163         p += sprintf(p, "  %llupps %lluMb/sec (%llubps) errors: %llu",
3164                      (unsigned long long)pps,
3165                      (unsigned long long)mbps,
3166                      (unsigned long long)bps,
3167                      (unsigned long long)pkt_dev->errors);
3168 }
3169
3170 /* Set stopped-at timer, remove from running list, do counters & statistics */
3171 static int pktgen_stop_device(struct pktgen_dev *pkt_dev)
3172 {
3173         int nr_frags = pkt_dev->skb ? skb_shinfo(pkt_dev->skb)->nr_frags : -1;
3174
3175         if (!pkt_dev->running) {
3176                 pr_warning("interface: %s is already stopped\n",
3177                            pkt_dev->odevname);
3178                 return -EINVAL;
3179         }
3180
3181         pkt_dev->running = 0;
3182         kfree_skb(pkt_dev->skb);
3183         pkt_dev->skb = NULL;
3184         pkt_dev->stopped_at = ktime_get();
3185
3186         show_results(pkt_dev, nr_frags);
3187
3188         return 0;
3189 }
3190
3191 static struct pktgen_dev *next_to_run(struct pktgen_thread *t)
3192 {
3193         struct pktgen_dev *pkt_dev, *best = NULL;
3194
3195         rcu_read_lock();
3196         list_for_each_entry_rcu(pkt_dev, &t->if_list, list) {
3197                 if (!pkt_dev->running)
3198                         continue;
3199                 if (best == NULL)
3200                         best = pkt_dev;
3201                 else if (ktime_compare(pkt_dev->next_tx, best->next_tx) < 0)
3202                         best = pkt_dev;
3203         }
3204         rcu_read_unlock();
3205
3206         return best;
3207 }
3208
3209 static void pktgen_stop(struct pktgen_thread *t)
3210 {
3211         struct pktgen_dev *pkt_dev;
3212
3213         func_enter();
3214
3215         rcu_read_lock();
3216
3217         list_for_each_entry_rcu(pkt_dev, &t->if_list, list) {
3218                 pktgen_stop_device(pkt_dev);
3219         }
3220
3221         rcu_read_unlock();
3222 }
3223
3224 /*
3225  * one of our devices needs to be removed - find it
3226  * and remove it
3227  */
3228 static void pktgen_rem_one_if(struct pktgen_thread *t)
3229 {
3230         struct list_head *q, *n;
3231         struct pktgen_dev *cur;
3232
3233         func_enter();
3234
3235         list_for_each_safe(q, n, &t->if_list) {
3236                 cur = list_entry(q, struct pktgen_dev, list);
3237
3238                 if (!cur->removal_mark)
3239                         continue;
3240
3241                 kfree_skb(cur->skb);
3242                 cur->skb = NULL;
3243
3244                 pktgen_remove_device(t, cur);
3245
3246                 break;
3247         }
3248 }
3249
3250 static void pktgen_rem_all_ifs(struct pktgen_thread *t)
3251 {
3252         struct list_head *q, *n;
3253         struct pktgen_dev *cur;
3254
3255         func_enter();
3256
3257         /* Remove all devices, free mem */
3258
3259         list_for_each_safe(q, n, &t->if_list) {
3260                 cur = list_entry(q, struct pktgen_dev, list);
3261
3262                 kfree_skb(cur->skb);
3263                 cur->skb = NULL;
3264
3265                 pktgen_remove_device(t, cur);
3266         }
3267 }
3268
3269 static void pktgen_rem_thread(struct pktgen_thread *t)
3270 {
3271         /* Remove from the thread list */
3272         remove_proc_entry(t->tsk->comm, t->net->proc_dir);
3273 }
3274
3275 static void pktgen_resched(struct pktgen_dev *pkt_dev)
3276 {
3277         ktime_t idle_start = ktime_get();
3278         schedule();
3279         pkt_dev->idle_acc += ktime_to_ns(ktime_sub(ktime_get(), idle_start));
3280 }
3281
3282 static void pktgen_wait_for_skb(struct pktgen_dev *pkt_dev)
3283 {
3284         ktime_t idle_start = ktime_get();
3285
3286         while (atomic_read(&(pkt_dev->skb->users)) != 1) {
3287                 if (signal_pending(current))
3288                         break;
3289
3290                 if (need_resched())
3291                         pktgen_resched(pkt_dev);
3292                 else
3293                         cpu_relax();
3294         }
3295         pkt_dev->idle_acc += ktime_to_ns(ktime_sub(ktime_get(), idle_start));
3296 }
3297
3298 static void pktgen_xmit(struct pktgen_dev *pkt_dev)
3299 {
3300         struct net_device *odev = pkt_dev->odev;
3301         struct netdev_queue *txq;
3302         int ret;
3303
3304         /* If device is offline, then don't send */
3305         if (unlikely(!netif_running(odev) || !netif_carrier_ok(odev))) {
3306                 pktgen_stop_device(pkt_dev);
3307                 return;
3308         }
3309
3310         /* This is max DELAY, this has special meaning of
3311          * "never transmit"
3312          */
3313         if (unlikely(pkt_dev->delay == ULLONG_MAX)) {
3314                 pkt_dev->next_tx = ktime_add_ns(ktime_get(), ULONG_MAX);
3315                 return;
3316         }
3317
3318         /* If no skb or clone count exhausted then get new one */
3319         if (!pkt_dev->skb || (pkt_dev->last_ok &&
3320                               ++pkt_dev->clone_count >= pkt_dev->clone_skb)) {
3321                 /* build a new pkt */
3322                 kfree_skb(pkt_dev->skb);
3323
3324                 pkt_dev->skb = fill_packet(odev, pkt_dev);
3325                 if (pkt_dev->skb == NULL) {
3326                         pr_err("ERROR: couldn't allocate skb in fill_packet\n");
3327                         schedule();
3328                         pkt_dev->clone_count--; /* back out increment, OOM */
3329                         return;
3330                 }
3331                 pkt_dev->last_pkt_size = pkt_dev->skb->len;
3332                 pkt_dev->allocated_skbs++;
3333                 pkt_dev->clone_count = 0;       /* reset counter */
3334         }
3335
3336         if (pkt_dev->delay && pkt_dev->last_ok)
3337                 spin(pkt_dev, pkt_dev->next_tx);
3338
3339         txq = skb_get_tx_queue(odev, pkt_dev->skb);
3340
3341         local_bh_disable();
3342
3343         HARD_TX_LOCK(odev, txq, smp_processor_id());
3344
3345         if (unlikely(netif_xmit_frozen_or_drv_stopped(txq))) {
3346                 ret = NETDEV_TX_BUSY;
3347                 pkt_dev->last_ok = 0;
3348                 goto unlock;
3349         }
3350         atomic_inc(&(pkt_dev->skb->users));
3351         ret = netdev_start_xmit(pkt_dev->skb, odev, txq, false);
3352
3353         switch (ret) {
3354         case NETDEV_TX_OK:
3355                 pkt_dev->last_ok = 1;
3356                 pkt_dev->sofar++;
3357                 pkt_dev->seq_num++;
3358                 pkt_dev->tx_bytes += pkt_dev->last_pkt_size;
3359                 break;
3360         case NET_XMIT_DROP:
3361         case NET_XMIT_CN:
3362         case NET_XMIT_POLICED:
3363                 /* skb has been consumed */
3364                 pkt_dev->errors++;
3365                 break;
3366         default: /* Drivers are not supposed to return other values! */
3367                 net_info_ratelimited("%s xmit error: %d\n",
3368                                      pkt_dev->odevname, ret);
3369                 pkt_dev->errors++;
3370                 /* fallthru */
3371         case NETDEV_TX_LOCKED:
3372         case NETDEV_TX_BUSY:
3373                 /* Retry it next time */
3374                 atomic_dec(&(pkt_dev->skb->users));
3375                 pkt_dev->last_ok = 0;
3376         }
3377 unlock:
3378         HARD_TX_UNLOCK(odev, txq);
3379
3380         local_bh_enable();
3381
3382         /* If pkt_dev->count is zero, then run forever */
3383         if ((pkt_dev->count != 0) && (pkt_dev->sofar >= pkt_dev->count)) {
3384                 pktgen_wait_for_skb(pkt_dev);
3385
3386                 /* Done with this */
3387                 pktgen_stop_device(pkt_dev);
3388         }
3389 }
3390
3391 /*
3392  * Main loop of the thread goes here
3393  */
3394
3395 static int pktgen_thread_worker(void *arg)
3396 {
3397         DEFINE_WAIT(wait);
3398         struct pktgen_thread *t = arg;
3399         struct pktgen_dev *pkt_dev = NULL;
3400         int cpu = t->cpu;
3401
3402         BUG_ON(smp_processor_id() != cpu);
3403
3404         init_waitqueue_head(&t->queue);
3405         complete(&t->start_done);
3406
3407         pr_debug("starting pktgen/%d:  pid=%d\n", cpu, task_pid_nr(current));
3408
3409         set_freezable();
3410
3411         __set_current_state(TASK_RUNNING);
3412
3413         while (!kthread_should_stop()) {
3414                 pkt_dev = next_to_run(t);
3415
3416                 if (unlikely(!pkt_dev && t->control == 0)) {
3417                         if (t->net->pktgen_exiting)
3418                                 break;
3419                         wait_event_interruptible_timeout(t->queue,
3420                                                          t->control != 0,
3421                                                          HZ/10);
3422                         try_to_freeze();
3423                         continue;
3424                 }
3425
3426                 if (likely(pkt_dev)) {
3427                         pktgen_xmit(pkt_dev);
3428
3429                         if (need_resched())
3430                                 pktgen_resched(pkt_dev);
3431                         else
3432                                 cpu_relax();
3433                 }
3434
3435                 if (t->control & T_STOP) {
3436                         pktgen_stop(t);
3437                         t->control &= ~(T_STOP);
3438                 }
3439
3440                 if (t->control & T_RUN) {
3441                         pktgen_run(t);
3442                         t->control &= ~(T_RUN);
3443                 }
3444
3445                 if (t->control & T_REMDEVALL) {
3446                         pktgen_rem_all_ifs(t);
3447                         t->control &= ~(T_REMDEVALL);
3448                 }
3449
3450                 if (t->control & T_REMDEV) {
3451                         pktgen_rem_one_if(t);
3452                         t->control &= ~(T_REMDEV);
3453                 }
3454
3455                 try_to_freeze();
3456         }
3457         set_current_state(TASK_INTERRUPTIBLE);
3458
3459         pr_debug("%s stopping all device\n", t->tsk->comm);
3460         pktgen_stop(t);
3461
3462         pr_debug("%s removing all device\n", t->tsk->comm);
3463         pktgen_rem_all_ifs(t);
3464
3465         pr_debug("%s removing thread\n", t->tsk->comm);
3466         pktgen_rem_thread(t);
3467
3468         /* Wait for kthread_stop */
3469         while (!kthread_should_stop()) {
3470                 set_current_state(TASK_INTERRUPTIBLE);
3471                 schedule();
3472         }
3473         __set_current_state(TASK_RUNNING);
3474
3475         return 0;
3476 }
3477
3478 static struct pktgen_dev *pktgen_find_dev(struct pktgen_thread *t,
3479                                           const char *ifname, bool exact)
3480 {
3481         struct pktgen_dev *p, *pkt_dev = NULL;
3482         size_t len = strlen(ifname);
3483
3484         rcu_read_lock();
3485         list_for_each_entry_rcu(p, &t->if_list, list)
3486                 if (strncmp(p->odevname, ifname, len) == 0) {
3487                         if (p->odevname[len]) {
3488                                 if (exact || p->odevname[len] != '@')
3489                                         continue;
3490                         }
3491                         pkt_dev = p;
3492                         break;
3493                 }
3494
3495         rcu_read_unlock();
3496         pr_debug("find_dev(%s) returning %p\n", ifname, pkt_dev);
3497         return pkt_dev;
3498 }
3499
3500 /*
3501  * Adds a dev at front of if_list.
3502  */
3503
3504 static int add_dev_to_thread(struct pktgen_thread *t,
3505                              struct pktgen_dev *pkt_dev)
3506 {
3507         int rv = 0;
3508
3509         /* This function cannot be called concurrently, as its called
3510          * under pktgen_thread_lock mutex, but it can run from
3511          * userspace on another CPU than the kthread.  The if_lock()
3512          * is used here to sync with concurrent instances of
3513          * _rem_dev_from_if_list() invoked via kthread, which is also
3514          * updating the if_list */
3515         if_lock(t);
3516
3517         if (pkt_dev->pg_thread) {
3518                 pr_err("ERROR: already assigned to a thread\n");
3519                 rv = -EBUSY;
3520                 goto out;
3521         }
3522
3523         pkt_dev->running = 0;
3524         pkt_dev->pg_thread = t;
3525         list_add_rcu(&pkt_dev->list, &t->if_list);
3526
3527 out:
3528         if_unlock(t);
3529         return rv;
3530 }
3531
3532 /* Called under thread lock */
3533
3534 static int pktgen_add_device(struct pktgen_thread *t, const char *ifname)
3535 {
3536         struct pktgen_dev *pkt_dev;
3537         int err;
3538         int node = cpu_to_node(t->cpu);
3539
3540         /* We don't allow a device to be on several threads */
3541
3542         pkt_dev = __pktgen_NN_threads(t->net, ifname, FIND);
3543         if (pkt_dev) {
3544                 pr_err("ERROR: interface already used\n");
3545                 return -EBUSY;
3546         }
3547
3548         pkt_dev = kzalloc_node(sizeof(struct pktgen_dev), GFP_KERNEL, node);
3549         if (!pkt_dev)
3550                 return -ENOMEM;
3551
3552         strcpy(pkt_dev->odevname, ifname);
3553         pkt_dev->flows = vzalloc_node(MAX_CFLOWS * sizeof(struct flow_state),
3554                                       node);
3555         if (pkt_dev->flows == NULL) {
3556                 kfree(pkt_dev);
3557                 return -ENOMEM;
3558         }
3559
3560         pkt_dev->removal_mark = 0;
3561         pkt_dev->nfrags = 0;
3562         pkt_dev->delay = pg_delay_d;
3563         pkt_dev->count = pg_count_d;
3564         pkt_dev->sofar = 0;
3565         pkt_dev->udp_src_min = 9;       /* sink port */
3566         pkt_dev->udp_src_max = 9;
3567         pkt_dev->udp_dst_min = 9;
3568         pkt_dev->udp_dst_max = 9;
3569         pkt_dev->vlan_p = 0;
3570         pkt_dev->vlan_cfi = 0;
3571         pkt_dev->vlan_id = 0xffff;
3572         pkt_dev->svlan_p = 0;
3573         pkt_dev->svlan_cfi = 0;
3574         pkt_dev->svlan_id = 0xffff;
3575         pkt_dev->node = -1;
3576
3577         err = pktgen_setup_dev(t->net, pkt_dev, ifname);
3578         if (err)
3579                 goto out1;
3580         if (pkt_dev->odev->priv_flags & IFF_TX_SKB_SHARING)
3581                 pkt_dev->clone_skb = pg_clone_skb_d;
3582
3583         pkt_dev->entry = proc_create_data(ifname, 0600, t->net->proc_dir,
3584                                           &pktgen_if_fops, pkt_dev);
3585         if (!pkt_dev->entry) {
3586                 pr_err("cannot create %s/%s procfs entry\n",
3587                        PG_PROC_DIR, ifname);
3588                 err = -EINVAL;
3589                 goto out2;
3590         }
3591 #ifdef CONFIG_XFRM
3592         pkt_dev->ipsmode = XFRM_MODE_TRANSPORT;
3593         pkt_dev->ipsproto = IPPROTO_ESP;
3594
3595         /* xfrm tunnel mode needs additional dst to extract outter
3596          * ip header protocol/ttl/id field, here creat a phony one.
3597          * instead of looking for a valid rt, which definitely hurting
3598          * performance under such circumstance.
3599          */
3600         pkt_dev->dstops.family = AF_INET;
3601         pkt_dev->dst.dev = pkt_dev->odev;
3602         dst_init_metrics(&pkt_dev->dst, pktgen_dst_metrics, false);
3603         pkt_dev->dst.child = &pkt_dev->dst;
3604         pkt_dev->dst.ops = &pkt_dev->dstops;
3605 #endif
3606
3607         return add_dev_to_thread(t, pkt_dev);
3608 out2:
3609         dev_put(pkt_dev->odev);
3610 out1:
3611 #ifdef CONFIG_XFRM
3612         free_SAs(pkt_dev);
3613 #endif
3614         vfree(pkt_dev->flows);
3615         kfree(pkt_dev);
3616         return err;
3617 }
3618
3619 static int __net_init pktgen_create_thread(int cpu, struct pktgen_net *pn)
3620 {
3621         struct pktgen_thread *t;
3622         struct proc_dir_entry *pe;
3623         struct task_struct *p;
3624
3625         t = kzalloc_node(sizeof(struct pktgen_thread), GFP_KERNEL,
3626                          cpu_to_node(cpu));
3627         if (!t) {
3628                 pr_err("ERROR: out of memory, can't create new thread\n");
3629                 return -ENOMEM;
3630         }
3631
3632         spin_lock_init(&t->if_lock);
3633         t->cpu = cpu;
3634
3635         INIT_LIST_HEAD(&t->if_list);
3636
3637         list_add_tail(&t->th_list, &pn->pktgen_threads);
3638         init_completion(&t->start_done);
3639
3640         p = kthread_create_on_node(pktgen_thread_worker,
3641                                    t,
3642                                    cpu_to_node(cpu),
3643                                    "kpktgend_%d", cpu);
3644         if (IS_ERR(p)) {
3645                 pr_err("kernel_thread() failed for cpu %d\n", t->cpu);
3646                 list_del(&t->th_list);
3647                 kfree(t);
3648                 return PTR_ERR(p);
3649         }
3650         kthread_bind(p, cpu);
3651         t->tsk = p;
3652
3653         pe = proc_create_data(t->tsk->comm, 0600, pn->proc_dir,
3654                               &pktgen_thread_fops, t);
3655         if (!pe) {
3656                 pr_err("cannot create %s/%s procfs entry\n",
3657                        PG_PROC_DIR, t->tsk->comm);
3658                 kthread_stop(p);
3659                 list_del(&t->th_list);
3660                 kfree(t);
3661                 return -EINVAL;
3662         }
3663
3664         t->net = pn;
3665         wake_up_process(p);
3666         wait_for_completion(&t->start_done);
3667
3668         return 0;
3669 }
3670
3671 /*
3672  * Removes a device from the thread if_list.
3673  */
3674 static void _rem_dev_from_if_list(struct pktgen_thread *t,
3675                                   struct pktgen_dev *pkt_dev)
3676 {
3677         struct list_head *q, *n;
3678         struct pktgen_dev *p;
3679
3680         if_lock(t);
3681         list_for_each_safe(q, n, &t->if_list) {
3682                 p = list_entry(q, struct pktgen_dev, list);
3683                 if (p == pkt_dev)
3684                         list_del_rcu(&p->list);
3685         }
3686         if_unlock(t);
3687 }
3688
3689 static int pktgen_remove_device(struct pktgen_thread *t,
3690                                 struct pktgen_dev *pkt_dev)
3691 {
3692         pr_debug("remove_device pkt_dev=%p\n", pkt_dev);
3693
3694         if (pkt_dev->running) {
3695                 pr_warning("WARNING: trying to remove a running interface, stopping it now\n");
3696                 pktgen_stop_device(pkt_dev);
3697         }
3698
3699         /* Dis-associate from the interface */
3700
3701         if (pkt_dev->odev) {
3702                 dev_put(pkt_dev->odev);
3703                 pkt_dev->odev = NULL;
3704         }
3705
3706         /* Remove proc before if_list entry, because add_device uses
3707          * list to determine if interface already exist, avoid race
3708          * with proc_create_data() */
3709         if (pkt_dev->entry)
3710                 proc_remove(pkt_dev->entry);
3711
3712         /* And update the thread if_list */
3713         _rem_dev_from_if_list(t, pkt_dev);
3714
3715 #ifdef CONFIG_XFRM
3716         free_SAs(pkt_dev);
3717 #endif
3718         vfree(pkt_dev->flows);
3719         if (pkt_dev->page)
3720                 put_page(pkt_dev->page);
3721         kfree_rcu(pkt_dev, rcu);
3722         return 0;
3723 }
3724
3725 static int __net_init pg_net_init(struct net *net)
3726 {
3727         struct pktgen_net *pn = net_generic(net, pg_net_id);
3728         struct proc_dir_entry *pe;
3729         int cpu, ret = 0;
3730
3731         pn->net = net;
3732         INIT_LIST_HEAD(&pn->pktgen_threads);
3733         pn->pktgen_exiting = false;
3734         pn->proc_dir = proc_mkdir(PG_PROC_DIR, pn->net->proc_net);
3735         if (!pn->proc_dir) {
3736                 pr_warn("cannot create /proc/net/%s\n", PG_PROC_DIR);
3737                 return -ENODEV;
3738         }
3739         pe = proc_create(PGCTRL, 0600, pn->proc_dir, &pktgen_fops);
3740         if (pe == NULL) {
3741                 pr_err("cannot create %s procfs entry\n", PGCTRL);
3742                 ret = -EINVAL;
3743                 goto remove;
3744         }
3745
3746         for_each_online_cpu(cpu) {
3747                 int err;
3748
3749                 err = pktgen_create_thread(cpu, pn);
3750                 if (err)
3751                         pr_warn("Cannot create thread for cpu %d (%d)\n",
3752                                    cpu, err);
3753         }
3754
3755         if (list_empty(&pn->pktgen_threads)) {
3756                 pr_err("Initialization failed for all threads\n");
3757                 ret = -ENODEV;
3758                 goto remove_entry;
3759         }
3760
3761         return 0;
3762
3763 remove_entry:
3764         remove_proc_entry(PGCTRL, pn->proc_dir);
3765 remove:
3766         remove_proc_entry(PG_PROC_DIR, pn->net->proc_net);
3767         return ret;
3768 }
3769
3770 static void __net_exit pg_net_exit(struct net *net)
3771 {
3772         struct pktgen_net *pn = net_generic(net, pg_net_id);
3773         struct pktgen_thread *t;
3774         struct list_head *q, *n;
3775         LIST_HEAD(list);
3776
3777         /* Stop all interfaces & threads */
3778         pn->pktgen_exiting = true;
3779
3780         mutex_lock(&pktgen_thread_lock);
3781         list_splice_init(&pn->pktgen_threads, &list);
3782         mutex_unlock(&pktgen_thread_lock);
3783
3784         list_for_each_safe(q, n, &list) {
3785                 t = list_entry(q, struct pktgen_thread, th_list);
3786                 list_del(&t->th_list);
3787                 kthread_stop(t->tsk);
3788                 kfree(t);
3789         }
3790
3791         remove_proc_entry(PGCTRL, pn->proc_dir);
3792         remove_proc_entry(PG_PROC_DIR, pn->net->proc_net);
3793 }
3794
3795 static struct pernet_operations pg_net_ops = {
3796         .init = pg_net_init,
3797         .exit = pg_net_exit,
3798         .id   = &pg_net_id,
3799         .size = sizeof(struct pktgen_net),
3800 };
3801
3802 static int __init pg_init(void)
3803 {
3804         int ret = 0;
3805
3806         pr_info("%s", version);
3807         ret = register_pernet_subsys(&pg_net_ops);
3808         if (ret)
3809                 return ret;
3810         ret = register_netdevice_notifier(&pktgen_notifier_block);
3811         if (ret)
3812                 unregister_pernet_subsys(&pg_net_ops);
3813
3814         return ret;
3815 }
3816
3817 static void __exit pg_cleanup(void)
3818 {
3819         unregister_netdevice_notifier(&pktgen_notifier_block);
3820         unregister_pernet_subsys(&pg_net_ops);
3821         /* Don't need rcu_barrier() due to use of kfree_rcu() */
3822 }
3823
3824 module_init(pg_init);
3825 module_exit(pg_cleanup);
3826
3827 MODULE_AUTHOR("Robert Olsson <robert.olsson@its.uu.se>");
3828 MODULE_DESCRIPTION("Packet Generator tool");
3829 MODULE_LICENSE("GPL");
3830 MODULE_VERSION(VERSION);
3831 module_param(pg_count_d, int, 0);
3832 MODULE_PARM_DESC(pg_count_d, "Default number of packets to inject");
3833 module_param(pg_delay_d, int, 0);
3834 MODULE_PARM_DESC(pg_delay_d, "Default delay between packets (nanoseconds)");
3835 module_param(pg_clone_skb_d, int, 0);
3836 MODULE_PARM_DESC(pg_clone_skb_d, "Default number of copies of the same packet");
3837 module_param(debug, int, 0);
3838 MODULE_PARM_DESC(debug, "Enable debugging of pktgen module");