rx: compare RX_ACK_TYPE_ACK as a bit-field 65/14465/5
authorJeffrey Altman <jaltman@auristor.com>
Fri, 2 Oct 2020 23:51:06 +0000 (19:51 -0400)
committerBenjamin Kaduk <kaduk@mit.edu>
Thu, 5 Aug 2021 15:33:47 +0000 (11:33 -0400)
commit7739d1e967177686e91a6ea86c73b404515a1c0d
tree41b71d134ea0ecb54c256eaccfcd29508f325870
parent9e043e1a0cdca7624de3e27872273263c57027ed
rx: compare RX_ACK_TYPE_ACK as a bit-field

The rx_ackPacket.acks array (the SACK table) consists of up to 255
octets.  Each octet stores either the value zero (RX_ACK_TYPE_NACK)
or one (RX_ACK_TYPE_ACK).  Effectively only bit-zero of each octet
is used.

The rx_ackPacket.acks array cannot be enlarged but one possible
method of encoding the ACK/NACK state for packets when the
window size is greater than 255 is to use bits 1-7 of each
octet.

This change alters the test for ACK vs NACK to be a bit comparison
instead of a equality comparison.  This change permits RX to be
compatible with any future use of bits 1-7.

No peer that treats the SACK table as bytes can ever send more
than 255 packets regardless of the advertised receive window.
Therefore, existing peers will never receive a SACK table with
more than 255 packets worth of bits.

Change-Id: I4dfcdc9ea18e060eeb257832297f557b7109e93a
Reviewed-on: https://gerrit.openafs.org/14465
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
src/rx/rx.c
src/rx/rx.h