Skip to content

Commit

Permalink
pktgen: Allow pktgenctl to specify # of packets to be queued onto TX …
Browse files Browse the repository at this point in the history
…queue
  • Loading branch information
Sepherosa Ziehau committed Jan 6, 2013
1 parent dfd3b18 commit 793f802
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 9 deletions.
17 changes: 14 additions & 3 deletions tools/tools/netrate/pktgen/pktgen.c
Expand Up @@ -95,6 +95,8 @@ struct pktgen {
int pktg_datalen; int pktg_datalen;
struct ifnet *pktg_ifp; struct ifnet *pktg_ifp;


int pktg_pktenq;

struct sockaddr_in pktg_src; struct sockaddr_in pktg_src;
int pktg_ndst; int pktg_ndst;
struct sockaddr_in *pktg_dst; struct sockaddr_in *pktg_dst;
Expand Down Expand Up @@ -247,7 +249,7 @@ pktgen_config(struct pktgen *pktg, const struct pktgen_conf *conf)
const struct sockaddr *sa; const struct sockaddr *sa;
struct ifnet *ifp; struct ifnet *ifp;
size_t dst_size; size_t dst_size;
int i, error; int i, error, pktenq;


if (pktg->pktg_flags & (PKTG_F_RUNNING | PKTG_F_CONFIG)) if (pktg->pktg_flags & (PKTG_F_RUNNING | PKTG_F_CONFIG))
return EBUSY; return EBUSY;
Expand Down Expand Up @@ -294,6 +296,14 @@ pktgen_config(struct pktgen *pktg, const struct pktgen_conf *conf)
goto failed; goto failed;
} }


pktenq = conf->pc_pktenq;
if (pktenq < 0 || pktenq > ifp->if_snd.ifq_maxlen) {
error = ENOBUFS;
goto failed;
} else if (pktenq == 0) {
pktenq = (ifp->if_snd.ifq_maxlen * 3) / 4;
}

sa = &conf->pc_dst_lladdr; sa = &conf->pc_dst_lladdr;
if (sa->sa_family != AF_LINK) { if (sa->sa_family != AF_LINK) {
error = EPROTONOSUPPORT; error = EPROTONOSUPPORT;
Expand All @@ -316,6 +326,7 @@ pktgen_config(struct pktgen *pktg, const struct pktgen_conf *conf)


pktg->pktg_duration = conf->pc_duration; pktg->pktg_duration = conf->pc_duration;
pktg->pktg_datalen = conf->pc_datalen; pktg->pktg_datalen = conf->pc_datalen;
pktg->pktg_pktenq = pktenq;
pktg->pktg_ifp = ifp; pktg->pktg_ifp = ifp;
pktg->pktg_src = conf->pc_src; pktg->pktg_src = conf->pc_src;
pktg->pktg_ndst = conf->pc_ndst; pktg->pktg_ndst = conf->pc_ndst;
Expand Down Expand Up @@ -354,8 +365,8 @@ pktgen_start(struct pktgen *pktg)
if (cpuid != orig_cpuid) if (cpuid != orig_cpuid)
lwkt_migratecpu(cpuid); lwkt_migratecpu(cpuid);


alloc_cnt = ifp->if_snd.ifq_maxlen * 2; keep_cnt = pktg->pktg_pktenq;
keep_cnt = (ifp->if_snd.ifq_maxlen * 3) / 4; alloc_cnt = keep_cnt * 2;


/* /*
* Prefault enough mbuf into mbuf objcache * Prefault enough mbuf into mbuf objcache
Expand Down
1 change: 1 addition & 0 deletions tools/tools/netrate/pktgen/pktgen.h
Expand Up @@ -46,6 +46,7 @@ struct pktgen_conf {
struct sockaddr_in pc_src; struct sockaddr_in pc_src;
int pc_ndst; int pc_ndst;
struct sockaddr_in *pc_dst; struct sockaddr_in *pc_dst;
int pc_pktenq;
}; };


#define PKTGENSTART _IO('G', 19) #define PKTGENSTART _IO('G', 19)
Expand Down
12 changes: 6 additions & 6 deletions tools/tools/netrate/pktgenctl/pktgenctl.c
Expand Up @@ -60,8 +60,6 @@
#define INSRC_MASK 0x0002 #define INSRC_MASK 0x0002
#define EADDR_MASK 0x0004 #define EADDR_MASK 0x0004
#define IFACE_MASK 0x0008 #define IFACE_MASK 0x0008
#define DATALEN_MASK 0x0010
#define DURATION_MASK 0x0020


#define MASK_NEEDED (INDST_MASK | INSRC_MASK | EADDR_MASK | IFACE_MASK) #define MASK_NEEDED (INDST_MASK | INSRC_MASK | EADDR_MASK | IFACE_MASK)


Expand All @@ -72,7 +70,7 @@ usage(void)
"-d dst_inaddr[:dst_port] [-d dst_inaddr[:dst_port] ...] " "-d dst_inaddr[:dst_port] [-d dst_inaddr[:dst_port] ...] "
"-s src_inaddr[:src_port] " "-s src_inaddr[:src_port] "
"-e (gw_eaddr|dst_eaddr) -i iface " "-e (gw_eaddr|dst_eaddr) -i iface "
"[-m data_len] [-l duration] [-D dev]\n"); "[-m data_len] [-l duration] [-D dev] [-q pktenq]\n");
exit(1); exit(1);
} }


Expand Down Expand Up @@ -123,7 +121,7 @@ main(int argc, char *argv[])
err(1, "calloc(%d dst)", ndst_alloc); err(1, "calloc(%d dst)", ndst_alloc);


conf.pc_ndst = 0; conf.pc_ndst = 0;
while ((c = getopt(argc, argv, "d:s:e:i:m:l:D:")) != -1) { while ((c = getopt(argc, argv, "d:s:e:i:m:l:D:q:")) != -1) {
switch (c) { switch (c) {
case 'd': case 'd':
if (conf.pc_ndst >= ndst_alloc) { if (conf.pc_ndst >= ndst_alloc) {
Expand Down Expand Up @@ -182,18 +180,20 @@ main(int argc, char *argv[])


case 'm': case 'm':
conf.pc_datalen = atoi(optarg); conf.pc_datalen = atoi(optarg);
arg_mask |= DATALEN_MASK;
break; break;


case 'l': case 'l':
conf.pc_duration = atoi(optarg); conf.pc_duration = atoi(optarg);
arg_mask |= DURATION_MASK;
break; break;


case 'D': case 'D':
dev = optarg; dev = optarg;
break; break;


case 'q':
conf.pc_pktenq = atoi(optarg);
break;

default: default:
usage(); usage();
} }
Expand Down

0 comments on commit 793f802

Please sign in to comment.