From: Antonio Quartulli ordex@autistici.org
The tt_query subtype is represented by the two leading bits (lsb) of the tt_query->flags field. Therefore it cannot be handled by simple "flags" but by two bits wide integer. The TT_QUERY_TYPE_MASK is used to extract the relevant bits that can be compared to the related enum values (TT_RESPONSE, TT_REQUEST)
Signed-off-by: Antonio Quartulli ordex@autistici.org Signed-off-by: Sven Eckelmann sven@narfation.org --- * Just added three missing tabs as mentioned in the last mail.
packet.h | 10 ++++++++-- routing.c | 34 ++++++++++++++++++---------------- 2 files changed, 26 insertions(+), 18 deletions(-)
diff --git a/packet.h b/packet.h index ef7476f..c5f081d 100644 --- a/packet.h +++ b/packet.h @@ -65,10 +65,16 @@ enum unicast_frag_flags { UNI_FRAG_LARGETAIL = 1 << 1 };
+/* TT_QUERY subtypes */ +#define TT_QUERY_TYPE_MASK 0x3 + +enum tt_query_packettype { + TT_REQUEST = 0, + TT_RESPONSE = 1 +}; + /* TT_QUERY flags */ enum tt_query_flags { - TT_RESPONSE = 1 << 0, - TT_REQUEST = 1 << 1, TT_FULL_TABLE = 1 << 2 };
diff --git a/routing.c b/routing.c index 7f458e9..3a3cfb8 100644 --- a/routing.c +++ b/routing.c @@ -1218,7 +1218,8 @@ int recv_tt_query(struct sk_buff *skb, struct hard_iface *recv_if)
tt_query->tt_data = ntohs(tt_query->tt_data);
- if (tt_query->flags & TT_REQUEST) { + switch (tt_query->flags & TT_QUERY_TYPE_MASK) { + case TT_REQUEST: /* If we cannot provide an answer the tt_request is * forwarded */ if (!send_tt_response(bat_priv, tt_query)) { @@ -1229,22 +1230,23 @@ int recv_tt_query(struct sk_buff *skb, struct hard_iface *recv_if) tt_query->tt_data = htons(tt_query->tt_data); return route_unicast_packet(skb, recv_if); } - ret = NET_RX_SUCCESS; - goto out; - } - /* packet needs to be linearised to access the TT changes records */ - if (skb_linearize(skb) < 0) - goto out; + break; + case TT_RESPONSE: + /* packet needs to be linearised to access the TT changes records */ + if (skb_linearize(skb) < 0) + goto out;
- if (is_my_mac(tt_query->dst)) - handle_tt_response(bat_priv, tt_query); - else { - bat_dbg(DBG_TT, bat_priv, - "Routing TT_RESPONSE to %pM [%c]\n", - tt_query->dst, - (tt_query->flags & TT_FULL_TABLE ? 'F' : '.')); - tt_query->tt_data = htons(tt_query->tt_data); - return route_unicast_packet(skb, recv_if); + if (is_my_mac(tt_query->dst)) + handle_tt_response(bat_priv, tt_query); + else { + bat_dbg(DBG_TT, bat_priv, + "Routing TT_RESPONSE to %pM [%c]\n", + tt_query->dst, + (tt_query->flags & TT_FULL_TABLE ? 'F' : '.')); + tt_query->tt_data = htons(tt_query->tt_data); + return route_unicast_packet(skb, recv_if); + } + break; } ret = NET_RX_SUCCESS;