diff options
author | Philipp Tölke <toelke@in.tum.de> | 2010-08-03 18:58:54 +0000 |
---|---|---|
committer | Philipp Tölke <toelke@in.tum.de> | 2010-08-03 18:58:54 +0000 |
commit | e73d970dd27383525462df253f157222221a987f (patch) | |
tree | 02544b0f4b5f198854036bdec85ba84d4a605037 | |
parent | b839e3d732b529cc81a78d67968026cb0f8649e6 (diff) | |
download | gnunet-e73d970dd27383525462df253f157222221a987f.tar.gz gnunet-e73d970dd27383525462df253f157222221a987f.zip |
Give the tun-interface an IPv4-Address
-rw-r--r-- | src/vpn/gnunet-helper-vpn.c | 54 | ||||
-rwxr-xr-x | src/vpn/tests/test-helper-ifaddr.sh | 17 |
2 files changed, 65 insertions, 6 deletions
diff --git a/src/vpn/gnunet-helper-vpn.c b/src/vpn/gnunet-helper-vpn.c index 0307607d8..6a6aaf9dc 100644 --- a/src/vpn/gnunet-helper-vpn.c +++ b/src/vpn/gnunet-helper-vpn.c | |||
@@ -67,7 +67,7 @@ void term(int sig) { | |||
67 | running = 0; | 67 | running = 0; |
68 | } | 68 | } |
69 | 69 | ||
70 | static void set_address(char* dev, char* address, unsigned long prefix_len) { /* {{{ */ | 70 | static void set_address6(char* dev, char* address, unsigned long prefix_len) { /* {{{ */ |
71 | int fd = socket(AF_INET6, SOCK_DGRAM, 0); | 71 | int fd = socket(AF_INET6, SOCK_DGRAM, 0); |
72 | 72 | ||
73 | struct ifreq ifr; | 73 | struct ifreq ifr; |
@@ -100,6 +100,47 @@ static void set_address(char* dev, char* address, unsigned long prefix_len) { /* | |||
100 | /* FIXME */ ioctl(fd, SIOCSIFFLAGS, &ifr); | 100 | /* FIXME */ ioctl(fd, SIOCSIFFLAGS, &ifr); |
101 | } /* }}} */ | 101 | } /* }}} */ |
102 | 102 | ||
103 | static void set_address4(char* dev, char* address, char* mask) { /* {{{ */ | ||
104 | int fd=0; | ||
105 | struct sockaddr_in* addr; | ||
106 | struct ifreq ifr; | ||
107 | |||
108 | memset(&ifr, 0, sizeof(struct ifreq)); | ||
109 | addr = (struct sockaddr_in *)&(ifr.ifr_addr); | ||
110 | memset(addr, 0, sizeof(struct sockaddr_in)); | ||
111 | addr->sin_family = AF_INET; | ||
112 | addr->sin_addr.s_addr = inet_addr(address); | ||
113 | |||
114 | /* FIXME */ inet_pton(AF_INET, address, &addr->sin_addr.s_addr); | ||
115 | |||
116 | fd = socket(PF_INET, SOCK_DGRAM, 0); | ||
117 | if(fd < 0) { | ||
118 | perror("socket()"); | ||
119 | return; | ||
120 | } | ||
121 | |||
122 | strncpy(ifr.ifr_name, dev, IFNAMSIZ); | ||
123 | |||
124 | if(ioctl(fd, SIOCSIFADDR, &ifr) != 0 ) { | ||
125 | perror("SIOCSIFADDR"); | ||
126 | close(fd); | ||
127 | return; | ||
128 | } | ||
129 | |||
130 | addr = (struct sockaddr_in*)&(ifr.ifr_netmask); | ||
131 | /* FIXME */ inet_pton(AF_INET, mask, &addr->sin_addr.s_addr); | ||
132 | |||
133 | if(ioctl(fd, SIOCSIFNETMASK, &ifr) != 0 ) { | ||
134 | perror("SIOCSIFNETMASK"); | ||
135 | close(fd); | ||
136 | return; | ||
137 | } | ||
138 | |||
139 | /* FIXME */ ioctl(fd, SIOCGIFFLAGS, &ifr); | ||
140 | ifr.ifr_flags |= IFF_UP | IFF_RUNNING; | ||
141 | /* FIXME */ ioctl(fd, SIOCSIFFLAGS, &ifr); | ||
142 | } /* }}} */ | ||
143 | |||
103 | void setnonblocking(int fd) {/*{{{*/ | 144 | void setnonblocking(int fd) {/*{{{*/ |
104 | int opts; | 145 | int opts; |
105 | 146 | ||
@@ -131,11 +172,20 @@ int main(int argc, char** argv) { | |||
131 | 172 | ||
132 | fprintf(stderr, "Initialized the interface %s as %d.\n", dev, fd_tun); | 173 | fprintf(stderr, "Initialized the interface %s as %d.\n", dev, fd_tun); |
133 | 174 | ||
175 | { | ||
134 | // TODO: get this out of argv | 176 | // TODO: get this out of argv |
135 | char address[] = "1234::1"; | 177 | char address[] = "1234::1"; |
136 | unsigned long prefix_len = 16; | 178 | unsigned long prefix_len = 16; |
137 | 179 | ||
138 | set_address(dev, address, prefix_len); | 180 | set_address6(dev, address, prefix_len); |
181 | } | ||
182 | |||
183 | { | ||
184 | char address[] = "10.10.10.1"; | ||
185 | char mask[] = "255.255.255.252"; | ||
186 | |||
187 | set_address4(dev, address, mask); | ||
188 | } | ||
139 | 189 | ||
140 | uid_t uid = getuid (); | 190 | uid_t uid = getuid (); |
141 | if (setresuid (uid, uid, uid) != 0 ) | 191 | if (setresuid (uid, uid, uid) != 0 ) |
diff --git a/src/vpn/tests/test-helper-ifaddr.sh b/src/vpn/tests/test-helper-ifaddr.sh index ced529226..f64f9aa53 100755 --- a/src/vpn/tests/test-helper-ifaddr.sh +++ b/src/vpn/tests/test-helper-ifaddr.sh | |||
@@ -6,7 +6,7 @@ rm $FIFO | |||
6 | 6 | ||
7 | mkfifo $FIFO | 7 | mkfifo $FIFO |
8 | 8 | ||
9 | /opt/gnunet/bin/gnunet-vpn-helper > $FIFO 2>&1 & | 9 | /opt/gnunet/bin/gnunet-helper-vpn > $FIFO 2>&1 & |
10 | 10 | ||
11 | PID=$! | 11 | PID=$! |
12 | 12 | ||
@@ -20,13 +20,22 @@ while read line < $FIFO; do | |||
20 | fi | 20 | fi |
21 | done | 21 | done |
22 | 22 | ||
23 | r=0 | ||
23 | if /sbin/ifconfig $IF | grep inet6 | grep -q '1234::1/16'; then | 24 | if /sbin/ifconfig $IF | grep inet6 | grep -q '1234::1/16'; then |
24 | echo OK | 25 | echo OK |
25 | exit 0 | ||
26 | else | 26 | else |
27 | echo FAILED: Interface-Address not set! | 27 | echo FAILED: Interface-Address not set for IPv6! |
28 | exit 1 | 28 | r=1 |
29 | fi | ||
30 | |||
31 | if /sbin/ifconfig $IF | grep "inet " | grep -q '10.10.10.1'; then | ||
32 | echo OK | ||
33 | else | ||
34 | echo FAILED: Interface-Address not set for IPv4! | ||
35 | r=1 | ||
29 | fi | 36 | fi |
30 | 37 | ||
31 | rm $FIFO | 38 | rm $FIFO |
32 | kill $PID | 39 | kill $PID |
40 | |||
41 | exit $r | ||