Merge pull request #303 from dedeckeh/pr_lede-17.01_nat46_xlat
Backport nat46 fixes to lede 17.01 branch
This commit is contained in:
commit
73c749d279
|
@ -9,14 +9,15 @@ include $(TOPDIR)/rules.mk
|
|||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=nat46
|
||||
PKG_VERSION:=7
|
||||
PKG_VERSION:=10
|
||||
PKG_RELEASE:=$(PKG_SOURCE_VERSION)
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_MIRROR_HASH:=43b7004bfa2c830d6025386bc2128015db0012277fd015f4ee44b9ee3b772a12
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_URL:=https://github.com/ayourtch/nat46.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=8ff2ae59ec9840a7b8b45f976c51cae80abe0226
|
||||
PKG_SOURCE_VERSION:=683fbd2b765506332a1af141545652bf58f03166
|
||||
PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
||||
|
@ -32,7 +33,7 @@ endef
|
|||
define Package/464xlat
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
DEPENDS:=+kmod-nat46
|
||||
DEPENDS:=+kmod-nat46 +ip
|
||||
TITLE:=464xlat CLAT support
|
||||
endef
|
||||
|
||||
|
|
|
@ -43,6 +43,11 @@ proto_464xlat_setup() {
|
|||
return
|
||||
fi
|
||||
|
||||
ip -6 rule del from all lookup local
|
||||
ip -6 rule add from all lookup local pref 1
|
||||
ip -6 rule add to $ip6addr lookup prelocal pref 0
|
||||
echo "$ip6addr" > /tmp/464-$cfg-anycast
|
||||
|
||||
proto_init_update "$link" 1
|
||||
proto_add_ipv4_route "0.0.0.0" 0 "" "" 2048
|
||||
proto_add_ipv6_route $ip6addr 128 "" "" "" "" 128
|
||||
|
@ -74,7 +79,20 @@ proto_464xlat_setup() {
|
|||
}
|
||||
|
||||
proto_464xlat_teardown() {
|
||||
464xlatcfg "464-$1"
|
||||
local cfg="$1"
|
||||
local link="464-$cfg"
|
||||
local ip6addr=$(cat /tmp/464-$cfg-anycast)
|
||||
local anycast_active
|
||||
|
||||
464xlatcfg "$link"
|
||||
|
||||
rm -rf /tmp/464-$cfg-anycast
|
||||
ip -6 rule del to $ip6addr lookup prelocal
|
||||
|
||||
if [ -z "$(ls /tmp/464-*-anycast 2>&-)" ]; then
|
||||
ip -6 rule del from all lookup local
|
||||
ip -6 rule add from all lookup local pref 0
|
||||
fi
|
||||
}
|
||||
|
||||
proto_464xlat_init_config() {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* 464xlatcfg.c
|
||||
*
|
||||
* Copyright (c) 2015 Steven Barth <cyrus@openwrt.org>
|
||||
* Copyright (c) 2017 Hans Dedecker <dedeckeh@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2
|
||||
|
@ -40,8 +41,9 @@ int main(int argc, const char *argv[])
|
|||
snprintf(buf, sizeof(buf), "/var/run/%s.pid", argv[1]);
|
||||
FILE *fp = fopen(buf, "r");
|
||||
if (fp) {
|
||||
fscanf(fp, "%d", &pid);
|
||||
if (fscanf(fp, "%d", &pid) == 1)
|
||||
kill(pid, SIGTERM);
|
||||
|
||||
unlink(buf);
|
||||
fclose(fp);
|
||||
}
|
||||
|
@ -52,7 +54,9 @@ int main(int argc, const char *argv[])
|
|||
if (!argv[3] || !argv[4] || !(fp = fopen(buf, "wx")))
|
||||
return 1;
|
||||
|
||||
signal(SIGTERM, sighandler);
|
||||
signal(SIGTERM, SIG_DFL);
|
||||
setvbuf(fp, NULL, _IOLBF, 0);
|
||||
fprintf(fp, "%d\n", getpid());
|
||||
|
||||
prefix[sizeof(prefix) - 1] = 0;
|
||||
strncpy(prefix, argv[3], sizeof(prefix) - 1);
|
||||
|
@ -133,6 +137,7 @@ int main(int argc, const char *argv[])
|
|||
fclose(stderr);
|
||||
chdir("/");
|
||||
setsid();
|
||||
signal(SIGTERM, sighandler);
|
||||
pause();
|
||||
|
||||
nat46 = fopen("/proc/net/nat46/control", "w");
|
||||
|
@ -141,6 +146,7 @@ int main(int argc, const char *argv[])
|
|||
fclose(nat46);
|
||||
}
|
||||
} else {
|
||||
rewind(fp);
|
||||
fprintf(fp, "%d\n", pid);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue