From 447e65c539e4bfb5193090cfef5e4b1e8ebeefb2 Mon Sep 17 00:00:00 2001 From: Jianhui Zhao Date: Thu, 2 Apr 2020 21:28:03 +0800 Subject: [PATCH] wifidog-ng: Update to 2.0.2 Compatible with Linux kernel 5.3 and above Signed-off-by: Jianhui Zhao --- net/wifidog-ng/Makefile | 4 ++-- net/wifidog-ng/src/config.c | 18 ++++++++++++++++-- net/wifidog-ng/src/config.h | 2 +- net/wifidog-ng/src/main.c | 18 ++++++++++++++---- net/wifidog-ng/src/utils.h | 2 +- 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/net/wifidog-ng/Makefile b/net/wifidog-ng/Makefile index b9d7d7641..b893ff38b 100644 --- a/net/wifidog-ng/Makefile +++ b/net/wifidog-ng/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=wifidog-ng -PKG_VERSION:=2.0.1 +PKG_VERSION:=2.0.2 PKG_RELEASE:=1 PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT) @@ -16,7 +16,7 @@ PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT) PKG_LICENSE:=LGPL-2.1 PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Jianhui Zhao +PKG_MAINTAINER:=Jianhui Zhao include $(INCLUDE_DIR)/package.mk diff --git a/net/wifidog-ng/src/config.c b/net/wifidog-ng/src/config.c index 3ccad8438..c692d9ea3 100644 --- a/net/wifidog-ng/src/config.c +++ b/net/wifidog-ng/src/config.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 jianhui zhao + * Copyright (C) 2017 jianhui zhao * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -9,6 +9,7 @@ #include #include #include +#include #include "config.h" @@ -20,6 +21,9 @@ static int update_gw_interface(const char *interface) int ret = 0; struct net_device *dev; struct in_device *in_dev; +#if LINUX_VERSION_CODE > KERNEL_VERSION(5, 2, 21) + const struct in_ifaddr *ifa; +#endif dev = dev_get_by_name(&init_net, interface); if (!dev) { @@ -36,15 +40,25 @@ static int update_gw_interface(const char *interface) goto QUIT; } +#if LINUX_VERSION_CODE > KERNEL_VERSION(5, 2, 21) + in_dev_for_each_ifa_rcu(ifa, in_dev) { + if (ifa->ifa_flags & IFA_F_SECONDARY) + continue; +#else for_primary_ifa(in_dev) { +#endif conf.interface_ipaddr = ifa->ifa_local; conf.interface_mask = ifa->ifa_mask; conf.interface_broadcast = ifa->ifa_broadcast; pr_info("Found ip from %s: %pI4\n", interface, &conf.interface_ipaddr); break; +#if LINUX_VERSION_CODE > KERNEL_VERSION(5, 2, 21) + } +#else } endfor_ifa(in_dev) - +#endif + QUIT: dev_put(dev); diff --git a/net/wifidog-ng/src/config.h b/net/wifidog-ng/src/config.h index a7414affa..60bde1a48 100644 --- a/net/wifidog-ng/src/config.h +++ b/net/wifidog-ng/src/config.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 jianhui zhao + * Copyright (C) 2017 jianhui zhao * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/net/wifidog-ng/src/main.c b/net/wifidog-ng/src/main.c index afb1b038e..ac17078e5 100644 --- a/net/wifidog-ng/src/main.c +++ b/net/wifidog-ng/src/main.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 jianhui zhao + * Copyright (C) 2017 jianhui zhao * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -14,7 +14,9 @@ #include #include #include +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) #include +#endif #include "utils.h" #include "config.h" @@ -85,7 +87,11 @@ static u32 wifidog_hook(void *priv, struct sk_buff *skb, const struct nf_hook_st if (ct->status & IPS_HIJACKED) { if (is_allowed_mac(skb, state)) { /* Avoid duplication of authentication */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0) nf_reset(skb); +#else + nf_reset_ct(skb); +#endif nf_ct_kill(ct); } return NF_ACCEPT; @@ -149,7 +155,9 @@ static int __init wifidog_init(void) if (ret) return ret; -#if LINUX_VERSION_CODE > KERNEL_VERSION(4, 17, 19) +#if LINUX_VERSION_CODE > KERNEL_VERSION(5, 0, 21) + ret = nf_nat_ipv4_register_fn(&init_net, &wifidog_ops); +#elif LINUX_VERSION_CODE > KERNEL_VERSION(4, 17, 19) ret = nf_nat_l3proto_ipv4_register_fn(&init_net, &wifidog_ops); #elif LINUX_VERSION_CODE > KERNEL_VERSION(4, 12, 14) ret = nf_register_net_hook(&init_net, &wifidog_ops); @@ -174,7 +182,9 @@ static void __exit wifidog_exit(void) { deinit_config(); -#if LINUX_VERSION_CODE > KERNEL_VERSION(4, 17, 19) +#if LINUX_VERSION_CODE > KERNEL_VERSION(5, 0, 21) + nf_nat_ipv4_unregister_fn(&init_net, &wifidog_ops); +#elif LINUX_VERSION_CODE > KERNEL_VERSION(4, 17, 19) nf_nat_l3proto_ipv4_unregister_fn(&init_net, &wifidog_ops); #elif LINUX_VERSION_CODE > KERNEL_VERSION(4, 12, 14) nf_unregister_net_hook(&init_net, &wifidog_ops); @@ -188,5 +198,5 @@ static void __exit wifidog_exit(void) module_init(wifidog_init); module_exit(wifidog_exit); -MODULE_AUTHOR("jianhui zhao "); +MODULE_AUTHOR("jianhui zhao "); MODULE_LICENSE("GPL"); diff --git a/net/wifidog-ng/src/utils.h b/net/wifidog-ng/src/utils.h index 5f7aa08c4..816bacb46 100644 --- a/net/wifidog-ng/src/utils.h +++ b/net/wifidog-ng/src/utils.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 jianhui zhao + * Copyright (C) 2017 jianhui zhao * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as