static void random_close(struct sol_flow_node *node, void *data) { struct random_node_data *mdata = data; sol_random_del(mdata->engine); }
static int random_seed_set(struct sol_flow_node *node, void *data, uint16_t port, uint16_t conn_id, const struct sol_flow_packet *packet) { struct random_node_data *mdata = data; int r; int32_t in_value; r = sol_flow_packet_get_irange_value(packet, &in_value); SOL_INT_CHECK(r, < 0, r); sol_random_del(mdata->engine); mdata->engine = sol_random_new(SOL_RANDOM_DEFAULT, in_value); SOL_NULL_CHECK(mdata->engine, -EINVAL); return 0; }
static int uuid_gen(struct sol_uuid *ret) { struct sol_buffer buf = SOL_BUFFER_INIT_FLAGS(ret, sizeof(*ret), SOL_BUFFER_FLAGS_MEMORY_NOT_OWNED | SOL_BUFFER_FLAGS_NO_NUL_BYTE); struct sol_random *engine; ssize_t size; SOL_NULL_CHECK(ret, -EINVAL); engine = sol_random_new(SOL_RANDOM_DEFAULT, 0); SOL_NULL_CHECK(engine, -errno); size = sol_random_fill_buffer(engine, &buf, sizeof(*ret)); sol_random_del(engine); sol_buffer_fini(&buf); if (size != (ssize_t)sizeof(*ret)) return -EIO; *ret = assert_uuid_v4(*ret); return 0; }