Exemplo n.º 1
0
void manager_free(Manager *m) {
        Network *network;
        NetDev *netdev;
        Link *link;

        if (!m)
                return;

        udev_monitor_unref(m->udev_monitor);
        udev_unref(m->udev);
        sd_bus_unref(m->bus);
        sd_event_source_unref(m->udev_event_source);
        sd_event_source_unref(m->sigterm_event_source);
        sd_event_source_unref(m->sigint_event_source);
        sd_event_unref(m->event);

        while ((network = m->networks))
                network_free(network);

        while ((link = hashmap_first(m->links)))
                link_free(link);
        hashmap_free(m->links);

        while ((netdev = hashmap_first(m->netdevs)))
                netdev_free(netdev);
        hashmap_free(m->netdevs);

        sd_rtnl_unref(m->rtnl);

        free(m);
}
Exemplo n.º 2
0
static void tun_deinit(void) {
	int i;

	for (i = 0; i < TUN_N; i++) {
		if (!tun_g_array[i]) {
			break;
		}

		/* inetdev_deregister */
		netdev_free(tun_g_array[i]);
	}
}
Exemplo n.º 3
0
static int tun_init(void) {
	int err;
	struct net_device *tdev;
	char tun_name[16];
	int i;

	for (i = 0; i < TUN_N; i++) {
		struct tun *tun;

		snprintf(tun_name, sizeof(tun_name), "tun%d", i);

		tdev = netdev_alloc(tun_name, &tun_setup, sizeof(struct tun));
		if (tdev == NULL) {
			err = -ENOMEM;
			goto err_deinit;
		}

		err = inetdev_register_dev(tdev);
		if (err != 0) {
			goto err_netdev_free;
		}

		err = char_dev_register(tun_name, &tun_dev_file_ops);
		if (err != 0) {
			goto err_inetdev_deregister;
		}

		tun = netdev_priv(tdev, struct tun);
		mutex_init(&tun->mtx_use);

		tun_g_array[i] = tdev;
	}

	return 0;

err_inetdev_deregister:
	/* inetdev_deregister */
err_netdev_free:
	netdev_free(tdev);
err_deinit:
	tun_deinit();
	return err;

}
Exemplo n.º 4
0
void state_free(struct state *state)
{
	/* We have to stop the system call thread first, since it's using
	 * sockets that we want to close and reset.
	 */
	syscalls_free(state, state->syscalls);

	/* Then we close the sockets and reset the connections, while
	 * we still have a netdev for injecting reset packets to free
	 * per-connection kernel state.
	 */
	close_all_sockets(state);

	netdev_free(state->netdev);
	packets_free(state->packets);
	code_free(state->code);

	run_unlock(state);
	if (pthread_mutex_destroy(&state->mutex) != 0)
		die_perror("pthread_mutex_destroy");

	memset(state, 0, sizeof(*state));  /* paranoia to help catch bugs */
	free(state);
}
Exemplo n.º 5
0
Arquivo: veth.c Projeto: 0xcc/tapip
void veth_exit(void)
{
	netdev_free(veth);
}