docs: def addfield(self, pkt, s, val):
          # type: (Optional[packet.Packet], Union[str, Tuple[str, int, int]], int) -> str  # noqa: E501
          """ An AbstractUVarIntField prefix always consumes the remaining bits
            of a BitField;if no current BitField is in use (no tuple in
            entry) then the prefix length is 8 bits and the whole byte is to
            be consumed
          @param packet.Packet|None pkt: the packet containing this field. Probably unused.  # noqa: E501
          @param str|(str, int, long) s: the string to append this field to. A tuple indicates that some bits were already  # noqa: E501
            generated by another bitfield-compatible field. This MUST be the case if "size" is not 8. The int is the  # noqa: E501
            number of bits already generated in the first byte of the str. The long is the value that was generated by the  # noqa: E501
            previous bitfield-compatible fields.
          @param int val: the positive or null value to be added.
          @return str: s concatenated with the machine representation of this field.  # noqa: E501
          @raise AssertionError
          """
          assert(val >= 0)
          if isinstance(s, bytes):
              assert self.size == 8, 'EINVAL: s: tuple expected when prefix_len is not a full byte'  # noqa: E501
              return s + self.i2m(pkt, val)
  
          # s is a tuple
          # assert(s[1] >= 0)
          # assert(s[2] >= 0)
          # assert (8 - s[1]) == self.size, 'EINVAL: s: not enough bits remaining in current byte to read the prefix'  # noqa: E501
  
          if val >= self._max_value:
              return s[0] + chb((s[2] << self.size) + self._max_value) + self.i2m(pkt, val)[1:]  # noqa: E501
          # This AbstractUVarIntField is only one byte long; setting the prefix value  # noqa: E501
          # and appending the resulting byte to the string
          return s[0] + chb((s[2] << self.size) + orb(self.i2m(pkt, val)))