void setup() override { qdb_test_template::setup(); setup_each([=](unsigned long iteration) { set_watermark(_content, iteration); _qdb.hset_insert(alias(0), _content); }); }
/** * Run as a daemon writing to random device entropy pool */ static void run_daemon( /* RETURN: nothing */ H_PTR h) /* IN: app instance */ { int random_fd = -1; struct rand_pool_info *output; if (0 != params->run_level) { anchor_info(h); return; } if (params->foreground==0) daemonize(); else printf ("%s starting up\n", params->daemon); if (0 != havege_run(h)) error_exit("Couldn't initialize HAVEGE rng %d", h->error); if (0 != (params->verbose & H_DEBUG_INFO)) anchor_info(h); if (params->low_water>0) set_watermark(params->low_water); random_fd = open(params->random_device, O_RDWR); if (random_fd == -1) error_exit("Couldn't open random device: %s", strerror(errno)); output = (struct rand_pool_info *) h->io_buf; for(;;) { int current,nbytes,r; fd_set write_fd; FD_ZERO(&write_fd); FD_SET(random_fd, &write_fd); for(;;) { int rc = select(random_fd+1, NULL, &write_fd, NULL, NULL); if (rc >= 0) break; if (errno != EINTR) error_exit("Select error: %s", strerror(errno)); } if (ioctl(random_fd, RNDGETENTCNT, ¤t) == -1) error_exit("Couldn't query entropy-level from kernel"); /* get number of bytes needed to fill pool */ nbytes = (poolSize - current)/8; if(nbytes<1) continue; /* get that many random bytes */ r = (nbytes+sizeof(H_UINT)-1)/sizeof(H_UINT); if (havege_rng(h, (H_UINT *)output->buf, r)<1) error_exit("RNG failed! %d", h->error); output->buf_size = nbytes; /* entropy is 8 bits per byte */ output->entropy_count = nbytes * 8; if (ioctl(random_fd, RNDADDENTROPY, output) == -1) error_exit("RNDADDENTROPY failed!"); } }
void run_iteration(unsigned long iteration) { set_watermark(_content, iteration); _qdb.hset_erase(alias(0), _content); }