diff options
author | Antonio Quartulli <ordex@autistici.org> | 2012-10-01 09:57:35 +0200 |
---|---|---|
committer | Antonio Quartulli <ordex@autistici.org> | 2012-11-07 20:00:18 +0100 |
commit | 7cdcf6dddc428c90ac867267a8d301e9e8b25612 (patch) | |
tree | 7cdbf95a57239352f9203b96dc915649bc0be253 /net/batman-adv/routing.c | |
parent | batman-adv: Mark correctly aligned headers not as __packed (diff) | |
download | linux-7cdcf6dddc428c90ac867267a8d301e9e8b25612.tar.xz linux-7cdcf6dddc428c90ac867267a8d301e9e8b25612.zip |
batman-adv: add UNICAST_4ADDR packet type
The current unicast packet type does not contain the orig source address. This
patches add a new unicast packet (called UNICAST_4ADDR) which provides two new
fields: the originator source address and the subtype (the type of the data
contained in the packet payload). The former is useful to identify the node
which injected the packet into the network and the latter is useful to avoid
creating new unicast packet types in the future: a macro defining a new subtype
will be enough.
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Diffstat (limited to 'net/batman-adv/routing.c')
-rw-r--r-- | net/batman-adv/routing.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c index 46dd5b47ed29..859679b08286 100644 --- a/net/batman-adv/routing.c +++ b/net/batman-adv/routing.c @@ -986,14 +986,18 @@ int batadv_recv_unicast_packet(struct sk_buff *skb, struct batadv_unicast_packet *unicast_packet; int hdr_size = sizeof(*unicast_packet); + unicast_packet = (struct batadv_unicast_packet *)skb->data; + + /* the caller function should have already pulled 2 bytes */ + if (unicast_packet->header.packet_type == BATADV_UNICAST_4ADDR) + hdr_size = sizeof(struct batadv_unicast_4addr_packet); + if (batadv_check_unicast_packet(skb, hdr_size) < 0) return NET_RX_DROP; if (!batadv_check_unicast_ttvn(bat_priv, skb)) return NET_RX_DROP; - unicast_packet = (struct batadv_unicast_packet *)skb->data; - /* packet for me */ if (batadv_is_my_mac(unicast_packet->dest)) { batadv_interface_rx(recv_if->soft_iface, skb, recv_if, hdr_size, |