@@ -49,8 +49,6 @@ ifneq ($(REVISION),)
NOSTDINC_FLAGS += -DBATADV_SOURCE_VERSION=\"$(REVISION)\"
endif
-include $(PWD)/compat-sources/Makefile
-
obj-y += net/batman-adv/
export batman-adv-y
@@ -12,7 +12,7 @@ and as external module. The external module allows to get
new features without upgrading to a newer kernel version
and to get batman-adv specific bugfixes for kernels that are
not supported anymore. It compiles against and should work
-with Linux 3.16 - 5.6. Supporting older versions is not
+with Linux 4.4 - 5.6. Supporting older versions is not
planned, but it's probably easy to backport it. If you work on a
backport, feel free to contact us. :-)
@@ -10,16 +10,13 @@
#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_AVERAGE_H
#define _NET_BATMAN_ADV_COMPAT_LINUX_AVERAGE_H
-#include <linux/version.h>
#include_next <linux/average.h>
#include <linux/bug.h>
#include <linux/compiler.h>
#include <linux/log2.h>
-#if LINUX_VERSION_IS_GEQ(4, 3, 0)
#undef DECLARE_EWMA
-#endif /* LINUX_VERSION_IS_LESS(4, 3, 0) */
/*
* Exponentially weighted moving average (EWMA)
@@ -13,21 +13,6 @@
#include <linux/version.h>
#include_next <linux/compiler.h>
-#if LINUX_VERSION_IS_LESS(3, 19, 0)
-
-#ifndef READ_ONCE
-#define READ_ONCE(x) ACCESS_ONCE(x)
-#endif
-
-#ifndef WRITE_ONCE
-#define WRITE_ONCE(x, val) ({ \
- ACCESS_ONCE(x) = (val); \
-})
-#endif
-
-#endif /* LINUX_VERSION_IS_LESS(3, 19, 0) */
-
-
#if LINUX_VERSION_IS_LESS(5, 4, 0)
#ifndef fallthrough
deleted file mode 100644
@@ -1,77 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (C) 2007-2020 B.A.T.M.A.N. contributors:
- *
- * Marek Lindner, Simon Wunderlich
- *
- * This file contains macros for maintaining compatibility with older versions
- * of the Linux kernel.
- */
-
-#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_IF_BRIDGE_H_
-#define _NET_BATMAN_ADV_COMPAT_LINUX_IF_BRIDGE_H_
-
-#include <linux/version.h>
-#include_next <linux/if_bridge.h>
-
-#if LINUX_VERSION_IS_LESS(3, 16, 0)
-
-struct br_ip {
- union {
- __be32 ip4;
-#if IS_ENABLED(CONFIG_IPV6)
- struct in6_addr ip6;
-#endif
- } u;
- __be16 proto;
- __u16 vid;
-};
-
-struct br_ip_list {
- struct list_head list;
- struct br_ip addr;
-};
-
-#endif /* LINUX_VERSION_IS_LESS(3, 16, 0) */
-
-#if LINUX_VERSION_IS_LESS(3, 16, 0) || \
- LINUX_VERSION_CODE == KERNEL_VERSION(3, 16, 0) && \
- (!IS_ENABLED(CONFIG_BRIDGE) || \
- !IS_ENABLED(CONFIG_BRIDGE_IGMP_SNOOPING))
-
-#define br_multicast_list_adjacent(dev, br_ip_list) \
- batadv_br_multicast_list_adjacent(dev, br_ip_list)
-
-#define br_multicast_has_querier_adjacent(dev, proto) \
- batadv_br_multicast_has_querier_adjacent(dev, proto)
-
-static inline int
-batadv_br_multicast_list_adjacent(struct net_device *dev,
- struct list_head *br_ip_list)
-{
- return 0;
-}
-
-static inline bool
-batadv_br_multicast_has_querier_adjacent(struct net_device *dev, int proto)
-{
- return false;
-}
-
-#endif /* LINUX_VERSION_IS_LESS(3, 16, 0) ||
- * == KERNEL_VERSION(3, 16, 0) &&
- * (!IS_ENABLED(CONFIG_BRIDGE) ||
- * !IS_ENABLED(CONFIG_BRIDGE_IGMP_SNOOPING)) */
-
-#if LINUX_VERSION_IS_LESS(3, 17, 0)
-
-static inline bool br_multicast_has_querier_anywhere(struct net_device *dev,
- int proto)
-{
- pr_warn_once("Old kernel detected (< 3.17) - multicast optimizations disabled\n");
-
- return false;
-}
-
-#endif /* LINUX_VERSION_IS_LESS(3, 17, 0) */
-
-#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_IF_BRIDGE_H_ */
@@ -13,11 +13,7 @@
#include <linux/version.h>
#include_next <linux/igmp.h>
-#if LINUX_VERSION_IS_LESS(4, 2, 0)
-
-int ip_mc_check_igmp(struct sk_buff *skb);
-
-#elif LINUX_VERSION_IS_LESS(5, 1, 0)
+#if LINUX_VERSION_IS_LESS(5, 1, 0)
static inline int batadv_ip_mc_check_igmp(struct sk_buff *skb)
{
@@ -27,6 +23,6 @@ static inline int batadv_ip_mc_check_igmp(struct sk_buff *skb)
#define ip_mc_check_igmp(skb) \
batadv_ip_mc_check_igmp(skb)
-#endif /* LINUX_VERSION_IS_LESS(4, 2, 0) */
+#endif /* LINUX_VERSION_IS_LESS(5, 1, 0) */
#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_IGMP_H_ */
deleted file mode 100644
@@ -1,31 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (C) 2007-2020 B.A.T.M.A.N. contributors:
- *
- * Marek Lindner, Simon Wunderlich
- *
- * This file contains macros for maintaining compatibility with older versions
- * of the Linux kernel.
- */
-
-#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_LIST_H_
-#define _NET_BATMAN_ADV_COMPAT_LINUX_LIST_H_
-
-#include <linux/version.h>
-#include_next <linux/list.h>
-
-#if LINUX_VERSION_IS_LESS(3, 17, 0)
-
-#define hlist_add_behind(n, prev) hlist_add_after(prev, n)
-
-#endif /* LINUX_VERSION_IS_LESS(3, 17, 0) */
-
-#if LINUX_VERSION_IS_LESS(4, 3, 0)
-
-static inline bool hlist_fake(struct hlist_node *h)
-{
- return h->pprev == &h->next;
-}
-
-#endif /* LINUX_VERSION_IS_LESS(4, 3, 0) */
-
-#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_LIST_H_ */
@@ -13,21 +13,6 @@
#include <linux/version.h>
#include_next <linux/netdevice.h>
-#if LINUX_VERSION_IS_LESS(3, 17, 0)
-
-/* alloc_netdev() was defined differently before 2.6.38 */
-#undef alloc_netdev
-#define alloc_netdev(sizeof_priv, name, name_assign_type, setup) \
- alloc_netdev_mqs(sizeof_priv, name, setup, 1, 1)
-
-#endif /* LINUX_VERSION_IS_LESS(3, 17, 0) */
-
-#if LINUX_VERSION_IS_LESS(4, 1, 0)
-
-#define dev_get_iflink(_net_dev) ((_net_dev)->iflink)
-
-#endif /* LINUX_VERSION_IS_LESS(3, 19, 0) */
-
#if LINUX_VERSION_IS_LESS(4, 5, 0)
#define netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info, extack) \
deleted file mode 100644
@@ -1,23 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (C) 2007-2020 B.A.T.M.A.N. contributors:
- *
- * Marek Lindner, Simon Wunderlich
- *
- * This file contains macros for maintaining compatibility with older versions
- * of the Linux kernel.
- */
-
-#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_NL80211_H_
-#define _NET_BATMAN_ADV_COMPAT_LINUX_NL80211_H_
-
-#include <linux/version.h>
-#include_next <linux/nl80211.h>
-
-#if LINUX_VERSION_IS_LESS(3, 16, 0)
-
-/* Linux 3.15 misses the uapi include.... */
-#include <uapi/linux/nl80211.h>
-
-#endif /* LINUX_VERSION_IS_LESS(3, 16, 0) */
-
-#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_NL80211_H_ */
deleted file mode 100644
@@ -1,25 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (C) 2007-2020 B.A.T.M.A.N. contributors:
- *
- * Marek Lindner, Simon Wunderlich
- *
- * This file contains macros for maintaining compatibility with older versions
- * of the Linux kernel.
- */
-
-#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_SEQ_FILE_H_
-#define _NET_BATMAN_ADV_COMPAT_LINUX_SEQ_FILE_H_
-
-#include <linux/version.h>
-#include_next <linux/seq_file.h>
-
-#if LINUX_VERSION_IS_LESS(3, 19, 0)
-
-static inline bool seq_has_overflowed(struct seq_file *m)
-{
- return m->count == m->size;
-}
-
-#endif /* LINUX_VERSION_IS_LESS(3, 19, 0) */
-
-#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_SEQ_FILE_H_ */
@@ -13,26 +13,6 @@
#include <linux/version.h>
#include_next <linux/skbuff.h>
-#if LINUX_VERSION_IS_LESS(3, 16, 0)
-
-#define pskb_copy_for_clone pskb_copy
-
-__sum16 skb_checksum_simple_validate(struct sk_buff *skb);
-
-__sum16
-skb_checksum_validate(struct sk_buff *skb, int proto,
- __wsum (*compute_pseudo)(struct sk_buff *skb, int proto));
-
-#endif /* LINUX_VERSION_IS_LESS(3, 16, 0) */
-
-#if LINUX_VERSION_IS_LESS(4, 2, 0)
-
-struct sk_buff *skb_checksum_trimmed(struct sk_buff *skb,
- unsigned int transport_len,
- __sum16(*skb_chkf)(struct sk_buff *skb));
-
-#endif /* LINUX_VERSION_IS_LESS(4, 2, 0) */
-
#if LINUX_VERSION_IS_LESS(4, 5, 0)
static inline void batadv_skb_postpush_rcsum(struct sk_buff *skb,
deleted file mode 100644
@@ -1,51 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (C) 2015 Chris Metcalf <cmetcalf@ezchip.com>
- *
- * This file contains macros for maintaining compatibility with older versions
- * of the Linux kernel.
- */
-
-#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_STRING_H_
-#define _NET_BATMAN_ADV_COMPAT_LINUX_STRING_H_
-
-#include <linux/version.h>
-#include_next <linux/string.h>
-#include <asm-generic/errno-base.h>
-
-#if LINUX_VERSION_IS_LESS(4, 3, 0)
-
-#ifndef __HAVE_ARCH_STRSCPY
-
-static inline ssize_t batadv_strscpy(char *dest, const char *src, size_t count)
-{
- long res = 0;
-
- if (count == 0)
- return -E2BIG;
-
- while (count) {
- char c;
-
- c = src[res];
- dest[res] = c;
- if (!c)
- return res;
- res++;
- count--;
- }
-
- /* Hit buffer length without finding a NUL; force NUL-termination. */
- if (res)
- dest[res-1] = '\0';
-
- return -E2BIG;
-}
-
-#define strscpy(_dest, _src, _count) \
- batadv_strscpy((_dest), (_src), (_count))
-
-#endif
-
-#endif /* LINUX_VERSION_IS_LESS(4, 3, 0) */
-
-#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_STRING_H_ */
@@ -13,11 +13,7 @@
#include <linux/version.h>
#include_next <net/addrconf.h>
-#if LINUX_VERSION_IS_LESS(4, 2, 0)
-
-int ipv6_mc_check_mld(struct sk_buff *skb);
-
-#elif LINUX_VERSION_IS_LESS(5, 1, 0)
+#if LINUX_VERSION_IS_LESS(5, 1, 0)
static inline int batadv_ipv6_mc_check_mld(struct sk_buff *skb)
{
@@ -27,6 +23,6 @@ static inline int batadv_ipv6_mc_check_mld(struct sk_buff *skb)
#define ipv6_mc_check_mld(skb) \
batadv_ipv6_mc_check_mld(skb)
-#endif /* LINUX_VERSION_IS_LESS(4, 2, 0) */
+#endif /* LINUX_VERSION_IS_LESS(5, 1, 0) */
#endif /* _NET_BATMAN_ADV_COMPAT_NET_ADDRCONF_H_ */
@@ -13,25 +13,6 @@
#include <linux/version.h>
#include_next <net/cfg80211.h>
-#if LINUX_VERSION_IS_LESS(3, 16, 0)
-
-static inline int cfg80211_get_station(struct net_device *dev,
- const u8 *mac_addr,
- struct station_info *sinfo)
-{
- pr_warn_once("cfg80211 based throughput metric is only supported with Linux 3.16+\n");
- return -ENOENT;
-}
-
-/* The following define substitutes the expected_throughput field with a random
- * one existing in the station_info struct. It can be random because due to the
- * function above it will never be used. Only needed to make the code compile
- */
-#define expected_throughput filled
-
-#endif /* LINUX_VERSION_IS_LESS(3, 16, 0) */
-
-
#if LINUX_VERSION_IS_LESS(4, 8, 0)
#if !IS_ENABLED(CONFIG_CFG80211) && \
deleted file mode 100644
@@ -1,27 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (C) 2007-2020 B.A.T.M.A.N. contributors:
- *
- * Marek Lindner, Simon Wunderlich
- *
- * This file contains macros for maintaining compatibility with older versions
- * of the Linux kernel.
- */
-
-#ifndef _NET_BATMAN_ADV_COMPAT_NET_IP6_CHECKSUM_H_
-#define _NET_BATMAN_ADV_COMPAT_NET_IP6_CHECKSUM_H_
-
-#include <linux/version.h>
-#include_next <net/ip6_checksum.h>
-
-#if LINUX_VERSION_IS_LESS(3, 16, 0)
-
-static inline __wsum ip6_compute_pseudo(struct sk_buff *skb, int proto)
-{
- return ~csum_unfold(csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
- &ipv6_hdr(skb)->daddr,
- skb->len, proto, 0));
-}
-
-#endif /* LINUX_VERSION_IS_LESS(3, 16, 0) */
-
-#endif /* _NET_BATMAN_ADV_COMPAT_NET_IP6_CHECKSUM_H_ */
deleted file mode 100644
@@ -1,28 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (C) 2007-2020 B.A.T.M.A.N. contributors:
- *
- * Marek Lindner, Simon Wunderlich
- *
- * This file contains macros for maintaining compatibility with older versions
- * of the Linux kernel.
- */
-
-#ifndef _NET_BATMAN_ADV_COMPAT_NET_NETLINK_H_
-#define _NET_BATMAN_ADV_COMPAT_NET_NETLINK_H_
-
-#include <linux/version.h>
-#include_next <net/netlink.h>
-
-#if LINUX_VERSION_IS_LESS(4, 1, 0)
-
-static inline int nla_put_in_addr(struct sk_buff *skb, int attrtype,
- __be32 addr)
-{
- __be32 tmp = addr;
-
- return nla_put_be32(skb, attrtype, tmp);
-}
-
-#endif /* LINUX_VERSION_IS_LESS(4, 1, 0) */
-
-#endif /* _NET_BATMAN_ADV_COMPAT_NET_NETLINK_H_ */
deleted file mode 100644
@@ -1,25 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (C) 2007-2020 B.A.T.M.A.N. contributors:
- *
- * Marek Lindner, Simon Wunderlich
- *
- * This file contains macros for maintaining compatibility with older versions
- * of the Linux kernel.
- */
-
-#ifndef _NET_BATMAN_ADV_COMPAT_UAPI_LINUX_NL80211_H_
-#define _NET_BATMAN_ADV_COMPAT_UAPI_LINUX_NL80211_H_
-
-#include <linux/version.h>
-#include_next <uapi/linux/nl80211.h>
-
-#if LINUX_VERSION_IS_LESS(4, 0, 0)
-
-/* for batadv_v_elp_get_throughput which would have used
- * STATION_INFO_EXPECTED_THROUGHPUT in Linux 4.0.0
- */
-#define NL80211_STA_INFO_EXPECTED_THROUGHPUT 28
-
-#endif /* LINUX_VERSION_IS_LESS(4, 0, 0) */
-
-#endif /* _NET_BATMAN_ADV_COMPAT_UAPI_LINUX_NL80211_H_ */
deleted file mode 100644
@@ -1,8 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-# Copyright (C) 2007-2020 B.A.T.M.A.N. contributors:
-#
-# Marek Lindner, Simon Wunderlich
-
-batman-adv-$(CONFIG_BATMAN_ADV_MCAST) += ../../compat-sources/net/core/skbuff.o
-batman-adv-$(CONFIG_BATMAN_ADV_MCAST) += ../../compat-sources/net/ipv4/igmp.o
-batman-adv-$(CONFIG_BATMAN_ADV_MCAST) += ../../compat-sources/net/ipv6/mcast_snoop.o
deleted file mode 100644
@@ -1,195 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Routines having to do with the 'struct sk_buff' memory handlers.
- *
- * Authors: Alan Cox <alan@lxorguk.ukuu.org.uk>
- * Florian La Roche <rzsfl@rz.uni-sb.de>
- *
- * Fixes:
- * Alan Cox : Fixed the worst of the load
- * balancer bugs.
- * Dave Platt : Interrupt stacking fix.
- * Richard Kooijman : Timestamp fixes.
- * Alan Cox : Changed buffer format.
- * Alan Cox : destructor hook for AF_UNIX etc.
- * Linus Torvalds : Better skb_clone.
- * Alan Cox : Added skb_copy.
- * Alan Cox : Added all the changed routines Linus
- * only put in the headers
- * Ray VanTassle : Fixed --skb->lock in free
- * Alan Cox : skb_copy copy arp field
- * Andi Kleen : slabified it.
- * Robert Olsson : Removed skb_head_pool
- *
- * NOTE:
- * The __skb_ routines should be called with interrupts
- * disabled, or you better be *real* sure that the operation is atomic
- * with respect to whatever list is being frobbed (e.g. via lock_sock()
- * or via disabling bottom half handlers, etc).
- */
-
-#include <linux/in6.h>
-#include <linux/ipv6.h>
-#include <linux/skbuff.h>
-#include <linux/types.h>
-#include <net/checksum.h>
-#include <net/ip6_checksum.h>
-
-#if LINUX_VERSION_IS_LESS(3, 16, 0)
-
-/* Compare with:
- * "bridge: multicast: call skb_checksum_{simple_, }validate"
- */
-__sum16 skb_checksum_simple_validate(struct sk_buff *skb)
-{
- switch (skb->ip_summed) {
- case CHECKSUM_COMPLETE:
- if (!csum_fold(skb->csum))
- break;
- fallthrough;
- case CHECKSUM_NONE:
- skb->csum = 0;
- return skb_checksum_complete(skb);
- }
-
- return 0;
-}
-
-/* Watch out: Not as generic as upstream
- * - redefines this method to only fit with ICMPV6
- *
- * Compare with:
- * "bridge: multicast: call skb_checksum_{simple_, }validate"
- */
-__sum16
-skb_checksum_validate(struct sk_buff *skb, int proto,
- __wsum (*compute_pseudo)(struct sk_buff *skb, int proto))
-{
- const struct ipv6hdr *ip6h = ipv6_hdr(skb);
-
- switch (skb->ip_summed) {
- case CHECKSUM_COMPLETE:
- if (!csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, skb->len,
- IPPROTO_ICMPV6, skb->csum))
- break;
- fallthrough;
- case CHECKSUM_NONE:
- skb->csum = ~csum_unfold(csum_ipv6_magic(&ip6h->saddr,
- &ip6h->daddr,
- skb->len,
- IPPROTO_ICMPV6, 0));
- return __skb_checksum_complete(skb);
- }
-
- return 0;
-}
-
-#endif /* LINUX_VERSION_IS_LESS(3, 16, 0) */
-
-#if LINUX_VERSION_IS_LESS(4, 2, 0)
-
-/**
- * skb_push_rcsum - push skb and update receive checksum
- * @skb: buffer to update
- * @len: length of data pulled
- *
- * This function performs an skb_push on the packet and updates
- * the CHECKSUM_COMPLETE checksum. It should be used on
- * receive path processing instead of skb_push unless you know
- * that the checksum difference is zero (e.g., a valid IP header)
- * or you are setting ip_summed to CHECKSUM_NONE.
- */
-static unsigned char *skb_push_rcsum(struct sk_buff *skb, unsigned len)
-{
- skb_push(skb, len);
- skb_postpush_rcsum(skb, skb->data, len);
- return skb->data;
-}
-
-/**
- * skb_checksum_maybe_trim - maybe trims the given skb
- * @skb: the skb to check
- * @transport_len: the data length beyond the network header
- *
- * Checks whether the given skb has data beyond the given transport length.
- * If so, returns a cloned skb trimmed to this transport length.
- * Otherwise returns the provided skb. Returns NULL in error cases
- * (e.g. transport_len exceeds skb length or out-of-memory).
- *
- * Caller needs to set the skb transport header and release the returned skb.
- * Provided skb is consumed.
- */
-static struct sk_buff *skb_checksum_maybe_trim(struct sk_buff *skb,
- unsigned int transport_len)
-{
- struct sk_buff *skb_chk;
- unsigned int len = skb_transport_offset(skb) + transport_len;
- int ret;
-
- if (skb->len < len) {
- kfree_skb(skb);
- return NULL;
- } else if (skb->len == len) {
- return skb;
- }
-
- skb_chk = skb_clone(skb, GFP_ATOMIC);
- kfree_skb(skb);
-
- if (!skb_chk)
- return NULL;
-
- ret = pskb_trim_rcsum(skb_chk, len);
- if (ret) {
- kfree_skb(skb_chk);
- return NULL;
- }
-
- return skb_chk;
-}
-
-/**
- * skb_checksum_trimmed - validate checksum of an skb
- * @skb: the skb to check
- * @transport_len: the data length beyond the network header
- * @skb_chkf: checksum function to use
- *
- * Applies the given checksum function skb_chkf to the provided skb.
- * Returns a checked and maybe trimmed skb. Returns NULL on error.
- *
- * If the skb has data beyond the given transport length, then a
- * trimmed & cloned skb is checked and returned.
- *
- * Caller needs to set the skb transport header and release the returned skb.
- * Provided skb is consumed.
- */
-struct sk_buff *skb_checksum_trimmed(struct sk_buff *skb,
- unsigned int transport_len,
- __sum16(*skb_chkf)(struct sk_buff *skb))
-{
- struct sk_buff *skb_chk;
- unsigned int offset = skb_transport_offset(skb);
- __sum16 ret;
-
- skb_chk = skb_checksum_maybe_trim(skb, transport_len);
- if (!skb_chk)
- return NULL;
-
- if (!pskb_may_pull(skb_chk, offset)) {
- kfree_skb(skb_chk);
- return NULL;
- }
-
- skb_pull_rcsum(skb_chk, offset);
- ret = skb_chkf(skb_chk);
- skb_push_rcsum(skb_chk, offset);
-
- if (ret) {
- kfree_skb(skb_chk);
- return NULL;
- }
-
- return skb_chk;
-}
-
-#endif /* LINUX_VERSION_IS_LESS(4, 2, 0) */
deleted file mode 100644
@@ -1,223 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Linux NET3: Internet Group Management Protocol [IGMP]
- *
- * This code implements the IGMP protocol as defined in RFC1112. There has
- * been a further revision of this protocol since which is now supported.
- *
- * If you have trouble with this module be careful what gcc you have used,
- * the older version didn't come out right using gcc 2.5.8, the newer one
- * seems to fall out with gcc 2.6.2.
- *
- * Authors:
- * Alan Cox <alan@lxorguk.ukuu.org.uk>
- *
- * Fixes:
- *
- * Alan Cox : Added lots of __inline__ to optimise
- * the memory usage of all the tiny little
- * functions.
- * Alan Cox : Dumped the header building experiment.
- * Alan Cox : Minor tweaks ready for multicast routing
- * and extended IGMP protocol.
- * Alan Cox : Removed a load of inline directives. Gcc 2.5.8
- * writes utterly bogus code otherwise (sigh)
- * fixed IGMP loopback to behave in the manner
- * desired by mrouted, fixed the fact it has been
- * broken since 1.3.6 and cleaned up a few minor
- * points.
- *
- * Chih-Jen Chang : Tried to revise IGMP to Version 2
- * Tsu-Sheng Tsao E-mail: chihjenc@scf.usc.edu and tsusheng@scf.usc.edu
- * The enhancements are mainly based on Steve Deering's
- * ipmulti-3.5 source code.
- * Chih-Jen Chang : Added the igmp_get_mrouter_info and
- * Tsu-Sheng Tsao igmp_set_mrouter_info to keep track of
- * the mrouted version on that device.
- * Chih-Jen Chang : Added the max_resp_time parameter to
- * Tsu-Sheng Tsao igmp_heard_query(). Using this parameter
- * to identify the multicast router version
- * and do what the IGMP version 2 specified.
- * Chih-Jen Chang : Added a timer to revert to IGMP V2 router
- * Tsu-Sheng Tsao if the specified time expired.
- * Alan Cox : Stop IGMP from 0.0.0.0 being accepted.
- * Alan Cox : Use GFP_ATOMIC in the right places.
- * Christian Daudt : igmp timer wasn't set for local group
- * memberships but was being deleted,
- * which caused a "del_timer() called
- * from %p with timer not initialized\n"
- * message (960131).
- * Christian Daudt : removed del_timer from
- * igmp_timer_expire function (960205).
- * Christian Daudt : igmp_heard_report now only calls
- * igmp_timer_expire if tm->running is
- * true (960216).
- * Malcolm Beattie : ttl comparison wrong in igmp_rcv made
- * igmp_heard_query never trigger. Expiry
- * miscalculation fixed in igmp_heard_query
- * and random() made to return unsigned to
- * prevent negative expiry times.
- * Alexey Kuznetsov: Wrong group leaving behaviour, backport
- * fix from pending 2.1.x patches.
- * Alan Cox: Forget to enable FDDI support earlier.
- * Alexey Kuznetsov: Fixed leaving groups on device down.
- * Alexey Kuznetsov: Accordance to igmp-v2-06 draft.
- * David L Stevens: IGMPv3 support, with help from
- * Vinay Kulkarni
- */
-
-#include <linux/igmp.h>
-#include <linux/ip.h>
-#include <linux/skbuff.h>
-#include <net/ip.h>
-
-#if LINUX_VERSION_IS_LESS(4, 2, 0)
-
-static int ip_mc_check_iphdr(struct sk_buff *skb)
-{
- const struct iphdr *iph;
- unsigned int len;
- unsigned int offset = skb_network_offset(skb) + sizeof(*iph);
-
- if (!pskb_may_pull(skb, offset))
- return -EINVAL;
-
- iph = ip_hdr(skb);
-
- if (iph->version != 4 || ip_hdrlen(skb) < sizeof(*iph))
- return -EINVAL;
-
- offset += ip_hdrlen(skb) - sizeof(*iph);
-
- if (!pskb_may_pull(skb, offset))
- return -EINVAL;
-
- iph = ip_hdr(skb);
-
- if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl)))
- return -EINVAL;
-
- len = skb_network_offset(skb) + ntohs(iph->tot_len);
- if (skb->len < len || len < offset)
- return -EINVAL;
-
- skb_set_transport_header(skb, offset);
-
- return 0;
-}
-
-static int ip_mc_check_igmp_reportv3(struct sk_buff *skb)
-{
- unsigned int len = skb_transport_offset(skb);
-
- len += sizeof(struct igmpv3_report);
-
- return pskb_may_pull(skb, len) ? 0 : -EINVAL;
-}
-
-static int ip_mc_check_igmp_query(struct sk_buff *skb)
-{
- unsigned int len = skb_transport_offset(skb);
-
- len += sizeof(struct igmphdr);
- if (skb->len < len)
- return -EINVAL;
-
- /* IGMPv{1,2}? */
- if (skb->len != len) {
- /* or IGMPv3? */
- len += sizeof(struct igmpv3_query) - sizeof(struct igmphdr);
- if (skb->len < len || !pskb_may_pull(skb, len))
- return -EINVAL;
- }
-
- /* RFC2236+RFC3376 (IGMPv2+IGMPv3) require the multicast link layer
- * all-systems destination addresses (224.0.0.1) for general queries
- */
- if (!igmp_hdr(skb)->group &&
- ip_hdr(skb)->daddr != htonl(INADDR_ALLHOSTS_GROUP))
- return -EINVAL;
-
- return 0;
-}
-
-static int ip_mc_check_igmp_msg(struct sk_buff *skb)
-{
- switch (igmp_hdr(skb)->type) {
- case IGMP_HOST_LEAVE_MESSAGE:
- case IGMP_HOST_MEMBERSHIP_REPORT:
- case IGMPV2_HOST_MEMBERSHIP_REPORT:
- /* fall through */
- return 0;
- case IGMPV3_HOST_MEMBERSHIP_REPORT:
- return ip_mc_check_igmp_reportv3(skb);
- case IGMP_HOST_MEMBERSHIP_QUERY:
- return ip_mc_check_igmp_query(skb);
- default:
- return -ENOMSG;
- }
-}
-
-static inline __sum16 ip_mc_validate_checksum(struct sk_buff *skb)
-{
- return skb_checksum_simple_validate(skb);
-}
-
-static int __ip_mc_check_igmp(struct sk_buff *skb)
-
-{
- struct sk_buff *skb_chk;
- unsigned int transport_len;
- unsigned int len = skb_transport_offset(skb) + sizeof(struct igmphdr);
- int ret;
-
- transport_len = ntohs(ip_hdr(skb)->tot_len) - ip_hdrlen(skb);
-
- skb_get(skb);
- skb_chk = skb_checksum_trimmed(skb, transport_len,
- ip_mc_validate_checksum);
- if (!skb_chk)
- return -EINVAL;
-
- if (!pskb_may_pull(skb_chk, len)) {
- kfree_skb(skb_chk);
- return -EINVAL;
- }
-
- ret = ip_mc_check_igmp_msg(skb_chk);
- if (ret) {
- kfree_skb(skb_chk);
- return ret;
- }
-
- kfree_skb(skb_chk);
-
- return 0;
-}
-
-/**
- * ip_mc_check_igmp - checks whether this is a sane IGMP packet
- * @skb: the skb to validate
- *
- * Checks whether an IPv4 packet is a valid IGMP packet. If so sets
- * skb network and transport headers accordingly and returns zero.
- *
- * -EINVAL: A broken packet was detected, i.e. it violates some internet
- * standard
- * -ENOMSG: IP header validation succeeded but it is not an IGMP packet.
- * -ENOMEM: A memory allocation failure happened.
- */
-int ip_mc_check_igmp(struct sk_buff *skb)
-{
- int ret = ip_mc_check_iphdr(skb);
-
- if (ret < 0)
- return ret;
-
- if (ip_hdr(skb)->protocol != IPPROTO_IGMP)
- return -ENOMSG;
-
- return __ip_mc_check_igmp(skb);
-}
-
-#endif /* LINUX_VERSION_IS_LESS(4, 2, 0) */
deleted file mode 100644
@@ -1,189 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright (C) 2010: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
- * Copyright (C) 2015: Linus Lüssing <linus.luessing@c0d3.blue>
- *
- * Based on the MLD support added to br_multicast.c by YOSHIFUJI Hideaki.
- */
-
-#include <linux/skbuff.h>
-#include <net/ipv6.h>
-#include <net/mld.h>
-#include <net/addrconf.h>
-#include <net/ip6_checksum.h>
-
-#if LINUX_VERSION_IS_LESS(4, 2, 0)
-
-static int ipv6_mc_check_ip6hdr(struct sk_buff *skb)
-{
- const struct ipv6hdr *ip6h;
- unsigned int len;
- unsigned int offset = skb_network_offset(skb) + sizeof(*ip6h);
-
- if (!pskb_may_pull(skb, offset))
- return -EINVAL;
-
- ip6h = ipv6_hdr(skb);
-
- if (ip6h->version != 6)
- return -EINVAL;
-
- len = offset + ntohs(ip6h->payload_len);
- if (skb->len < len || len <= offset)
- return -EINVAL;
-
- return 0;
-}
-
-static int ipv6_mc_check_exthdrs(struct sk_buff *skb)
-{
- const struct ipv6hdr *ip6h;
- int offset;
- u8 nexthdr;
- __be16 frag_off;
-
- ip6h = ipv6_hdr(skb);
-
- if (ip6h->nexthdr != IPPROTO_HOPOPTS)
- return -ENOMSG;
-
- nexthdr = ip6h->nexthdr;
- offset = skb_network_offset(skb) + sizeof(*ip6h);
- offset = ipv6_skip_exthdr(skb, offset, &nexthdr, &frag_off);
-
- if (offset < 0)
- return -EINVAL;
-
- if (nexthdr != IPPROTO_ICMPV6)
- return -ENOMSG;
-
- skb_set_transport_header(skb, offset);
-
- return 0;
-}
-
-static int ipv6_mc_check_mld_reportv2(struct sk_buff *skb)
-{
- unsigned int len = skb_transport_offset(skb);
-
- len += sizeof(struct mld2_report);
-
- return pskb_may_pull(skb, len) ? 0 : -EINVAL;
-}
-
-static int ipv6_mc_check_mld_query(struct sk_buff *skb)
-{
- struct mld_msg *mld;
- unsigned int len = skb_transport_offset(skb);
-
- /* RFC2710+RFC3810 (MLDv1+MLDv2) require link-local source addresses */
- if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL))
- return -EINVAL;
-
- len += sizeof(struct mld_msg);
- if (skb->len < len)
- return -EINVAL;
-
- /* MLDv1? */
- if (skb->len != len) {
- /* or MLDv2? */
- len += sizeof(struct mld2_query) - sizeof(struct mld_msg);
- if (skb->len < len || !pskb_may_pull(skb, len))
- return -EINVAL;
- }
-
- mld = (struct mld_msg *)skb_transport_header(skb);
-
- /* RFC2710+RFC3810 (MLDv1+MLDv2) require the multicast link layer
- * all-nodes destination address (ff02::1) for general queries
- */
- if (ipv6_addr_any(&mld->mld_mca) &&
- !ipv6_addr_is_ll_all_nodes(&ipv6_hdr(skb)->daddr))
- return -EINVAL;
-
- return 0;
-}
-
-static int ipv6_mc_check_mld_msg(struct sk_buff *skb)
-{
- struct mld_msg *mld = (struct mld_msg *)skb_transport_header(skb);
-
- switch (mld->mld_type) {
- case ICMPV6_MGM_REDUCTION:
- case ICMPV6_MGM_REPORT:
- /* fall through */
- return 0;
- case ICMPV6_MLD2_REPORT:
- return ipv6_mc_check_mld_reportv2(skb);
- case ICMPV6_MGM_QUERY:
- return ipv6_mc_check_mld_query(skb);
- default:
- return -ENOMSG;
- }
-}
-
-static inline __sum16 ipv6_mc_validate_checksum(struct sk_buff *skb)
-{
- return skb_checksum_validate(skb, IPPROTO_ICMPV6, ip6_compute_pseudo);
-}
-
-static int __ipv6_mc_check_mld(struct sk_buff *skb)
-
-{
- struct sk_buff *skb_chk = NULL;
- unsigned int transport_len;
- unsigned int len = skb_transport_offset(skb) + sizeof(struct mld_msg);
- int ret;
-
- transport_len = ntohs(ipv6_hdr(skb)->payload_len);
- transport_len -= skb_transport_offset(skb) - sizeof(struct ipv6hdr);
-
- skb_get(skb);
- skb_chk = skb_checksum_trimmed(skb, transport_len,
- ipv6_mc_validate_checksum);
- if (!skb_chk)
- return -EINVAL;
-
- if (!pskb_may_pull(skb_chk, len)) {
- kfree_skb(skb_chk);
- return -EINVAL;
- }
-
- ret = ipv6_mc_check_mld_msg(skb_chk);
- if (ret) {
- kfree_skb(skb_chk);
- return ret;
- }
-
- kfree_skb(skb_chk);
-
- return 0;
-}
-
-/**
- * ipv6_mc_check_mld - checks whether this is a sane MLD packet
- * @skb: the skb to validate
- *
- * Checks whether an IPv6 packet is a valid MLD packet. If so sets
- * skb network and transport headers accordingly and returns zero.
- *
- * -EINVAL: A broken packet was detected, i.e. it violates some internet
- * standard
- * -ENOMSG: IP header validation succeeded but it is not an MLD packet.
- * -ENOMEM: A memory allocation failure happened.
- */
-int ipv6_mc_check_mld(struct sk_buff *skb)
-{
- int ret;
-
- ret = ipv6_mc_check_ip6hdr(skb);
- if (ret < 0)
- return ret;
-
- ret = ipv6_mc_check_exthdrs(skb);
- if (ret < 0)
- return ret;
-
- return __ipv6_mc_check_mld(skb);
-}
-
-#endif /* LINUX_VERSION_IS_LESS(4, 2, 0) */
@@ -15,19 +15,6 @@
#include "compat-autoconf.h"
-#if LINUX_VERSION_IS_LESS(4, 0, 0)
-
-/* wild hack for batadv_getlink_net only */
-#define get_link_net get_xstats_size || 1 ? fallback_net : (struct net*)netdev->rtnl_link_ops->get_xstats_size
-
-#endif /* LINUX_VERSION_IS_LESS(4, 0, 0) */
-
-#if LINUX_VERSION_IS_LESS(4, 3, 0)
-
-#define IFF_NO_QUEUE 0; dev->tx_queue_len = 0
-
-#endif /* LINUX_VERSION_IS_LESS(4, 3, 0) */
-
#if LINUX_VERSION_IS_LESS(4, 15, 0)
#define batadv_softif_slave_add(__dev, __slave_dev, __extack) \