Skip to content

Commit eaf0b02

Browse files
authored
don't allow 0 pacing_bytes_per_ms & fix smaller bugs (holepunchto#261)
1 parent a23341e commit eaf0b02

2 files changed

Lines changed: 7 additions & 16 deletions

File tree

src/udx.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,6 +1064,7 @@ process_packet (udx_socket_t *socket, char *buf, ssize_t buf_len, struct sockadd
10641064
uint32_t lost = stream->lost;
10651065
uint32_t prior_remote_acked = stream->remote_acked;
10661066
bool ack_advanced = seq_diff(ack, prior_remote_acked) > 0;
1067+
bool data_inflight = stream->remote_acked != stream->seq;
10671068

10681069
buf += UDX_HEADER_SIZE;
10691070
buf_len -= UDX_HEADER_SIZE;
@@ -1263,8 +1264,8 @@ process_packet (udx_socket_t *socket, char *buf, ssize_t buf_len, struct sockadd
12631264
}
12641265
}
12651266

1266-
if (stream->packets_tx) {
1267-
// don't generate rates / do congestion control if we've never sent a packet..
1267+
if (data_inflight) {
1268+
// don't generate rates / do congestion control if nothing was in flight, and thus nothing could be acked and no new samples are generated
12681269
udx__rate_gen(stream, delivered, lost, &rs);
12691270
bbr_main(stream, &rs);
12701271
}
@@ -1493,8 +1494,6 @@ send_stream_packets (udx_socket_t *socket, udx_stream_t *stream) {
14931494
if (rc == UV_EAGAIN) {
14941495
return false;
14951496
}
1496-
// todo: do we actually want to do this for state packets?
1497-
udx__rate_pkt_sent(stream, pkt);
14981497

14991498
// if this ACK packet acks the remote's END packet, advance from ENDING_REMOTE -> ENDED_REMOTE
15001499
if ((stream->status & UDX_STREAM_SHOULD_END_REMOTE) == UDX_STREAM_END_REMOTE && seq_compare(stream->remote_ended, stream->ack) <= 0) {
@@ -1538,9 +1537,6 @@ send_stream_packets (udx_socket_t *socket, udx_stream_t *stream) {
15381537
return false;
15391538
}
15401539

1541-
// todo: do we want to generate rate info on this packet
1542-
udx__rate_pkt_sent(stream, pkt);
1543-
15441540
stream->packets_tx++;
15451541
stream->bytes_tx += pkt->size;
15461542

src/udx_bbr.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,11 @@ bbr_extra_acked (udx_stream_t *stream) {
8484
return max_uint32(stream->bbr.extra_acked[0], stream->bbr.extra_acked[1]);
8585
}
8686

87-
static uint64_t
88-
bbr_rate_in_bytes (udx_stream_t *stream, double bw, double gain) {
89-
uint32_t mss = udx__max_payload(stream);
90-
91-
return bw * mss * gain * bbr_pacing_margin_percent;
92-
}
93-
9487
static uint64_t
9588
bbr_bw_to_pacing_rate (udx_stream_t *stream, double bw, double gain) {
96-
return bbr_rate_in_bytes(stream, bw, gain);
89+
uint32_t mss = udx__max_payload(stream);
90+
uint64_t bpms = bw * mss * gain * bbr_pacing_margin_percent;
91+
return max_uint64(bpms, 1);
9792
}
9893

9994
static void
@@ -131,7 +126,7 @@ static void
131126
bbr_save_cwnd (udx_stream_t *stream) {
132127
// save last known cwnd when entering recovery, we use it to restore
133128
// after completing recovery successfully
134-
if (stream->bbr.prev_ca_state < UDX_CA_RECOVERY && stream->bbr.state != UDX_BBR_MIN_PROBE_RTT_MODE_MS) {
129+
if (stream->bbr.prev_ca_state < UDX_CA_RECOVERY && stream->bbr.state != UDX_BBR_STATE_PROBE_RTT) {
135130
stream->bbr.prior_cwnd = stream->cwnd;
136131
} else {
137132
stream->bbr.prior_cwnd = max_uint32(stream->bbr.prior_cwnd, stream->cwnd);

0 commit comments

Comments
 (0)