summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2014-12-08 11:27:41 +0900
committerLorenzo Colitti <lorenzo@google.com>2015-03-03 16:38:30 +0900
commit4b3c23768cb81ac16838834d3ef3c26984137066 (patch)
treea3c48de7ef3ce807b209597b13fec706c56372ad
parente17c0ba1a385e6f0e7053f6b0206ff963d6b5ba5 (diff)
downloadandroid_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.mk2
-rw-r--r--clatd.c39
-rw-r--r--clatd.h8
-rw-r--r--tun.c62
-rw-r--r--tun.h30
5 files changed, 94 insertions, 47 deletions
diff --git a/Android.mk b/Android.mk
index 988d925..3750eaf 100644
--- a/Android.mk
+++ b/Android.mk
@@ -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
diff --git a/clatd.c b/clatd.c
index 3f0af0b..1de39c8 100644
--- a/clatd.c
+++ b/clatd.c
@@ -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
diff --git a/clatd.h b/clatd.h
index e7cef43..b80b7cd 100644
--- a/clatd.h
+++ b/clatd.h
@@ -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__ */
diff --git a/tun.c b/tun.c
new file mode 100644
index 0000000..ef6b111
--- /dev/null
+++ b/tun.c
@@ -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;
+}
diff --git a/tun.h b/tun.h
new file mode 100644
index 0000000..9ccb037
--- /dev/null
+++ b/tun.h
@@ -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