diff --git a/src/arp.c b/src/arp.c index 21e93c9..df07e91 100644 --- a/src/arp.c +++ b/src/arp.c @@ -396,7 +396,7 @@ static int arp_is_query_reply(struct arpMsg am[static 1]) static int arp_gen_probe_wait(struct client_state_t cs[static 1]) { // This is not a uniform distribution but it doesn't matter here. - return arp_probe_min + (nk_random_u32(&cs->rnd32_state) & 0x7fffffffu) + return arp_probe_min + (nk_random_u32(&cs->rnd_state) & 0x7fffffffu) % (arp_probe_max - arp_probe_min); } diff --git a/src/dhcp.c b/src/dhcp.c index 7f9b3f5..d81aadc 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -495,7 +495,7 @@ ssize_t send_decline(struct client_state_t cs[static 1], uint32_t server) ssize_t send_release(struct client_state_t cs[static 1]) { - struct dhcpmsg packet = {.xid = nk_random_u32(&cs->rnd32_state)}; + struct dhcpmsg packet = {.xid = nk_random_u32(&cs->rnd_state)}; init_packet(&packet, DHCPRELEASE); packet.ciaddr = cs->clientAddr; add_option_reqip(&packet, cs->clientAddr); diff --git a/src/duiaid.c b/src/duiaid.c index 4e97ec5..b84f61a 100644 --- a/src/duiaid.c +++ b/src/duiaid.c @@ -121,7 +121,7 @@ static int open_iaidfile_write(const uint8_t hwaddr[static 6], // RFC6355 specifies a RFC4122 UUID, but I simply use a 128-byte random // value, as the complexity of RFC4122 UUID generation is completely // unwarranted for DHCPv4. -static size_t generate_duid(struct nk_random_state_u32 s[static 1], +static size_t generate_duid(struct nk_random_state s[static 1], char dest[static 1], size_t dlen) { const size_t tlen = sizeof(uint16_t) + 4 * sizeof(uint32_t); @@ -143,7 +143,7 @@ static size_t generate_duid(struct nk_random_state_u32 s[static 1], // RFC6355 specifies the IAID as a 32-bit value that uniquely identifies // a hardware link for a given host. -static size_t generate_iaid(struct nk_random_state_u32 s[static 1], +static size_t generate_iaid(struct nk_random_state s[static 1], char dest[static 1], size_t dlen) { if (dlen < sizeof(uint32_t)) @@ -169,7 +169,7 @@ void get_clientid(struct client_state_t cs[static 1], int fd = open_iaidfile_read(cc->arp, sizeof cc->arp); if (fd < 0) { - iaid_len = generate_iaid(&cs->rnd32_state, iaid, sizeof iaid); + iaid_len = generate_iaid(&cs->rnd_state, iaid, sizeof iaid); fd = open_iaidfile_write(cc->arp, sizeof cc->arp); ssize_t r = safe_write(fd, iaid, iaid_len); if (r < 0 || (size_t)r != iaid_len) @@ -186,7 +186,7 @@ void get_clientid(struct client_state_t cs[static 1], fd = open_duidfile_read(); if (fd < 0) { - duid_len = generate_duid(&cs->rnd32_state, duid, sizeof duid); + duid_len = generate_duid(&cs->rnd_state, duid, sizeof duid); fd = open_duidfile_write(); ssize_t r = safe_write(fd, duid, duid_len); if (r < 0 || (size_t)r != duid_len) diff --git a/src/ndhc.c b/src/ndhc.c index 6f7a7a4..6ab6735 100644 --- a/src/ndhc.c +++ b/src/ndhc.c @@ -357,7 +357,7 @@ static void do_ndhc_work(void) // We can't do anything while the iface is disabled, anyway. // Suspend might cause link state change notifications to be // missed, so we use a non-infinite timeout. - timeout = 2000 + nk_random_u32(&cs.rnd32_state) % 3000; + timeout = 2000 + nk_random_u32(&cs.rnd_state) % 3000; continue; } @@ -370,7 +370,7 @@ static void do_ndhc_work(void) arp_wake_ts <= nowts, sev_signal); if (dhcp_ok == COR_ERROR) { - timeout = 2000 + nk_random_u32(&cs.rnd32_state) % 3000; + timeout = 2000 + nk_random_u32(&cs.rnd_state) % 3000; continue; } @@ -435,7 +435,7 @@ static void spawn_ifch(void) close(ifchSock[0]); close(ifchStream[0]); // Don't share the RNG state with the master process. - nk_random_u32_init(&cs.rnd32_state); + nk_random_init(&cs.rnd_state); ifch_main(); } else if (ifch_pid > 0) { close(ifchSock[1]); @@ -452,7 +452,7 @@ static void spawn_sockd(void) close(sockdSock[0]); close(sockdStream[0]); // Don't share the RNG state with the master process. - nk_random_u32_init(&cs.rnd32_state); + nk_random_init(&cs.rnd_state); sockd_main(); } else if (sockd_pid > 0) { close(sockdSock[1]); @@ -550,7 +550,7 @@ int main(int argc, char *argv[]) { parse_cmdline(argc, argv); - nk_random_u32_init(&cs.rnd32_state); + nk_random_init(&cs.rnd_state); if (getuid()) suicide("I need to be started as root."); diff --git a/src/ndhc.h b/src/ndhc.h index caf025a..a23a8f3 100644 --- a/src/ndhc.h +++ b/src/ndhc.h @@ -35,7 +35,7 @@ #include "nk/random.h" struct client_state_t { - struct nk_random_state_u32 rnd32_state; + struct nk_random_state rnd_state; long long leaseStartTime, renewTime, rebindTime; long long dhcp_wake_ts; int ifDeconfig; // Set if the interface has already been deconfigured. diff --git a/src/state.c b/src/state.c index 3ee7963..974b2b4 100644 --- a/src/state.c +++ b/src/state.c @@ -70,7 +70,7 @@ static int delay_timeout(struct client_state_t cs[static 1], size_t numpackets) if (numpackets < sizeof tot) to = tot[numpackets]; // Distribution is a bit biased but it doesn't really matter. - return to * 1000 + (nk_random_u32(&cs->rnd32_state) & 0x7fffffffu) % 1000; + return to * 1000 + (nk_random_u32(&cs->rnd_state) & 0x7fffffffu) % 1000; } static void reinit_shared_deconfig(struct client_state_t cs[static 1]) @@ -149,7 +149,7 @@ static int rebinding_timeout(struct client_state_t cs[static 1], client_config.interface); return BTO_HARDFAIL; } - long long ts0 = nowts + (50 + nk_random_u32(&cs->rnd32_state) % 20) * 1000; + long long ts0 = nowts + (50 + nk_random_u32(&cs->rnd_state) % 20) * 1000; cs->dhcp_wake_ts = ts0 < elt ? ts0 : elt; return BTO_WAIT; } @@ -172,7 +172,7 @@ static int renewing_timeout(struct client_state_t cs[static 1], client_config.interface); return BTO_HARDFAIL; } - long long ts0 = nowts + (50 + nk_random_u32(&cs->rnd32_state) % 20) * 1000; + long long ts0 = nowts + (50 + nk_random_u32(&cs->rnd_state) % 20) * 1000; cs->dhcp_wake_ts = ts0 < rbt ? ts0 : rbt; return BTO_WAIT; } @@ -354,7 +354,7 @@ static int selecting_timeout(struct client_state_t cs[static 1], suicide("%s: No lease; failing.", client_config.interface); } if (cs->num_dhcp_requests == 0) - cs->xid = nk_random_u32(&cs->rnd32_state); + cs->xid = nk_random_u32(&cs->rnd_state); if (send_discover(cs) < 0) { log_warning("%s: Failed to send a discover request packet.", client_config.interface); @@ -447,7 +447,7 @@ int dhcp_handle(struct client_state_t cs[static 1], long long nowts, { scrBegin; reinit: - cs->xid = nk_random_u32(&cs->rnd32_state); + cs->xid = nk_random_u32(&cs->rnd_state); // We're in the SELECTING state here. for (;;) { int ret = COR_SUCCESS;