summaryrefslogtreecommitdiffstats
path: root/package/network/utils/ipset/patches
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/utils/ipset/patches')
-rw-r--r--package/network/utils/ipset/patches/100-export.h.patch20
-rw-r--r--package/network/utils/ipset/patches/200-remove-ipv6_addr_copy.patch22
-rw-r--r--package/network/utils/ipset/patches/210-fix-ipv6_skip_exthdr.patch29
3 files changed, 71 insertions, 0 deletions
diff --git a/package/network/utils/ipset/patches/100-export.h.patch b/package/network/utils/ipset/patches/100-export.h.patch
new file mode 100644
index 000000000..d8a9ca23d
--- /dev/null
+++ b/package/network/utils/ipset/patches/100-export.h.patch
@@ -0,0 +1,20 @@
+--- a/kernel/net/netfilter/ipset/ip_set_getport.c
++++ b/kernel/net/netfilter/ipset/ip_set_getport.c
+@@ -8,7 +8,7 @@
+ /* Get Layer-4 data from the packets */
+
+ #include <linux/version.h>
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
+ #include <linux/export.h>
+ #endif
+ #include <linux/ip.h>
+--- a/kernel/net/netfilter/ipset/pfxlen.c
++++ b/kernel/net/netfilter/ipset/pfxlen.c
+@@ -1,5 +1,5 @@
+ #include <linux/version.h>
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
+ #include <linux/export.h>
+ #endif
+ #include <linux/netfilter/ipset/pfxlen.h>
diff --git a/package/network/utils/ipset/patches/200-remove-ipv6_addr_copy.patch b/package/network/utils/ipset/patches/200-remove-ipv6_addr_copy.patch
new file mode 100644
index 000000000..82a680f38
--- /dev/null
+++ b/package/network/utils/ipset/patches/200-remove-ipv6_addr_copy.patch
@@ -0,0 +1,22 @@
+--- a/kernel/net/netfilter/ipset/ip_set_hash_ip.c
++++ b/kernel/net/netfilter/ipset/ip_set_hash_ip.c
+@@ -241,7 +241,7 @@ hash_ip6_data_isnull(const struct hash_i
+ static inline void
+ hash_ip6_data_copy(struct hash_ip6_elem *dst, const struct hash_ip6_elem *src)
+ {
+- ipv6_addr_copy(&dst->ip.in6, &src->ip.in6);
++ dst->ip.in6 = src->ip.in6;
+ }
+
+ static inline void
+--- a/kernel/net/netfilter/ipset/ip_set_hash_net.c
++++ b/kernel/net/netfilter/ipset/ip_set_hash_net.c
+@@ -295,7 +295,7 @@ static inline void
+ hash_net6_data_copy(struct hash_net6_elem *dst,
+ const struct hash_net6_elem *src)
+ {
+- ipv6_addr_copy(&dst->ip.in6, &src->ip.in6);
++ dst->ip.in6 = src->ip.in6;
+ dst->cidr = src->cidr;
+ dst->nomatch = src->nomatch;
+ }
diff --git a/package/network/utils/ipset/patches/210-fix-ipv6_skip_exthdr.patch b/package/network/utils/ipset/patches/210-fix-ipv6_skip_exthdr.patch
new file mode 100644
index 000000000..aaecc79cd
--- /dev/null
+++ b/package/network/utils/ipset/patches/210-fix-ipv6_skip_exthdr.patch
@@ -0,0 +1,29 @@
+--- a/kernel/net/netfilter/ipset/ip_set_getport.c
++++ b/kernel/net/netfilter/ipset/ip_set_getport.c
+@@ -113,6 +113,17 @@ ip_set_get_ip4_port(const struct sk_buff
+ EXPORT_SYMBOL_GPL(ip_set_get_ip4_port);
+
+ #if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE)
++static int ip_set_skip_exthdr(const struct sk_buff *skb, int start,
++ u8 *nexthdrp)
++{
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
++ __be16 fragoff;
++ return ipv6_skip_exthdr(skb, start, nexthdrp, &fragoff);
++#else
++ return ipv6_skip_exthdr(skb, start, nexthdrp);
++#endif
++}
++
+ bool
+ ip_set_get_ip6_port(const struct sk_buff *skb, bool src,
+ __be16 *port, u8 *proto)
+@@ -121,7 +132,7 @@ ip_set_get_ip6_port(const struct sk_buff
+ u8 nexthdr;
+
+ nexthdr = ipv6_hdr(skb)->nexthdr;
+- protoff = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &nexthdr);
++ protoff = ip_set_skip_exthdr(skb, sizeof(struct ipv6hdr), &nexthdr);
+ if (protoff < 0)
+ return false;
+