aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Tölke <toelke@in.tum.de>2010-08-03 18:58:54 +0000
committerPhilipp Tölke <toelke@in.tum.de>2010-08-03 18:58:54 +0000
commite73d970dd27383525462df253f157222221a987f (patch)
tree02544b0f4b5f198854036bdec85ba84d4a605037 /src
parentb839e3d732b529cc81a78d67968026cb0f8649e6 (diff)
downloadgnunet-e73d970dd27383525462df253f157222221a987f.tar.gz
gnunet-e73d970dd27383525462df253f157222221a987f.zip
Give the tun-interface an IPv4-Address
Diffstat (limited to 'src')
-rw-r--r--src/vpn/gnunet-helper-vpn.c54
-rwxr-xr-xsrc/vpn/tests/test-helper-ifaddr.sh17
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
70static void set_address(char* dev, char* address, unsigned long prefix_len) { /* {{{ */ 70static 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
103static 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
103void setnonblocking(int fd) {/*{{{*/ 144void 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
7mkfifo $FIFO 7mkfifo $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
11PID=$! 11PID=$!
12 12
@@ -20,13 +20,22 @@ while read line < $FIFO; do
20 fi 20 fi
21done 21done
22 22
23r=0
23if /sbin/ifconfig $IF | grep inet6 | grep -q '1234::1/16'; then 24if /sbin/ifconfig $IF | grep inet6 | grep -q '1234::1/16'; then
24 echo OK 25 echo OK
25 exit 0
26else 26else
27 echo FAILED: Interface-Address not set! 27 echo FAILED: Interface-Address not set for IPv6!
28 exit 1 28 r=1
29fi
30
31if /sbin/ifconfig $IF | grep "inet " | grep -q '10.10.10.1'; then
32 echo OK
33else
34 echo FAILED: Interface-Address not set for IPv4!
35 r=1
29fi 36fi
30 37
31rm $FIFO 38rm $FIFO
32kill $PID 39kill $PID
40
41exit $r