Re: [B.A.T.M.A.N.] Combination of flags in tt_query packets

Sven Eckelmann
2011-06-13T14:29:16Z

[-- Attachment #1: Type: Text/Plain, Size: 2511 bytes --]

Antonio Quartulli wrote:
> > just looked a little bit closer at your tt_query implementation and was
> > reminded that we had a small discussion in IRC some weeks ago.
> >
> > <ecsv> can those flags be mixed?
> > <ordex> mixed? in which way?
> > <ecsv> request | table -> still a valid package
> > <ecsv> sry, packet
> > <ordex> yes it is, because it means "I'm requesting a full table"
> > <ordex> all the combinations are valid
> >
> > This sounds wrong when I look at the tt_query packet. There we have a
> > tt_data field which can used used exclusive by either TT_REQUEST (x)or
> > TT_RESPONSE. Therefore, it is not possible to use both flags at the same
> > time. Can you please explain how this is handled or otherwise change it
> > so that only one bit in flags is used to decide if it is an response or
> > a request.
>
> At the beginning we had one bit only with this meaning:
>
> 0 => TT_REQUEST
> 1 => TT_RESPONSE

Could be correct - never followed the discussion in detail. I asked Marek and
he said something about roaming.

> But then we had a disussion about:
> 1) what will we do if we want to add more packet types in the future?

Depends on the type. For example full-table creates different packet types
together with the TT_REQUEST and TT_RESPONSE. But using TT_REQUEST and
TT_RESPONSE together doesn't work at all. So forget about the flag and think
more about a currently undefined amount of bits which encode the type of
packet. Encoding the request and reply in two different bits and call them
flags doesn't really make sense.

> 2) is it correct or not to use 0x0 as flag?

A not existing bit position is not really a "flag". The bit at position zero
(lsb) could be used as flag to decide if it is a request or a response - but
using nothing to store something is... <please insert your favourite swear
word here>.

> Regarding 1) I thought that using a "two bits flag" could help in reserving
> two configurations more for the future (0x0 and 0x3).

Then you say that you don't use flags but 2 bits to store 2 values. Please
don't use it in your code as flags, but use something like (x & TT_TYPE_MASK)
to extract the corresponding bits and compare the resulting values against
representation of TT_RESPONSE and TT_RESPONSE (TT_TYPE_MASK would be 0x3,
TT_RESPONSE 0 and TT_REQUEST 3). Also remove the TT_RESPONSE and TT_REQUEST
from the enum tt_query_flags and use another enum for them.