#include <asm/timex.h>
-#define VERSION "pktgen v2.54: Packet Generator for packet performance testing.\n"
+#define VERSION "pktgen v2.56: Packet Generator for packet performance testing.\n"
/* #define PG_DEBUG(a) a */
#define PG_DEBUG(a)
#define F_TXSIZE_RND (1<<6) /* Transmit size is random */
#define F_IPV6 (1<<7) /* Interface in IPV6 Mode */
-#define L_PUSH(t, i) {i->next = t; t=i;}
-#define L_POP(t, i) {i=t; if(i) t = i->next;}
-
/* Thread control flag bits */
#define T_TERMINATE (1<<0)
#define T_STOP (1<<1) /* Stop run */
p += sprintf(p, "Running: ");
if_lock(t);
- pkt_dev = t->if_list;
- while (pkt_dev && pkt_dev->running) {
- p += sprintf(p, "%s ", pkt_dev->ifname);
- pkt_dev = pkt_dev->next;
- }
+ for(pkt_dev = t->if_list;pkt_dev; pkt_dev = pkt_dev->next)
+ if(pkt_dev->running)
+ p += sprintf(p, "%s ", pkt_dev->ifname);
+
p += sprintf(p, "\nStopped: ");
- pkt_dev = t->if_list;
- while (pkt_dev && !pkt_dev->running) {
- p += sprintf(p, "%s ", pkt_dev->ifname);
- pkt_dev = pkt_dev->next;
- }
-
+ for(pkt_dev = t->if_list;pkt_dev; pkt_dev = pkt_dev->next)
+ if(!pkt_dev->running)
+ p += sprintf(p, "%s ", pkt_dev->ifname);
if (t->result[0])
p += sprintf(p, "\nResult: %s\n", t->result);
thread_unlock();
}
-static int running(struct pktgen_thread *t )
+static int thread_is_running(struct pktgen_thread *t )
{
struct pktgen_dev *next;
int res = 0;
if_lock(t);
- while(running(t)) {
+ while(thread_is_running(t)) {
if_unlock(t);
interruptible_sleep_on_timeout(&queue, HZ/10);
return -EINVAL;
}
- if (pkt_dev->skb)
- kfree_skb(pkt_dev->skb);
-
pkt_dev->stopped_at = getCurUs();
pkt_dev->running = 0;
show_results(pkt_dev, skb_shinfo(pkt_dev->skb)->nr_frags);
+
+ if (pkt_dev->skb)
+ kfree_skb(pkt_dev->skb);
+
+ pkt_dev->skb = NULL;
return 0;
}
for(pkt_dev=t->if_list; pkt_dev; pkt_dev = pkt_dev->next ) {
if (strcmp(pkt_dev->ifname, ifname) == 0) {
- goto out;
+ break;
}
}
- out:
+
if_unlock(t);
PG_DEBUG(printk("pktgen: find_dev(%s) returning %p\n", ifname,pkt_dev));
return pkt_dev;
rv = -EBUSY;
goto out;
}
-
- L_PUSH(t->if_list, pkt_dev);
+ pkt_dev->next =t->if_list; t->if_list=pkt_dev;
pkt_dev->pg_thread = t;
pkt_dev->running = 0;