10 #include <linux/if_tun.h>
12 #include <sys/ioctl.h>
13 #include <sys/socket.h>
20 static int tuntap_user_init(
void *
data,
void *
dev)
28 static void tuntap_add_addr(
unsigned char *
addr,
unsigned char *netmask,
39 static void tuntap_del_addr(
unsigned char *addr,
unsigned char *netmask,
54 static void tuntap_pre_exec(
void *
arg)
62 static int tuntap_open_tramp(
char *gate,
int *fd_out,
int me,
int remote,
63 char *
buffer,
int buffer_len,
int *used_out)
66 char version_buf[
sizeof(
"nnnnn\0")];
67 char *argv[] = {
"uml_net", version_buf,
"tuntap",
"up", gate,
80 pid =
run_helper(tuntap_pre_exec, &data, argv);
99 msg.msg_controllen =
sizeof(
buf);
101 n = recvmsg(me, &
msg, 0);
106 "errno = %d\n", errno);
128 static int tuntap_open(
void *data)
144 "err = %d\n", -pri->
fd);
147 memset(&ifr, 0,
sizeof(ifr));
163 "errno = %d\n", errno);
172 err = tuntap_open_tramp(pri->
gate_addr, &pri->
fd, fds[0],
173 fds[1], buffer, len, &used);
196 static void tuntap_close(
int fd,
void *data)
207 .init = tuntap_user_init,
209 .close = tuntap_close,
211 .add_address = tuntap_add_addr,
212 .delete_address = tuntap_del_addr,