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