build radvd for android

#!/system/bin/sh

cat << "EOF" > /data/local/tmp/radvd-wlan2.conf
interface wlan2 {

        AdvSendAdvert on;
        AdvLinkMTU 1500;
		

        prefix 64:ff9b:ffff::/64 {
           AdvOnLink on;
           AdvAutonomous on;
        };

        route 64:ff9b::/96 {
           AdvRoutePreference high;
       };

       route 2000::/64 {
           AdvRoutePreference high;
       };


       RDNSS 64:ff9b::7f09:909 {
       };
};
EOF

chmod -w /data/local/tmp/radvd-wlan2.conf

./radvd -C /data/local/tmp/radvd-wlan2.conf -m stderr -l /data/local/tmp -p /dev/radvd.pid
# ip -6 rule add from all iif wlan2 lookup local_network

ip -6 rule add from all iif wlan2 lookup tun0 pref 9999
ip -6 rule add from all iif tun0 lookup  local_network pref 9999

sysctl net.ipv6.conf.wlan2.accept_ra=1
sysctl net.ipv6.conf.wlan2.accept_ra_from_local=1
sysctl net.ipv6.conf.wlan2.addr_gen_mode=1

ip -6 route add 64:ff9b:ffff::/64 dev wlan2 table local_network
ip route get 64:ff9b::1.1.1.1 from 64:ff9b:ffff::11 iif wlan2
ip route get 64:ff9b:ffff::1111 from 64:ff9b::101:101 iif tun0

ip rule add iif wlan2 lookup tun0 pref 9999
ip rule add iif tun0 lookup local_network pref 9999
iptables -C FORWARD -j ACCEPT ||
iptables -I FORWARD -j ACCEPT
add_dns_nat() {
  iptables -C PREROUTING -t nat -p udp --dport 53 -i wlan2  -j DNAT --to $1 ||
  iptables -A PREROUTING -t nat -p udp --dport 53 -i wlan2  -j DNAT --to $1
}

ip -4 a s dev tun0 | grep 172.19.0. && add_dns_nat 172.19.0.2
ip -4 a s dev tun0 | grep 26.26.26. && add_dns_nat 26.26.26.2

ip route add 74.125.0.0/16 dev tun0 scope link table tun0
ip route add 142.250.0.0/15 dev tun0 scope link table tun0
ip route add 172.217.0.0/16 dev tun0 scope link table tun0
ip route add 216.58.0.0/15 dev tun0 scope link table tun0
build android radvd from source
level@ThinkStation:$ mkdir -p android_external_radvd/jni
level@ThinkStation:$ git clone https://github.com/ddrown/android_external_radvd android_external_radvd/jni
level@ThinkStation:$ cd android_external_radvd/jni

level@ThinkStation:android_external_radvd/jni$ git diff
diff --git a/Android.mk b/Android.mk
index 72880fc..9f4f911 100644
--- a/Android.mk
+++ b/Android.mk
@@ -5,7 +5,8 @@ LOCAL_SRC_FILES := log.c recv.c socket.c util.c device-common.c interface.c proc

 LOCAL_MODULE := radvd

-LOCAL_CFLAGS := -O2 -g -DINET6=1 -DPATH_RADVD_CONF=\"$(PATH_RADVD_CONF)\" -Wall -Werror -Wno-unused-function
+LOCAL_CFLAGS := -O2 -g -DINET6=1 -DPATH_RADVD_CONF=\"$(PATH_RADVD_CONF)\" -Wall -Werror -Wno-unused-function -fPIC -fPIE
+LOCAL_LDFLAGS := -fPIC -pie
 LOCAL_SYSTEM_SHARED_LIBRARIES := libc

 include $(BUILD_EXECUTABLE)
diff --git a/radvd.c b/radvd.c
index 6355ff0..f82f9dd 100644
--- a/radvd.c
+++ b/radvd.c
@@ -107,6 +107,8 @@ main(int argc, char *argv[])
 #ifdef HAVE_GETOPT_LONG
        int opt_idx;
 #endif
+(void)logfile;
+(void)log_method;

        pname = ((pname=strrchr(argv[0],'/')) != NULL)?pname+1:argv[0];

Comments

Popular Posts