diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2014-12-08 11:27:41 +0900 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2015-03-03 16:38:30 +0900 |
commit | 4b3c23768cb81ac16838834d3ef3c26984137066 (patch) | |
tree | a3c48de7ef3ce807b209597b13fec706c56372ad | |
parent | e17c0ba1a385e6f0e7053f6b0206ff963d6b5ba5 (diff) | |
download | android_external_android-clat-4b3c23768cb81ac16838834d3ef3c26984137066.tar.gz android_external_android-clat-4b3c23768cb81ac16838834d3ef3c26984137066.tar.bz2 android_external_android-clat-4b3c23768cb81ac16838834d3ef3c26984137066.zip |
Move tun functions to a new tun.c.
(cherry picked from commit ff6f7fe4bd983c623d490100fa17cdb4936b95a2)
Change-Id: I1effc2309565375bbe98262dd602a0895ab49fcf
-rw-r--r-- | Android.mk | 2 | ||||
-rw-r--r-- | clatd.c | 39 | ||||
-rw-r--r-- | clatd.h | 8 | ||||
-rw-r--r-- | tun.c | 62 | ||||
-rw-r--r-- | tun.h | 30 |
5 files changed, 94 insertions, 47 deletions
@@ -1,7 +1,7 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) -LOCAL_SRC_FILES:=clatd.c dump.c checksum.c translate.c icmp.c ipv4.c ipv6.c config.c dns64.c logging.c getaddr.c netlink_callbacks.c netlink_msg.c setif.c mtu.c +LOCAL_SRC_FILES:=clatd.c dump.c checksum.c translate.c icmp.c ipv4.c ipv6.c config.c dns64.c logging.c getaddr.c netlink_callbacks.c netlink_msg.c setif.c mtu.c tun.c LOCAL_CFLAGS := -Wall -Werror -Wunused-parameter LOCAL_C_INCLUDES := external/libnl/include bionic/libc/dns/include @@ -50,6 +50,7 @@ #include "mtu.h" #include "getaddr.h" #include "dump.h" +#include "tun.h" #define DEVICEPREFIX "v4-" @@ -65,44 +66,6 @@ void stop_loop() { running = 0; } -/* function: tun_open - * tries to open the tunnel device - */ -int tun_open() { - int fd; - - fd = open("/dev/tun", O_RDWR); - if(fd < 0) { - fd = open("/dev/net/tun", O_RDWR); - } - - return fd; -} - -/* function: tun_alloc - * creates a tun interface and names it - * dev - the name for the new tun device - */ -int tun_alloc(char *dev, int fd) { - struct ifreq ifr; - int err; - - memset(&ifr, 0, sizeof(ifr)); - - ifr.ifr_flags = IFF_TUN; - if( *dev ) { - strncpy(ifr.ifr_name, dev, IFNAMSIZ); - ifr.ifr_name[IFNAMSIZ-1] = '\0'; - } - - if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){ - close(fd); - return err; - } - strcpy(dev, ifr.ifr_name); - return 0; -} - /* function: configure_packet_socket * Binds the packet socket and attaches the receive filter to it. * sock - the socket to configure @@ -18,9 +18,6 @@ #ifndef __CLATD_H__ #define __CLATD_H__ -#include <linux/if.h> -#include <linux/if_tun.h> - #define MAXMTU 1500 #define PACKETLEN (MAXMTU+sizeof(struct tun_pi)) #define CLATD_VERSION "1.4" @@ -33,9 +30,4 @@ // how frequently (in seconds) to poll for an address change while there is no traffic #define NO_TRAFFIC_INTERFACE_POLL_FREQUENCY 90 -struct tun_data { - char device4[IFNAMSIZ]; - int read_fd6, write_fd6, fd4; -}; - #endif /* __CLATD_H__ */ @@ -0,0 +1,62 @@ +/* + * Copyright 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * tun.c - tun device functions + */ +#include <fcntl.h> +#include <string.h> +#include <unistd.h> +#include <arpa/inet.h> +#include <linux/if.h> +#include <linux/if_tun.h> +#include <sys/ioctl.h> + +/* function: tun_open + * tries to open the tunnel device + */ +int tun_open() { + int fd; + + fd = open("/dev/tun", O_RDWR); + if(fd < 0) { + fd = open("/dev/net/tun", O_RDWR); + } + + return fd; +} + +/* function: tun_alloc + * creates a tun interface and names it + * dev - the name for the new tun device + */ +int tun_alloc(char *dev, int fd) { + struct ifreq ifr; + int err; + + memset(&ifr, 0, sizeof(ifr)); + + ifr.ifr_flags = IFF_TUN; + if( *dev ) { + strncpy(ifr.ifr_name, dev, IFNAMSIZ); + ifr.ifr_name[IFNAMSIZ-1] = '\0'; + } + + if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){ + close(fd); + return err; + } + strcpy(dev, ifr.ifr_name); + return 0; +} @@ -0,0 +1,30 @@ +/* + * Copyright 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * tun.h - tun device functions + */ +#ifndef __TUN_H__ +#define __TUN_H__ + +struct tun_data { + char device4[IFNAMSIZ]; + int read_fd6, write_fd6, fd4; +}; + +int set_nonblocking(int fd); +int tun_open(); +int tun_alloc(char *dev, int fd); + +#endif |