in util/netconsblaster.c [320:399]
static void parse_arguments(int argc, char **argv, struct params *p)
{
int i;
/*
* Defaults
*/
p->srcaddr_order = 16;
p->thread_order = 0;
memcpy(&p->src, &in6addr_loopback, sizeof(in6addr_loopback));
memcpy(&p->dst, &in6addr_loopback, sizeof(in6addr_loopback));
p->blastcount = 0;
p->stop_blasting = 0;
static const char *optstr = "o:s:d:t:n:";
static const struct option optlong[] = {
{
.name = "help",
.has_arg = no_argument,
.val = 'h',
},
{
.name = NULL,
},
};
while ((i = getopt_long(argc, argv, optstr, optlong, NULL)) != -1) {
switch (i) {
case 'o':
/*
* Controls the number of bits to randomly flip in the
* actual IPv6 address of this machine. So the program
* will effectively simulate 2^N clients.
*/
p->srcaddr_order = atoi(optarg);
if (p->srcaddr_order > 64 - 8)
fatal("Source address order too large\n");
break;
case 't':
/*
* Split the work among 2^N worker threads.
*/
p->thread_order = atoi(optarg);
if (p->thread_order > 8)
fatal("Largest supported thread order is 8\n");
break;
case 's':
/*
* Source address to permute the low N bits of.
*/
if (inet_pton(AF_INET6, optarg, &p->src) != 1)
fatal("Bad src '%s': %m\n", optarg);
break;
case 'd':
/*
* Destination address for all generated packets.
*/
if (inet_pton(AF_INET6, optarg, &p->dst) != 1)
fatal("Bad dst '%s': %m\n", optarg);
break;
case 'n':
/*
* Write N packets from each worker thread and exit.
*/
p->blastcount = atol(optarg);
break;
case 'h':
puts("Usage: netconsblaster [-o srcaddr_bits] [-t thread_order]\n"
" [-s srcaddr] [-d dstaddr]\n"
" [-n pktcount]\n");
puts(" srcaddr_bits: Randomize low N bits of srcaddr");
puts(" thread_order: Split work among 2^N threads");
puts(" pktcount: Stop after N pkts per thread\n");
exit(0);
default:
fatal("Invalid command line parameters\n");
}
}
}