Skip to content

Commit

Permalink
MINOR: dev/udp: Apply the corruption to both directions
Browse files Browse the repository at this point in the history
Harden the UDP datagram corruption applying it on both sides. This approaches
the conditions of some tests run by the QUIC interop runner developed by
Marten Seeman.
  • Loading branch information
haproxyFred committed Sep 8, 2022
1 parent 3dd79d3 commit 192093b
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions dev/udp/udp-perturb.c
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,18 @@ int add_connection(struct sockaddr_storage *ss)
return -1;
}

/* Corrupt <buf> buffer with <buflen> as length if required */
static void pktbuf_apply_corruption(char *buf, size_t buflen)
{
if (corr_rate > 0 && prng(100) < corr_rate) {
unsigned int rnd = prng(corr_span * 256); // pos and value
unsigned int pos = corr_base + (rnd >> 8);

if (pos < buflen)
buf[pos] ^= rnd;
}
}

/* Handle a read operation on an front FD. Will either reuse the existing
* connection if the source is found, or will allocate a new one, possibly
* replacing the oldest one. Returns <0 on error or the number of bytes
Expand Down Expand Up @@ -323,13 +335,7 @@ int handle_frt(int fd, struct pollfd *pfd, struct conn *conns, int nbconn)
if (ret < 0)
return errno == EAGAIN ? 0 : -1;

if (corr_rate > 0 && prng(100) < corr_rate) {
unsigned int rnd = prng(corr_span * 256); // pos and value
unsigned int pos = corr_base + (rnd >> 8);

if (pos < ret)
pktbuf[pos] ^= rnd;
}
pktbuf_apply_corruption(pktbuf, ret);

conn = NULL;
for (i = 0; i < nbconn; i++) {
Expand Down Expand Up @@ -411,6 +417,8 @@ int handle_bck(int fd, struct pollfd *pfd, struct conn *conns, int nbconn)
if (ret < 0)
return errno == EAGAIN ? 0 : -1;

pktbuf_apply_corruption(pktbuf, ret);

conn = conn_bck_lookup(conns, nbconn, fd);
if (!conn)
return 0;
Expand Down

0 comments on commit 192093b

Please sign in to comment.