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