diff options
Diffstat (limited to 'target/linux/generic/backport-4.14/273-batman-adv-Convert-packet.h-to-uapi-header.patch')
-rw-r--r-- | target/linux/generic/backport-4.14/273-batman-adv-Convert-packet.h-to-uapi-header.patch | 1665 |
1 files changed, 0 insertions, 1665 deletions
diff --git a/target/linux/generic/backport-4.14/273-batman-adv-Convert-packet.h-to-uapi-header.patch b/target/linux/generic/backport-4.14/273-batman-adv-Convert-packet.h-to-uapi-header.patch deleted file mode 100644 index a9f744fd13..0000000000 --- a/target/linux/generic/backport-4.14/273-batman-adv-Convert-packet.h-to-uapi-header.patch +++ /dev/null @@ -1,1665 +0,0 @@ -From: Sven Eckelmann <sven.eckelmann@openmesh.com> -Date: Thu, 21 Dec 2017 10:17:41 +0100 -Subject: [PATCH] batman-adv: Convert packet.h to uapi header - -The header file is used by different userspace programs to inject packets -or to decode sniffed packets. It should therefore be available to them as -userspace header. - -Also other components in the kernel (like the flow dissector) require -access to the packet definitions to be able to decode ETH_P_BATMAN ethernet -packets. - -Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - rename net/batman-adv/packet.h => include/uapi/linux/batadv_packet.h (99%) - ---- a/MAINTAINERS -+++ b/MAINTAINERS -@@ -2551,6 +2551,7 @@ S: Maintained - F: Documentation/ABI/testing/sysfs-class-net-batman-adv - F: Documentation/ABI/testing/sysfs-class-net-mesh - F: Documentation/networking/batman-adv.rst -+F: include/uapi/linux/batadv_packet.h - F: include/uapi/linux/batman_adv.h - F: net/batman-adv/ - ---- a/net/batman-adv/bat_iv_ogm.c -+++ b/net/batman-adv/bat_iv_ogm.c -@@ -52,6 +52,7 @@ - #include <linux/workqueue.h> - #include <net/genetlink.h> - #include <net/netlink.h> -+#include <uapi/linux/batadv_packet.h> - #include <uapi/linux/batman_adv.h> - - #include "bat_algo.h" -@@ -63,7 +64,6 @@ - #include "netlink.h" - #include "network-coding.h" - #include "originator.h" --#include "packet.h" - #include "routing.h" - #include "send.h" - #include "translation-table.h" ---- a/net/batman-adv/bat_v.c -+++ b/net/batman-adv/bat_v.c -@@ -36,6 +36,7 @@ - #include <linux/workqueue.h> - #include <net/genetlink.h> - #include <net/netlink.h> -+#include <uapi/linux/batadv_packet.h> - #include <uapi/linux/batman_adv.h> - - #include "bat_algo.h" -@@ -48,7 +49,6 @@ - #include "log.h" - #include "netlink.h" - #include "originator.h" --#include "packet.h" - - struct sk_buff; - ---- a/net/batman-adv/bat_v_elp.c -+++ b/net/batman-adv/bat_v_elp.c -@@ -41,13 +41,13 @@ - #include <linux/types.h> - #include <linux/workqueue.h> - #include <net/cfg80211.h> -+#include <uapi/linux/batadv_packet.h> - - #include "bat_algo.h" - #include "bat_v_ogm.h" - #include "hard-interface.h" - #include "log.h" - #include "originator.h" --#include "packet.h" - #include "routing.h" - #include "send.h" - ---- a/net/batman-adv/bat_v_ogm.c -+++ b/net/batman-adv/bat_v_ogm.c -@@ -40,13 +40,13 @@ - #include <linux/string.h> - #include <linux/types.h> - #include <linux/workqueue.h> -+#include <uapi/linux/batadv_packet.h> - - #include "bat_algo.h" - #include "hard-interface.h" - #include "hash.h" - #include "log.h" - #include "originator.h" --#include "packet.h" - #include "routing.h" - #include "send.h" - #include "translation-table.h" ---- a/net/batman-adv/bridge_loop_avoidance.c -+++ b/net/batman-adv/bridge_loop_avoidance.c -@@ -49,6 +49,7 @@ - #include <net/genetlink.h> - #include <net/netlink.h> - #include <net/sock.h> -+#include <uapi/linux/batadv_packet.h> - #include <uapi/linux/batman_adv.h> - - #include "hard-interface.h" -@@ -56,7 +57,6 @@ - #include "log.h" - #include "netlink.h" - #include "originator.h" --#include "packet.h" - #include "soft-interface.h" - #include "sysfs.h" - #include "translation-table.h" ---- a/net/batman-adv/distributed-arp-table.h -+++ b/net/batman-adv/distributed-arp-table.h -@@ -23,9 +23,9 @@ - #include <linux/compiler.h> - #include <linux/netdevice.h> - #include <linux/types.h> -+#include <uapi/linux/batadv_packet.h> - - #include "originator.h" --#include "packet.h" - - struct seq_file; - struct sk_buff; ---- a/net/batman-adv/fragmentation.c -+++ b/net/batman-adv/fragmentation.c -@@ -32,10 +32,10 @@ - #include <linux/slab.h> - #include <linux/spinlock.h> - #include <linux/string.h> -+#include <uapi/linux/batadv_packet.h> - - #include "hard-interface.h" - #include "originator.h" --#include "packet.h" - #include "routing.h" - #include "send.h" - #include "soft-interface.h" ---- a/net/batman-adv/gateway_client.c -+++ b/net/batman-adv/gateway_client.c -@@ -43,6 +43,7 @@ - #include <linux/stddef.h> - #include <linux/udp.h> - #include <net/sock.h> -+#include <uapi/linux/batadv_packet.h> - #include <uapi/linux/batman_adv.h> - - #include "gateway_common.h" -@@ -50,7 +51,6 @@ - #include "log.h" - #include "netlink.h" - #include "originator.h" --#include "packet.h" - #include "routing.h" - #include "soft-interface.h" - #include "sysfs.h" ---- a/net/batman-adv/gateway_common.c -+++ b/net/batman-adv/gateway_common.c -@@ -26,10 +26,10 @@ - #include <linux/netdevice.h> - #include <linux/stddef.h> - #include <linux/string.h> -+#include <uapi/linux/batadv_packet.h> - - #include "gateway_client.h" - #include "log.h" --#include "packet.h" - #include "tvlv.h" - - /** ---- a/net/batman-adv/hard-interface.c -+++ b/net/batman-adv/hard-interface.c -@@ -37,6 +37,7 @@ - #include <linux/spinlock.h> - #include <net/net_namespace.h> - #include <net/rtnetlink.h> -+#include <uapi/linux/batadv_packet.h> - - #include "bat_v.h" - #include "bridge_loop_avoidance.h" -@@ -45,7 +46,6 @@ - #include "gateway_client.h" - #include "log.h" - #include "originator.h" --#include "packet.h" - #include "send.h" - #include "soft-interface.h" - #include "sysfs.h" ---- a/net/batman-adv/icmp_socket.c -+++ b/net/batman-adv/icmp_socket.c -@@ -42,11 +42,11 @@ - #include <linux/string.h> - #include <linux/uaccess.h> - #include <linux/wait.h> -+#include <uapi/linux/batadv_packet.h> - - #include "hard-interface.h" - #include "log.h" - #include "originator.h" --#include "packet.h" - #include "send.h" - - static struct batadv_socket_client *batadv_socket_client_hash[256]; ---- a/net/batman-adv/main.c -+++ b/net/batman-adv/main.c -@@ -45,6 +45,7 @@ - #include <linux/workqueue.h> - #include <net/dsfield.h> - #include <net/rtnetlink.h> -+#include <uapi/linux/batadv_packet.h> - #include <uapi/linux/batman_adv.h> - - #include "bat_algo.h" -@@ -62,7 +63,6 @@ - #include "netlink.h" - #include "network-coding.h" - #include "originator.h" --#include "packet.h" - #include "routing.h" - #include "send.h" - #include "soft-interface.h" ---- a/net/batman-adv/main.h -+++ b/net/batman-adv/main.h -@@ -190,8 +190,8 @@ enum batadv_uev_type { - #include <linux/jiffies.h> - #include <linux/percpu.h> - #include <linux/types.h> -+#include <uapi/linux/batadv_packet.h> - --#include "packet.h" - #include "types.h" - - struct net_device; ---- a/net/batman-adv/multicast.c -+++ b/net/batman-adv/multicast.c -@@ -54,11 +54,11 @@ - #include <net/if_inet6.h> - #include <net/ip.h> - #include <net/ipv6.h> -+#include <uapi/linux/batadv_packet.h> - - #include "hard-interface.h" - #include "hash.h" - #include "log.h" --#include "packet.h" - #include "translation-table.h" - #include "tvlv.h" - ---- a/net/batman-adv/netlink.c -+++ b/net/batman-adv/netlink.c -@@ -39,6 +39,7 @@ - #include <net/genetlink.h> - #include <net/netlink.h> - #include <net/sock.h> -+#include <uapi/linux/batadv_packet.h> - #include <uapi/linux/batman_adv.h> - - #include "bat_algo.h" -@@ -46,7 +47,6 @@ - #include "gateway_client.h" - #include "hard-interface.h" - #include "originator.h" --#include "packet.h" - #include "soft-interface.h" - #include "tp_meter.h" - #include "translation-table.h" ---- a/net/batman-adv/network-coding.c -+++ b/net/batman-adv/network-coding.c -@@ -47,12 +47,12 @@ - #include <linux/stddef.h> - #include <linux/string.h> - #include <linux/workqueue.h> -+#include <uapi/linux/batadv_packet.h> - - #include "hard-interface.h" - #include "hash.h" - #include "log.h" - #include "originator.h" --#include "packet.h" - #include "routing.h" - #include "send.h" - #include "tvlv.h" ---- a/net/batman-adv/packet.h -+++ /dev/null -@@ -1,622 +0,0 @@ --/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: -- * -- * Marek Lindner, Simon Wunderlich -- * -- * This program is free software; you can redistribute it and/or -- * modify it under the terms of version 2 of the GNU General Public -- * License as published by the Free Software Foundation. -- * -- * This program is distributed in the hope that it will be useful, but -- * WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- * General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, see <http://www.gnu.org/licenses/>. -- */ -- --#ifndef _NET_BATMAN_ADV_PACKET_H_ --#define _NET_BATMAN_ADV_PACKET_H_ -- --#include <asm/byteorder.h> --#include <linux/if_ether.h> --#include <linux/types.h> -- --#define batadv_tp_is_error(n) ((__u8)(n) > 127 ? 1 : 0) -- --/** -- * enum batadv_packettype - types for batman-adv encapsulated packets -- * @BATADV_IV_OGM: originator messages for B.A.T.M.A.N. IV -- * @BATADV_BCAST: broadcast packets carrying broadcast payload -- * @BATADV_CODED: network coded packets -- * @BATADV_ELP: echo location packets for B.A.T.M.A.N. V -- * @BATADV_OGM2: originator messages for B.A.T.M.A.N. V -- * -- * @BATADV_UNICAST: unicast packets carrying unicast payload traffic -- * @BATADV_UNICAST_FRAG: unicast packets carrying a fragment of the original -- * payload packet -- * @BATADV_UNICAST_4ADDR: unicast packet including the originator address of -- * the sender -- * @BATADV_ICMP: unicast packet like IP ICMP used for ping or traceroute -- * @BATADV_UNICAST_TVLV: unicast packet carrying TVLV containers -- */ --enum batadv_packettype { -- /* 0x00 - 0x3f: local packets or special rules for handling */ -- BATADV_IV_OGM = 0x00, -- BATADV_BCAST = 0x01, -- BATADV_CODED = 0x02, -- BATADV_ELP = 0x03, -- BATADV_OGM2 = 0x04, -- /* 0x40 - 0x7f: unicast */ --#define BATADV_UNICAST_MIN 0x40 -- BATADV_UNICAST = 0x40, -- BATADV_UNICAST_FRAG = 0x41, -- BATADV_UNICAST_4ADDR = 0x42, -- BATADV_ICMP = 0x43, -- BATADV_UNICAST_TVLV = 0x44, --#define BATADV_UNICAST_MAX 0x7f -- /* 0x80 - 0xff: reserved */ --}; -- --/** -- * enum batadv_subtype - packet subtype for unicast4addr -- * @BATADV_P_DATA: user payload -- * @BATADV_P_DAT_DHT_GET: DHT request message -- * @BATADV_P_DAT_DHT_PUT: DHT store message -- * @BATADV_P_DAT_CACHE_REPLY: ARP reply generated by DAT -- */ --enum batadv_subtype { -- BATADV_P_DATA = 0x01, -- BATADV_P_DAT_DHT_GET = 0x02, -- BATADV_P_DAT_DHT_PUT = 0x03, -- BATADV_P_DAT_CACHE_REPLY = 0x04, --}; -- --/* this file is included by batctl which needs these defines */ --#define BATADV_COMPAT_VERSION 15 -- --/** -- * enum batadv_iv_flags - flags used in B.A.T.M.A.N. IV OGM packets -- * @BATADV_NOT_BEST_NEXT_HOP: flag is set when ogm packet is forwarded and was -- * previously received from someone else than the best neighbor. -- * @BATADV_PRIMARIES_FIRST_HOP: flag unused. -- * @BATADV_DIRECTLINK: flag is for the first hop or if rebroadcasted from a -- * one hop neighbor on the interface where it was originally received. -- */ --enum batadv_iv_flags { -- BATADV_NOT_BEST_NEXT_HOP = 1UL << 0, -- BATADV_PRIMARIES_FIRST_HOP = 1UL << 1, -- BATADV_DIRECTLINK = 1UL << 2, --}; -- --/* ICMP message types */ --enum batadv_icmp_packettype { -- BATADV_ECHO_REPLY = 0, -- BATADV_DESTINATION_UNREACHABLE = 3, -- BATADV_ECHO_REQUEST = 8, -- BATADV_TTL_EXCEEDED = 11, -- BATADV_PARAMETER_PROBLEM = 12, -- BATADV_TP = 15, --}; -- --/** -- * enum batadv_mcast_flags - flags for multicast capabilities and settings -- * @BATADV_MCAST_WANT_ALL_UNSNOOPABLES: we want all packets destined for -- * 224.0.0.0/24 or ff02::1 -- * @BATADV_MCAST_WANT_ALL_IPV4: we want all IPv4 multicast packets -- * @BATADV_MCAST_WANT_ALL_IPV6: we want all IPv6 multicast packets -- */ --enum batadv_mcast_flags { -- BATADV_MCAST_WANT_ALL_UNSNOOPABLES = 1UL << 0, -- BATADV_MCAST_WANT_ALL_IPV4 = 1UL << 1, -- BATADV_MCAST_WANT_ALL_IPV6 = 1UL << 2, --}; -- --/* tt data subtypes */ --#define BATADV_TT_DATA_TYPE_MASK 0x0F -- --/** -- * enum batadv_tt_data_flags - flags for tt data tvlv -- * @BATADV_TT_OGM_DIFF: TT diff propagated through OGM -- * @BATADV_TT_REQUEST: TT request message -- * @BATADV_TT_RESPONSE: TT response message -- * @BATADV_TT_FULL_TABLE: contains full table to replace existing table -- */ --enum batadv_tt_data_flags { -- BATADV_TT_OGM_DIFF = 1UL << 0, -- BATADV_TT_REQUEST = 1UL << 1, -- BATADV_TT_RESPONSE = 1UL << 2, -- BATADV_TT_FULL_TABLE = 1UL << 4, --}; -- --/** -- * enum batadv_vlan_flags - flags for the four MSB of any vlan ID field -- * @BATADV_VLAN_HAS_TAG: whether the field contains a valid vlan tag or not -- */ --enum batadv_vlan_flags { -- BATADV_VLAN_HAS_TAG = 1UL << 15, --}; -- --/* claim frame types for the bridge loop avoidance */ --enum batadv_bla_claimframe { -- BATADV_CLAIM_TYPE_CLAIM = 0x00, -- BATADV_CLAIM_TYPE_UNCLAIM = 0x01, -- BATADV_CLAIM_TYPE_ANNOUNCE = 0x02, -- BATADV_CLAIM_TYPE_REQUEST = 0x03, -- BATADV_CLAIM_TYPE_LOOPDETECT = 0x04, --}; -- --/** -- * enum batadv_tvlv_type - tvlv type definitions -- * @BATADV_TVLV_GW: gateway tvlv -- * @BATADV_TVLV_DAT: distributed arp table tvlv -- * @BATADV_TVLV_NC: network coding tvlv -- * @BATADV_TVLV_TT: translation table tvlv -- * @BATADV_TVLV_ROAM: roaming advertisement tvlv -- * @BATADV_TVLV_MCAST: multicast capability tvlv -- */ --enum batadv_tvlv_type { -- BATADV_TVLV_GW = 0x01, -- BATADV_TVLV_DAT = 0x02, -- BATADV_TVLV_NC = 0x03, -- BATADV_TVLV_TT = 0x04, -- BATADV_TVLV_ROAM = 0x05, -- BATADV_TVLV_MCAST = 0x06, --}; -- --#pragma pack(2) --/* the destination hardware field in the ARP frame is used to -- * transport the claim type and the group id -- */ --struct batadv_bla_claim_dst { -- __u8 magic[3]; /* FF:43:05 */ -- __u8 type; /* bla_claimframe */ -- __be16 group; /* group id */ --}; -- --#pragma pack() -- --/** -- * struct batadv_ogm_packet - ogm (routing protocol) packet -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @ttl: time to live for this packet, part of the genereal header -- * @flags: contains routing relevant flags - see enum batadv_iv_flags -- * @seqno: sequence identification -- * @orig: address of the source node -- * @prev_sender: address of the previous sender -- * @reserved: reserved byte for alignment -- * @tq: transmission quality -- * @tvlv_len: length of tvlv data following the ogm header -- */ --struct batadv_ogm_packet { -- __u8 packet_type; -- __u8 version; -- __u8 ttl; -- __u8 flags; -- __be32 seqno; -- __u8 orig[ETH_ALEN]; -- __u8 prev_sender[ETH_ALEN]; -- __u8 reserved; -- __u8 tq; -- __be16 tvlv_len; -- /* __packed is not needed as the struct size is divisible by 4, -- * and the largest data type in this struct has a size of 4. -- */ --}; -- --#define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet) -- --/** -- * struct batadv_ogm2_packet - ogm2 (routing protocol) packet -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the general header -- * @ttl: time to live for this packet, part of the general header -- * @flags: reseved for routing relevant flags - currently always 0 -- * @seqno: sequence number -- * @orig: originator mac address -- * @tvlv_len: length of the appended tvlv buffer (in bytes) -- * @throughput: the currently flooded path throughput -- */ --struct batadv_ogm2_packet { -- __u8 packet_type; -- __u8 version; -- __u8 ttl; -- __u8 flags; -- __be32 seqno; -- __u8 orig[ETH_ALEN]; -- __be16 tvlv_len; -- __be32 throughput; -- /* __packed is not needed as the struct size is divisible by 4, -- * and the largest data type in this struct has a size of 4. -- */ --}; -- --#define BATADV_OGM2_HLEN sizeof(struct batadv_ogm2_packet) -- --/** -- * struct batadv_elp_packet - elp (neighbor discovery) packet -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @orig: originator mac address -- * @seqno: sequence number -- * @elp_interval: currently used ELP sending interval in ms -- */ --struct batadv_elp_packet { -- __u8 packet_type; -- __u8 version; -- __u8 orig[ETH_ALEN]; -- __be32 seqno; -- __be32 elp_interval; --}; -- --#define BATADV_ELP_HLEN sizeof(struct batadv_elp_packet) -- --/** -- * struct batadv_icmp_header - common members among all the ICMP packets -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @ttl: time to live for this packet, part of the genereal header -- * @msg_type: ICMP packet type -- * @dst: address of the destination node -- * @orig: address of the source node -- * @uid: local ICMP socket identifier -- * @align: not used - useful for alignment purposes only -- * -- * This structure is used for ICMP packets parsing only and it is never sent -- * over the wire. The alignment field at the end is there to ensure that -- * members are padded the same way as they are in real packets. -- */ --struct batadv_icmp_header { -- __u8 packet_type; -- __u8 version; -- __u8 ttl; -- __u8 msg_type; /* see ICMP message types above */ -- __u8 dst[ETH_ALEN]; -- __u8 orig[ETH_ALEN]; -- __u8 uid; -- __u8 align[3]; --}; -- --/** -- * struct batadv_icmp_packet - ICMP packet -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @ttl: time to live for this packet, part of the genereal header -- * @msg_type: ICMP packet type -- * @dst: address of the destination node -- * @orig: address of the source node -- * @uid: local ICMP socket identifier -- * @reserved: not used - useful for alignment -- * @seqno: ICMP sequence number -- */ --struct batadv_icmp_packet { -- __u8 packet_type; -- __u8 version; -- __u8 ttl; -- __u8 msg_type; /* see ICMP message types above */ -- __u8 dst[ETH_ALEN]; -- __u8 orig[ETH_ALEN]; -- __u8 uid; -- __u8 reserved; -- __be16 seqno; --}; -- --/** -- * struct batadv_icmp_tp_packet - ICMP TP Meter packet -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @ttl: time to live for this packet, part of the genereal header -- * @msg_type: ICMP packet type -- * @dst: address of the destination node -- * @orig: address of the source node -- * @uid: local ICMP socket identifier -- * @subtype: TP packet subtype (see batadv_icmp_tp_subtype) -- * @session: TP session identifier -- * @seqno: the TP sequence number -- * @timestamp: time when the packet has been sent. This value is filled in a -- * TP_MSG and echoed back in the next TP_ACK so that the sender can compute the -- * RTT. Since it is read only by the host which wrote it, there is no need to -- * store it using network order -- */ --struct batadv_icmp_tp_packet { -- __u8 packet_type; -- __u8 version; -- __u8 ttl; -- __u8 msg_type; /* see ICMP message types above */ -- __u8 dst[ETH_ALEN]; -- __u8 orig[ETH_ALEN]; -- __u8 uid; -- __u8 subtype; -- __u8 session[2]; -- __be32 seqno; -- __be32 timestamp; --}; -- --/** -- * enum batadv_icmp_tp_subtype - ICMP TP Meter packet subtypes -- * @BATADV_TP_MSG: Msg from sender to receiver -- * @BATADV_TP_ACK: acknowledgment from receiver to sender -- */ --enum batadv_icmp_tp_subtype { -- BATADV_TP_MSG = 0, -- BATADV_TP_ACK, --}; -- --#define BATADV_RR_LEN 16 -- --/** -- * struct batadv_icmp_packet_rr - ICMP RouteRecord packet -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @ttl: time to live for this packet, part of the genereal header -- * @msg_type: ICMP packet type -- * @dst: address of the destination node -- * @orig: address of the source node -- * @uid: local ICMP socket identifier -- * @rr_cur: number of entries the rr array -- * @seqno: ICMP sequence number -- * @rr: route record array -- */ --struct batadv_icmp_packet_rr { -- __u8 packet_type; -- __u8 version; -- __u8 ttl; -- __u8 msg_type; /* see ICMP message types above */ -- __u8 dst[ETH_ALEN]; -- __u8 orig[ETH_ALEN]; -- __u8 uid; -- __u8 rr_cur; -- __be16 seqno; -- __u8 rr[BATADV_RR_LEN][ETH_ALEN]; --}; -- --#define BATADV_ICMP_MAX_PACKET_SIZE sizeof(struct batadv_icmp_packet_rr) -- --/* All packet headers in front of an ethernet header have to be completely -- * divisible by 2 but not by 4 to make the payload after the ethernet -- * header again 4 bytes boundary aligned. -- * -- * A packing of 2 is necessary to avoid extra padding at the end of the struct -- * caused by a structure member which is larger than two bytes. Otherwise -- * the structure would not fulfill the previously mentioned rule to avoid the -- * misalignment of the payload after the ethernet header. It may also lead to -- * leakage of information when the padding it not initialized before sending. -- */ --#pragma pack(2) -- --/** -- * struct batadv_unicast_packet - unicast packet for network payload -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @ttl: time to live for this packet, part of the genereal header -- * @ttvn: translation table version number -- * @dest: originator destination of the unicast packet -- */ --struct batadv_unicast_packet { -- __u8 packet_type; -- __u8 version; -- __u8 ttl; -- __u8 ttvn; /* destination translation table version number */ -- __u8 dest[ETH_ALEN]; -- /* "4 bytes boundary + 2 bytes" long to make the payload after the -- * following ethernet header again 4 bytes boundary aligned -- */ --}; -- --/** -- * struct batadv_unicast_4addr_packet - extended unicast packet -- * @u: common unicast packet header -- * @src: address of the source -- * @subtype: packet subtype -- * @reserved: reserved byte for alignment -- */ --struct batadv_unicast_4addr_packet { -- struct batadv_unicast_packet u; -- __u8 src[ETH_ALEN]; -- __u8 subtype; -- __u8 reserved; -- /* "4 bytes boundary + 2 bytes" long to make the payload after the -- * following ethernet header again 4 bytes boundary aligned -- */ --}; -- --/** -- * struct batadv_frag_packet - fragmented packet -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @ttl: time to live for this packet, part of the genereal header -- * @dest: final destination used when routing fragments -- * @orig: originator of the fragment used when merging the packet -- * @no: fragment number within this sequence -- * @priority: priority of frame, from ToS IP precedence or 802.1p -- * @reserved: reserved byte for alignment -- * @seqno: sequence identification -- * @total_size: size of the merged packet -- */ --struct batadv_frag_packet { -- __u8 packet_type; -- __u8 version; /* batman version field */ -- __u8 ttl; --#if defined(__BIG_ENDIAN_BITFIELD) -- __u8 no:4; -- __u8 priority:3; -- __u8 reserved:1; --#elif defined(__LITTLE_ENDIAN_BITFIELD) -- __u8 reserved:1; -- __u8 priority:3; -- __u8 no:4; --#else --#error "unknown bitfield endianness" --#endif -- __u8 dest[ETH_ALEN]; -- __u8 orig[ETH_ALEN]; -- __be16 seqno; -- __be16 total_size; --}; -- --/** -- * struct batadv_bcast_packet - broadcast packet for network payload -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @ttl: time to live for this packet, part of the genereal header -- * @reserved: reserved byte for alignment -- * @seqno: sequence identification -- * @orig: originator of the broadcast packet -- */ --struct batadv_bcast_packet { -- __u8 packet_type; -- __u8 version; /* batman version field */ -- __u8 ttl; -- __u8 reserved; -- __be32 seqno; -- __u8 orig[ETH_ALEN]; -- /* "4 bytes boundary + 2 bytes" long to make the payload after the -- * following ethernet header again 4 bytes boundary aligned -- */ --}; -- --/** -- * struct batadv_coded_packet - network coded packet -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @ttl: time to live for this packet, part of the genereal header -- * @first_source: original source of first included packet -- * @first_orig_dest: original destinal of first included packet -- * @first_crc: checksum of first included packet -- * @first_ttvn: tt-version number of first included packet -- * @second_ttl: ttl of second packet -- * @second_dest: second receiver of this coded packet -- * @second_source: original source of second included packet -- * @second_orig_dest: original destination of second included packet -- * @second_crc: checksum of second included packet -- * @second_ttvn: tt version number of second included packet -- * @coded_len: length of network coded part of the payload -- */ --struct batadv_coded_packet { -- __u8 packet_type; -- __u8 version; /* batman version field */ -- __u8 ttl; -- __u8 first_ttvn; -- /* __u8 first_dest[ETH_ALEN]; - saved in mac header destination */ -- __u8 first_source[ETH_ALEN]; -- __u8 first_orig_dest[ETH_ALEN]; -- __be32 first_crc; -- __u8 second_ttl; -- __u8 second_ttvn; -- __u8 second_dest[ETH_ALEN]; -- __u8 second_source[ETH_ALEN]; -- __u8 second_orig_dest[ETH_ALEN]; -- __be32 second_crc; -- __be16 coded_len; --}; -- --#pragma pack() -- --/** -- * struct batadv_unicast_tvlv_packet - generic unicast packet with tvlv payload -- * @packet_type: batman-adv packet type, part of the general header -- * @version: batman-adv protocol version, part of the genereal header -- * @ttl: time to live for this packet, part of the genereal header -- * @reserved: reserved field (for packet alignment) -- * @src: address of the source -- * @dst: address of the destination -- * @tvlv_len: length of tvlv data following the unicast tvlv header -- * @align: 2 bytes to align the header to a 4 byte boundary -- */ --struct batadv_unicast_tvlv_packet { -- __u8 packet_type; -- __u8 version; /* batman version field */ -- __u8 ttl; -- __u8 reserved; -- __u8 dst[ETH_ALEN]; -- __u8 src[ETH_ALEN]; -- __be16 tvlv_len; -- __u16 align; --}; -- --/** -- * struct batadv_tvlv_hdr - base tvlv header struct -- * @type: tvlv container type (see batadv_tvlv_type) -- * @version: tvlv container version -- * @len: tvlv container length -- */ --struct batadv_tvlv_hdr { -- __u8 type; -- __u8 version; -- __be16 len; --}; -- --/** -- * struct batadv_tvlv_gateway_data - gateway data propagated through gw tvlv -- * container -- * @bandwidth_down: advertised uplink download bandwidth -- * @bandwidth_up: advertised uplink upload bandwidth -- */ --struct batadv_tvlv_gateway_data { -- __be32 bandwidth_down; -- __be32 bandwidth_up; --}; -- --/** -- * struct batadv_tvlv_tt_data - tt data propagated through the tt tvlv container -- * @flags: translation table flags (see batadv_tt_data_flags) -- * @ttvn: translation table version number -- * @num_vlan: number of announced VLANs. In the TVLV this struct is followed by -- * one batadv_tvlv_tt_vlan_data object per announced vlan -- */ --struct batadv_tvlv_tt_data { -- __u8 flags; -- __u8 ttvn; -- __be16 num_vlan; --}; -- --/** -- * struct batadv_tvlv_tt_vlan_data - vlan specific tt data propagated through -- * the tt tvlv container -- * @crc: crc32 checksum of the entries belonging to this vlan -- * @vid: vlan identifier -- * @reserved: unused, useful for alignment purposes -- */ --struct batadv_tvlv_tt_vlan_data { -- __be32 crc; -- __be16 vid; -- __u16 reserved; --}; -- --/** -- * struct batadv_tvlv_tt_change - translation table diff data -- * @flags: status indicators concerning the non-mesh client (see -- * batadv_tt_client_flags) -- * @reserved: reserved field - useful for alignment purposes only -- * @addr: mac address of non-mesh client that triggered this tt change -- * @vid: VLAN identifier -- */ --struct batadv_tvlv_tt_change { -- __u8 flags; -- __u8 reserved[3]; -- __u8 addr[ETH_ALEN]; -- __be16 vid; --}; -- --/** -- * struct batadv_tvlv_roam_adv - roaming advertisement -- * @client: mac address of roaming client -- * @vid: VLAN identifier -- */ --struct batadv_tvlv_roam_adv { -- __u8 client[ETH_ALEN]; -- __be16 vid; --}; -- --/** -- * struct batadv_tvlv_mcast_data - payload of a multicast tvlv -- * @flags: multicast flags announced by the orig node -- * @reserved: reserved field -- */ --struct batadv_tvlv_mcast_data { -- __u8 flags; -- __u8 reserved[3]; --}; -- --#endif /* _NET_BATMAN_ADV_PACKET_H_ */ ---- a/net/batman-adv/routing.c -+++ b/net/batman-adv/routing.c -@@ -33,6 +33,7 @@ - #include <linux/skbuff.h> - #include <linux/spinlock.h> - #include <linux/stddef.h> -+#include <uapi/linux/batadv_packet.h> - - #include "bitarray.h" - #include "bridge_loop_avoidance.h" -@@ -43,7 +44,6 @@ - #include "log.h" - #include "network-coding.h" - #include "originator.h" --#include "packet.h" - #include "send.h" - #include "soft-interface.h" - #include "tp_meter.h" ---- a/net/batman-adv/send.h -+++ b/net/batman-adv/send.h -@@ -23,8 +23,7 @@ - #include <linux/compiler.h> - #include <linux/spinlock.h> - #include <linux/types.h> -- --#include "packet.h" -+#include <uapi/linux/batadv_packet.h> - - struct sk_buff; - ---- a/net/batman-adv/soft-interface.c -+++ b/net/batman-adv/soft-interface.c -@@ -48,6 +48,7 @@ - #include <linux/stddef.h> - #include <linux/string.h> - #include <linux/types.h> -+#include <uapi/linux/batadv_packet.h> - - #include "bat_algo.h" - #include "bridge_loop_avoidance.h" -@@ -59,7 +60,6 @@ - #include "multicast.h" - #include "network-coding.h" - #include "originator.h" --#include "packet.h" - #include "send.h" - #include "sysfs.h" - #include "translation-table.h" ---- a/net/batman-adv/sysfs.c -+++ b/net/batman-adv/sysfs.c -@@ -37,6 +37,7 @@ - #include <linux/string.h> - #include <linux/stringify.h> - #include <linux/workqueue.h> -+#include <uapi/linux/batadv_packet.h> - - #include "bridge_loop_avoidance.h" - #include "distributed-arp-table.h" -@@ -45,7 +46,6 @@ - #include "hard-interface.h" - #include "log.h" - #include "network-coding.h" --#include "packet.h" - #include "soft-interface.h" - - static struct net_device *batadv_kobj_to_netdev(struct kobject *obj) ---- a/net/batman-adv/tp_meter.c -+++ b/net/batman-adv/tp_meter.c -@@ -48,13 +48,13 @@ - #include <linux/timer.h> - #include <linux/wait.h> - #include <linux/workqueue.h> -+#include <uapi/linux/batadv_packet.h> - #include <uapi/linux/batman_adv.h> - - #include "hard-interface.h" - #include "log.h" - #include "netlink.h" - #include "originator.h" --#include "packet.h" - #include "send.h" - - /** ---- a/net/batman-adv/translation-table.c -+++ b/net/batman-adv/translation-table.c -@@ -50,6 +50,7 @@ - #include <net/genetlink.h> - #include <net/netlink.h> - #include <net/sock.h> -+#include <uapi/linux/batadv_packet.h> - #include <uapi/linux/batman_adv.h> - - #include "bridge_loop_avoidance.h" -@@ -58,7 +59,6 @@ - #include "log.h" - #include "netlink.h" - #include "originator.h" --#include "packet.h" - #include "soft-interface.h" - #include "tvlv.h" - ---- a/net/batman-adv/tvlv.c -+++ b/net/batman-adv/tvlv.c -@@ -35,9 +35,9 @@ - #include <linux/stddef.h> - #include <linux/string.h> - #include <linux/types.h> -+#include <uapi/linux/batadv_packet.h> - - #include "originator.h" --#include "packet.h" - #include "send.h" - #include "tvlv.h" - ---- a/net/batman-adv/types.h -+++ b/net/batman-adv/types.h -@@ -35,10 +35,9 @@ - #include <linux/types.h> - #include <linux/wait.h> - #include <linux/workqueue.h> -+#include <uapi/linux/batadv_packet.h> - #include <uapi/linux/batman_adv.h> - --#include "packet.h" -- - struct seq_file; - - #ifdef CONFIG_BATMAN_ADV_DAT ---- /dev/null -+++ b/include/uapi/linux/batadv_packet.h -@@ -0,0 +1,623 @@ -+/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) */ -+/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: -+ * -+ * Marek Lindner, Simon Wunderlich -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of version 2 of the GNU General Public -+ * License as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, see <http://www.gnu.org/licenses/>. -+ */ -+ -+#ifndef _UAPI_LINUX_BATADV_PACKET_H_ -+#define _UAPI_LINUX_BATADV_PACKET_H_ -+ -+#include <asm/byteorder.h> -+#include <linux/if_ether.h> -+#include <linux/types.h> -+ -+#define batadv_tp_is_error(n) ((__u8)(n) > 127 ? 1 : 0) -+ -+/** -+ * enum batadv_packettype - types for batman-adv encapsulated packets -+ * @BATADV_IV_OGM: originator messages for B.A.T.M.A.N. IV -+ * @BATADV_BCAST: broadcast packets carrying broadcast payload -+ * @BATADV_CODED: network coded packets -+ * @BATADV_ELP: echo location packets for B.A.T.M.A.N. V -+ * @BATADV_OGM2: originator messages for B.A.T.M.A.N. V -+ * -+ * @BATADV_UNICAST: unicast packets carrying unicast payload traffic -+ * @BATADV_UNICAST_FRAG: unicast packets carrying a fragment of the original -+ * payload packet -+ * @BATADV_UNICAST_4ADDR: unicast packet including the originator address of -+ * the sender -+ * @BATADV_ICMP: unicast packet like IP ICMP used for ping or traceroute -+ * @BATADV_UNICAST_TVLV: unicast packet carrying TVLV containers -+ */ -+enum batadv_packettype { -+ /* 0x00 - 0x3f: local packets or special rules for handling */ -+ BATADV_IV_OGM = 0x00, -+ BATADV_BCAST = 0x01, -+ BATADV_CODED = 0x02, -+ BATADV_ELP = 0x03, -+ BATADV_OGM2 = 0x04, -+ /* 0x40 - 0x7f: unicast */ -+#define BATADV_UNICAST_MIN 0x40 -+ BATADV_UNICAST = 0x40, -+ BATADV_UNICAST_FRAG = 0x41, -+ BATADV_UNICAST_4ADDR = 0x42, -+ BATADV_ICMP = 0x43, -+ BATADV_UNICAST_TVLV = 0x44, -+#define BATADV_UNICAST_MAX 0x7f -+ /* 0x80 - 0xff: reserved */ -+}; -+ -+/** -+ * enum batadv_subtype - packet subtype for unicast4addr -+ * @BATADV_P_DATA: user payload -+ * @BATADV_P_DAT_DHT_GET: DHT request message -+ * @BATADV_P_DAT_DHT_PUT: DHT store message -+ * @BATADV_P_DAT_CACHE_REPLY: ARP reply generated by DAT -+ */ -+enum batadv_subtype { -+ BATADV_P_DATA = 0x01, -+ BATADV_P_DAT_DHT_GET = 0x02, -+ BATADV_P_DAT_DHT_PUT = 0x03, -+ BATADV_P_DAT_CACHE_REPLY = 0x04, -+}; -+ -+/* this file is included by batctl which needs these defines */ -+#define BATADV_COMPAT_VERSION 15 -+ -+/** -+ * enum batadv_iv_flags - flags used in B.A.T.M.A.N. IV OGM packets -+ * @BATADV_NOT_BEST_NEXT_HOP: flag is set when ogm packet is forwarded and was -+ * previously received from someone else than the best neighbor. -+ * @BATADV_PRIMARIES_FIRST_HOP: flag unused. -+ * @BATADV_DIRECTLINK: flag is for the first hop or if rebroadcasted from a -+ * one hop neighbor on the interface where it was originally received. -+ */ -+enum batadv_iv_flags { -+ BATADV_NOT_BEST_NEXT_HOP = 1UL << 0, -+ BATADV_PRIMARIES_FIRST_HOP = 1UL << 1, -+ BATADV_DIRECTLINK = 1UL << 2, -+}; -+ -+/* ICMP message types */ -+enum batadv_icmp_packettype { -+ BATADV_ECHO_REPLY = 0, -+ BATADV_DESTINATION_UNREACHABLE = 3, -+ BATADV_ECHO_REQUEST = 8, -+ BATADV_TTL_EXCEEDED = 11, -+ BATADV_PARAMETER_PROBLEM = 12, -+ BATADV_TP = 15, -+}; -+ -+/** -+ * enum batadv_mcast_flags - flags for multicast capabilities and settings -+ * @BATADV_MCAST_WANT_ALL_UNSNOOPABLES: we want all packets destined for -+ * 224.0.0.0/24 or ff02::1 -+ * @BATADV_MCAST_WANT_ALL_IPV4: we want all IPv4 multicast packets -+ * @BATADV_MCAST_WANT_ALL_IPV6: we want all IPv6 multicast packets -+ */ -+enum batadv_mcast_flags { -+ BATADV_MCAST_WANT_ALL_UNSNOOPABLES = 1UL << 0, -+ BATADV_MCAST_WANT_ALL_IPV4 = 1UL << 1, -+ BATADV_MCAST_WANT_ALL_IPV6 = 1UL << 2, -+}; -+ -+/* tt data subtypes */ -+#define BATADV_TT_DATA_TYPE_MASK 0x0F -+ -+/** -+ * enum batadv_tt_data_flags - flags for tt data tvlv -+ * @BATADV_TT_OGM_DIFF: TT diff propagated through OGM -+ * @BATADV_TT_REQUEST: TT request message -+ * @BATADV_TT_RESPONSE: TT response message -+ * @BATADV_TT_FULL_TABLE: contains full table to replace existing table -+ */ -+enum batadv_tt_data_flags { -+ BATADV_TT_OGM_DIFF = 1UL << 0, -+ BATADV_TT_REQUEST = 1UL << 1, -+ BATADV_TT_RESPONSE = 1UL << 2, -+ BATADV_TT_FULL_TABLE = 1UL << 4, -+}; -+ -+/** -+ * enum batadv_vlan_flags - flags for the four MSB of any vlan ID field -+ * @BATADV_VLAN_HAS_TAG: whether the field contains a valid vlan tag or not -+ */ -+enum batadv_vlan_flags { -+ BATADV_VLAN_HAS_TAG = 1UL << 15, -+}; -+ -+/* claim frame types for the bridge loop avoidance */ -+enum batadv_bla_claimframe { -+ BATADV_CLAIM_TYPE_CLAIM = 0x00, -+ BATADV_CLAIM_TYPE_UNCLAIM = 0x01, -+ BATADV_CLAIM_TYPE_ANNOUNCE = 0x02, -+ BATADV_CLAIM_TYPE_REQUEST = 0x03, -+ BATADV_CLAIM_TYPE_LOOPDETECT = 0x04, -+}; -+ -+/** -+ * enum batadv_tvlv_type - tvlv type definitions -+ * @BATADV_TVLV_GW: gateway tvlv -+ * @BATADV_TVLV_DAT: distributed arp table tvlv -+ * @BATADV_TVLV_NC: network coding tvlv -+ * @BATADV_TVLV_TT: translation table tvlv -+ * @BATADV_TVLV_ROAM: roaming advertisement tvlv -+ * @BATADV_TVLV_MCAST: multicast capability tvlv -+ */ -+enum batadv_tvlv_type { -+ BATADV_TVLV_GW = 0x01, -+ BATADV_TVLV_DAT = 0x02, -+ BATADV_TVLV_NC = 0x03, -+ BATADV_TVLV_TT = 0x04, -+ BATADV_TVLV_ROAM = 0x05, -+ BATADV_TVLV_MCAST = 0x06, -+}; -+ -+#pragma pack(2) -+/* the destination hardware field in the ARP frame is used to -+ * transport the claim type and the group id -+ */ -+struct batadv_bla_claim_dst { -+ __u8 magic[3]; /* FF:43:05 */ -+ __u8 type; /* bla_claimframe */ -+ __be16 group; /* group id */ -+}; -+ -+#pragma pack() -+ -+/** -+ * struct batadv_ogm_packet - ogm (routing protocol) packet -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @ttl: time to live for this packet, part of the genereal header -+ * @flags: contains routing relevant flags - see enum batadv_iv_flags -+ * @seqno: sequence identification -+ * @orig: address of the source node -+ * @prev_sender: address of the previous sender -+ * @reserved: reserved byte for alignment -+ * @tq: transmission quality -+ * @tvlv_len: length of tvlv data following the ogm header -+ */ -+struct batadv_ogm_packet { -+ __u8 packet_type; -+ __u8 version; -+ __u8 ttl; -+ __u8 flags; -+ __be32 seqno; -+ __u8 orig[ETH_ALEN]; -+ __u8 prev_sender[ETH_ALEN]; -+ __u8 reserved; -+ __u8 tq; -+ __be16 tvlv_len; -+ /* __packed is not needed as the struct size is divisible by 4, -+ * and the largest data type in this struct has a size of 4. -+ */ -+}; -+ -+#define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet) -+ -+/** -+ * struct batadv_ogm2_packet - ogm2 (routing protocol) packet -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the general header -+ * @ttl: time to live for this packet, part of the general header -+ * @flags: reseved for routing relevant flags - currently always 0 -+ * @seqno: sequence number -+ * @orig: originator mac address -+ * @tvlv_len: length of the appended tvlv buffer (in bytes) -+ * @throughput: the currently flooded path throughput -+ */ -+struct batadv_ogm2_packet { -+ __u8 packet_type; -+ __u8 version; -+ __u8 ttl; -+ __u8 flags; -+ __be32 seqno; -+ __u8 orig[ETH_ALEN]; -+ __be16 tvlv_len; -+ __be32 throughput; -+ /* __packed is not needed as the struct size is divisible by 4, -+ * and the largest data type in this struct has a size of 4. -+ */ -+}; -+ -+#define BATADV_OGM2_HLEN sizeof(struct batadv_ogm2_packet) -+ -+/** -+ * struct batadv_elp_packet - elp (neighbor discovery) packet -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @orig: originator mac address -+ * @seqno: sequence number -+ * @elp_interval: currently used ELP sending interval in ms -+ */ -+struct batadv_elp_packet { -+ __u8 packet_type; -+ __u8 version; -+ __u8 orig[ETH_ALEN]; -+ __be32 seqno; -+ __be32 elp_interval; -+}; -+ -+#define BATADV_ELP_HLEN sizeof(struct batadv_elp_packet) -+ -+/** -+ * struct batadv_icmp_header - common members among all the ICMP packets -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @ttl: time to live for this packet, part of the genereal header -+ * @msg_type: ICMP packet type -+ * @dst: address of the destination node -+ * @orig: address of the source node -+ * @uid: local ICMP socket identifier -+ * @align: not used - useful for alignment purposes only -+ * -+ * This structure is used for ICMP packets parsing only and it is never sent -+ * over the wire. The alignment field at the end is there to ensure that -+ * members are padded the same way as they are in real packets. -+ */ -+struct batadv_icmp_header { -+ __u8 packet_type; -+ __u8 version; -+ __u8 ttl; -+ __u8 msg_type; /* see ICMP message types above */ -+ __u8 dst[ETH_ALEN]; -+ __u8 orig[ETH_ALEN]; -+ __u8 uid; -+ __u8 align[3]; -+}; -+ -+/** -+ * struct batadv_icmp_packet - ICMP packet -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @ttl: time to live for this packet, part of the genereal header -+ * @msg_type: ICMP packet type -+ * @dst: address of the destination node -+ * @orig: address of the source node -+ * @uid: local ICMP socket identifier -+ * @reserved: not used - useful for alignment -+ * @seqno: ICMP sequence number -+ */ -+struct batadv_icmp_packet { -+ __u8 packet_type; -+ __u8 version; -+ __u8 ttl; -+ __u8 msg_type; /* see ICMP message types above */ -+ __u8 dst[ETH_ALEN]; -+ __u8 orig[ETH_ALEN]; -+ __u8 uid; -+ __u8 reserved; -+ __be16 seqno; -+}; -+ -+/** -+ * struct batadv_icmp_tp_packet - ICMP TP Meter packet -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @ttl: time to live for this packet, part of the genereal header -+ * @msg_type: ICMP packet type -+ * @dst: address of the destination node -+ * @orig: address of the source node -+ * @uid: local ICMP socket identifier -+ * @subtype: TP packet subtype (see batadv_icmp_tp_subtype) -+ * @session: TP session identifier -+ * @seqno: the TP sequence number -+ * @timestamp: time when the packet has been sent. This value is filled in a -+ * TP_MSG and echoed back in the next TP_ACK so that the sender can compute the -+ * RTT. Since it is read only by the host which wrote it, there is no need to -+ * store it using network order -+ */ -+struct batadv_icmp_tp_packet { -+ __u8 packet_type; -+ __u8 version; -+ __u8 ttl; -+ __u8 msg_type; /* see ICMP message types above */ -+ __u8 dst[ETH_ALEN]; -+ __u8 orig[ETH_ALEN]; -+ __u8 uid; -+ __u8 subtype; -+ __u8 session[2]; -+ __be32 seqno; -+ __be32 timestamp; -+}; -+ -+/** -+ * enum batadv_icmp_tp_subtype - ICMP TP Meter packet subtypes -+ * @BATADV_TP_MSG: Msg from sender to receiver -+ * @BATADV_TP_ACK: acknowledgment from receiver to sender -+ */ -+enum batadv_icmp_tp_subtype { -+ BATADV_TP_MSG = 0, -+ BATADV_TP_ACK, -+}; -+ -+#define BATADV_RR_LEN 16 -+ -+/** -+ * struct batadv_icmp_packet_rr - ICMP RouteRecord packet -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @ttl: time to live for this packet, part of the genereal header -+ * @msg_type: ICMP packet type -+ * @dst: address of the destination node -+ * @orig: address of the source node -+ * @uid: local ICMP socket identifier -+ * @rr_cur: number of entries the rr array -+ * @seqno: ICMP sequence number -+ * @rr: route record array -+ */ -+struct batadv_icmp_packet_rr { -+ __u8 packet_type; -+ __u8 version; -+ __u8 ttl; -+ __u8 msg_type; /* see ICMP message types above */ -+ __u8 dst[ETH_ALEN]; -+ __u8 orig[ETH_ALEN]; -+ __u8 uid; -+ __u8 rr_cur; -+ __be16 seqno; -+ __u8 rr[BATADV_RR_LEN][ETH_ALEN]; -+}; -+ -+#define BATADV_ICMP_MAX_PACKET_SIZE sizeof(struct batadv_icmp_packet_rr) -+ -+/* All packet headers in front of an ethernet header have to be completely -+ * divisible by 2 but not by 4 to make the payload after the ethernet -+ * header again 4 bytes boundary aligned. -+ * -+ * A packing of 2 is necessary to avoid extra padding at the end of the struct -+ * caused by a structure member which is larger than two bytes. Otherwise -+ * the structure would not fulfill the previously mentioned rule to avoid the -+ * misalignment of the payload after the ethernet header. It may also lead to -+ * leakage of information when the padding it not initialized before sending. -+ */ -+#pragma pack(2) -+ -+/** -+ * struct batadv_unicast_packet - unicast packet for network payload -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @ttl: time to live for this packet, part of the genereal header -+ * @ttvn: translation table version number -+ * @dest: originator destination of the unicast packet -+ */ -+struct batadv_unicast_packet { -+ __u8 packet_type; -+ __u8 version; -+ __u8 ttl; -+ __u8 ttvn; /* destination translation table version number */ -+ __u8 dest[ETH_ALEN]; -+ /* "4 bytes boundary + 2 bytes" long to make the payload after the -+ * following ethernet header again 4 bytes boundary aligned -+ */ -+}; -+ -+/** -+ * struct batadv_unicast_4addr_packet - extended unicast packet -+ * @u: common unicast packet header -+ * @src: address of the source -+ * @subtype: packet subtype -+ * @reserved: reserved byte for alignment -+ */ -+struct batadv_unicast_4addr_packet { -+ struct batadv_unicast_packet u; -+ __u8 src[ETH_ALEN]; -+ __u8 subtype; -+ __u8 reserved; -+ /* "4 bytes boundary + 2 bytes" long to make the payload after the -+ * following ethernet header again 4 bytes boundary aligned -+ */ -+}; -+ -+/** -+ * struct batadv_frag_packet - fragmented packet -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @ttl: time to live for this packet, part of the genereal header -+ * @dest: final destination used when routing fragments -+ * @orig: originator of the fragment used when merging the packet -+ * @no: fragment number within this sequence -+ * @priority: priority of frame, from ToS IP precedence or 802.1p -+ * @reserved: reserved byte for alignment -+ * @seqno: sequence identification -+ * @total_size: size of the merged packet -+ */ -+struct batadv_frag_packet { -+ __u8 packet_type; -+ __u8 version; /* batman version field */ -+ __u8 ttl; -+#if defined(__BIG_ENDIAN_BITFIELD) -+ __u8 no:4; -+ __u8 priority:3; -+ __u8 reserved:1; -+#elif defined(__LITTLE_ENDIAN_BITFIELD) -+ __u8 reserved:1; -+ __u8 priority:3; -+ __u8 no:4; -+#else -+#error "unknown bitfield endianness" -+#endif -+ __u8 dest[ETH_ALEN]; -+ __u8 orig[ETH_ALEN]; -+ __be16 seqno; -+ __be16 total_size; -+}; -+ -+/** -+ * struct batadv_bcast_packet - broadcast packet for network payload -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @ttl: time to live for this packet, part of the genereal header -+ * @reserved: reserved byte for alignment -+ * @seqno: sequence identification -+ * @orig: originator of the broadcast packet -+ */ -+struct batadv_bcast_packet { -+ __u8 packet_type; -+ __u8 version; /* batman version field */ -+ __u8 ttl; -+ __u8 reserved; -+ __be32 seqno; -+ __u8 orig[ETH_ALEN]; -+ /* "4 bytes boundary + 2 bytes" long to make the payload after the -+ * following ethernet header again 4 bytes boundary aligned -+ */ -+}; -+ -+/** -+ * struct batadv_coded_packet - network coded packet -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @ttl: time to live for this packet, part of the genereal header -+ * @first_source: original source of first included packet -+ * @first_orig_dest: original destinal of first included packet -+ * @first_crc: checksum of first included packet -+ * @first_ttvn: tt-version number of first included packet -+ * @second_ttl: ttl of second packet -+ * @second_dest: second receiver of this coded packet -+ * @second_source: original source of second included packet -+ * @second_orig_dest: original destination of second included packet -+ * @second_crc: checksum of second included packet -+ * @second_ttvn: tt version number of second included packet -+ * @coded_len: length of network coded part of the payload -+ */ -+struct batadv_coded_packet { -+ __u8 packet_type; -+ __u8 version; /* batman version field */ -+ __u8 ttl; -+ __u8 first_ttvn; -+ /* __u8 first_dest[ETH_ALEN]; - saved in mac header destination */ -+ __u8 first_source[ETH_ALEN]; -+ __u8 first_orig_dest[ETH_ALEN]; -+ __be32 first_crc; -+ __u8 second_ttl; -+ __u8 second_ttvn; -+ __u8 second_dest[ETH_ALEN]; -+ __u8 second_source[ETH_ALEN]; -+ __u8 second_orig_dest[ETH_ALEN]; -+ __be32 second_crc; -+ __be16 coded_len; -+}; -+ -+#pragma pack() -+ -+/** -+ * struct batadv_unicast_tvlv_packet - generic unicast packet with tvlv payload -+ * @packet_type: batman-adv packet type, part of the general header -+ * @version: batman-adv protocol version, part of the genereal header -+ * @ttl: time to live for this packet, part of the genereal header -+ * @reserved: reserved field (for packet alignment) -+ * @src: address of the source -+ * @dst: address of the destination -+ * @tvlv_len: length of tvlv data following the unicast tvlv header -+ * @align: 2 bytes to align the header to a 4 byte boundary -+ */ -+struct batadv_unicast_tvlv_packet { -+ __u8 packet_type; -+ __u8 version; /* batman version field */ -+ __u8 ttl; -+ __u8 reserved; -+ __u8 dst[ETH_ALEN]; -+ __u8 src[ETH_ALEN]; -+ __be16 tvlv_len; -+ __u16 align; -+}; -+ -+/** -+ * struct batadv_tvlv_hdr - base tvlv header struct -+ * @type: tvlv container type (see batadv_tvlv_type) -+ * @version: tvlv container version -+ * @len: tvlv container length -+ */ -+struct batadv_tvlv_hdr { -+ __u8 type; -+ __u8 version; -+ __be16 len; -+}; -+ -+/** -+ * struct batadv_tvlv_gateway_data - gateway data propagated through gw tvlv -+ * container -+ * @bandwidth_down: advertised uplink download bandwidth -+ * @bandwidth_up: advertised uplink upload bandwidth -+ */ -+struct batadv_tvlv_gateway_data { -+ __be32 bandwidth_down; -+ __be32 bandwidth_up; -+}; -+ -+/** -+ * struct batadv_tvlv_tt_data - tt data propagated through the tt tvlv container -+ * @flags: translation table flags (see batadv_tt_data_flags) -+ * @ttvn: translation table version number -+ * @num_vlan: number of announced VLANs. In the TVLV this struct is followed by -+ * one batadv_tvlv_tt_vlan_data object per announced vlan -+ */ -+struct batadv_tvlv_tt_data { -+ __u8 flags; -+ __u8 ttvn; -+ __be16 num_vlan; -+}; -+ -+/** -+ * struct batadv_tvlv_tt_vlan_data - vlan specific tt data propagated through -+ * the tt tvlv container -+ * @crc: crc32 checksum of the entries belonging to this vlan -+ * @vid: vlan identifier -+ * @reserved: unused, useful for alignment purposes -+ */ -+struct batadv_tvlv_tt_vlan_data { -+ __be32 crc; -+ __be16 vid; -+ __u16 reserved; -+}; -+ -+/** -+ * struct batadv_tvlv_tt_change - translation table diff data -+ * @flags: status indicators concerning the non-mesh client (see -+ * batadv_tt_client_flags) -+ * @reserved: reserved field - useful for alignment purposes only -+ * @addr: mac address of non-mesh client that triggered this tt change -+ * @vid: VLAN identifier -+ */ -+struct batadv_tvlv_tt_change { -+ __u8 flags; -+ __u8 reserved[3]; -+ __u8 addr[ETH_ALEN]; -+ __be16 vid; -+}; -+ -+/** -+ * struct batadv_tvlv_roam_adv - roaming advertisement -+ * @client: mac address of roaming client -+ * @vid: VLAN identifier -+ */ -+struct batadv_tvlv_roam_adv { -+ __u8 client[ETH_ALEN]; -+ __be16 vid; -+}; -+ -+/** -+ * struct batadv_tvlv_mcast_data - payload of a multicast tvlv -+ * @flags: multicast flags announced by the orig node -+ * @reserved: reserved field -+ */ -+struct batadv_tvlv_mcast_data { -+ __u8 flags; -+ __u8 reserved[3]; -+}; -+ -+#endif /* _UAPI_LINUX_BATADV_PACKET_H_ */ |