diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2011-09-06 14:53:03 +0200 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2011-09-06 14:53:03 +0200 |
commit | 8e0e105eed7fb3227e6e2f189d83a5943fd043b6 (patch) | |
tree | 64c5b870a35d029b91d48428d4683bf0daa6a0ba /pingu_netlink.c | |
parent | 852fd592b073281162627ef4570d75d96e1263fb (diff) | |
download | pingu-8e0e105eed7fb3227e6e2f189d83a5943fd043b6.tar.bz2 pingu-8e0e105eed7fb3227e6e2f189d83a5943fd043b6.tar.xz |
pingu: cleanup on exit
We remove the ip rule, close the ping sockets and netlink sockets.
Diffstat (limited to 'pingu_netlink.c')
-rw-r--r-- | pingu_netlink.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/pingu_netlink.c b/pingu_netlink.c index f3ca952..4547670 100644 --- a/pingu_netlink.c +++ b/pingu_netlink.c @@ -637,7 +637,8 @@ static void netlink_read_cb(struct ev_loop *loop, struct ev_io *w, int revents) static void netlink_close(struct ev_loop *loop, struct netlink_fd *fd) { if (fd->fd >= 0) { - ev_io_stop(loop, &fd->io); + if (loop != NULL) + ev_io_stop(loop, &fd->io); close(fd->fd); fd->fd = 0; } @@ -737,3 +738,15 @@ err_close_all: return FALSE; } +void kernel_cleanup_iface(struct pingu_iface *iface) +{ + netlink_rule_del(&talk_fd, iface); +} + +void kernel_close(void) +{ + int i; + for (i = 0; i < ARRAY_SIZE(netlink_groups); i++) + netlink_close(NULL, &netlink_fds[i]); +} + |