~mdw
/
secnet
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
NEW etc.: Use NEW in all obvious places
[secnet]
/
tun.c
diff --git
a/tun.c
b/tun.c
index
9ef3a9d
..
d5e0e9e
100644
(file)
--- a/
tun.c
+++ b/
tun.c
@@
-98,7
+98,7
@@
static int tun_beforepoll(void *sst, struct pollfd *fds, int *nfds_io,
int *timeout_io)
{
struct tun *st=sst;
int *timeout_io)
{
struct tun *st=sst;
-
*nfds_io=1
;
+
BEFOREPOLL_WANT_FDS(1)
;
fds[0].fd=st->fd;
fds[0].events=POLLIN;
return 0;
fds[0].fd=st->fd;
fds[0].events=POLLIN;
return 0;
@@
-118,6
+118,7
@@
static void tun_afterpoll(void *sst, struct pollfd *fds, int nfds)
buffer_init(st->buff,calculate_max_start_pad());
l=read(st->fd, st->buff->start, buf_remaining_space(st->buff));
if (l<0) {
buffer_init(st->buff,calculate_max_start_pad());
l=read(st->fd, st->buff->start, buf_remaining_space(st->buff));
if (l<0) {
+ if (errno==EINTR || iswouldblock(errno)) return;
fatal_perror("tun_afterpoll: read()");
}
if (l==0) {
fatal_perror("tun_afterpoll: read()");
}
if (l==0) {
@@
-353,6
+354,7
@@
static void tun_phase_hook(void *sst, uint32_t newphase)
our networks. */
setcloexec(st->fd);
our networks. */
setcloexec(st->fd);
+ setnonblock(st->fd);
hostaddr=ipaddr_to_string(st->nl.local_address);
secnetaddr=ipaddr_to_string(st->nl.secnet_address);
hostaddr=ipaddr_to_string(st->nl.local_address);
secnetaddr=ipaddr_to_string(st->nl.secnet_address);
@@
-440,8
+442,10
@@
static void tun_phase_hook(void *sst, uint32_t newphase)
tun_set_route(st,r);
}
tun_set_route(st,r);
}
+ add_hook(PHASE_CHILDPERSIST,childpersist_closefd_hook,&st->fd);
+
/* Register for poll() */
/* Register for poll() */
- register_for_poll(st, tun_beforepoll, tun_afterpoll,
1,
st->nl.name);
+ register_for_poll(st, tun_beforepoll, tun_afterpoll, st->nl.name);
}
static list_t *tun_create(closure_t *self, struct cloc loc, dict_t *context,
}
static list_t *tun_create(closure_t *self, struct cloc loc, dict_t *context,
@@
-452,7
+456,7
@@
static list_t *tun_create(closure_t *self, struct cloc loc, dict_t *context,
dict_t *dict;
string_t flavour,type;
dict_t *dict;
string_t flavour,type;
-
st=safe_malloc(sizeof(*st),"tun_apply"
);
+
NEW(st
);
/* First parameter must be a dict */
item=list_elem(args,0);
/* First parameter must be a dict */
item=list_elem(args,0);