将 `ip tuntap add` system() 调用转换为 C 代码
Convert `ip tuntap add` system() call to C code
我正在尝试将我在 C 中调用 ip tuntap add ...
的 system()
调用转换为不依赖于 system()
调用的 C 代码。
基本上,当我的应用程序被强制终止时,我使用 system("ip tuntap add ...")
调用调出的隧道适配器留在那儿是一个问题。
有人告诉我可以使用 rtnetlink to achieve my goal. I'd like to convert the following line into C code that doesn't rely on the system()
call. I believe if I use rtnetlink 当我的应用程序终止时,我启动的隧道适配器将被内核销毁,这是我想要的主要原因这样做。
这是我在 C 中的当前行:
system("ip tuntap add dev tun1 mode tun");
如果 rtnetlink 不是我这样做的方式,是否有另一种方法可以在我的应用程序被强制终止时破坏隧道?
@Jonathon Reinhart 在评论中回答了这个问题:
您正在寻找的是 non-persistent TUN 适配器。而不是使用
system("ip tuntap add dev tun1 mode tun");
查看此文件中的 tun_alloc
函数:simpletun.c
你可以这样称呼它:
int tun_fd = tun_alloc("tun1", IFF_TUN | IFF_NO_PI);
调用时,如果新隧道不存在,它将创建新隧道,return 隧道的文件描述符。如果它已经存在,它将简单地 return 隧道的文件描述符。
当它创建隧道时,如果您的进程终止,它将主动销毁隧道和任何关联的路由。
我正在尝试将我在 C 中调用 ip tuntap add ...
的 system()
调用转换为不依赖于 system()
调用的 C 代码。
基本上,当我的应用程序被强制终止时,我使用 system("ip tuntap add ...")
调用调出的隧道适配器留在那儿是一个问题。
有人告诉我可以使用 rtnetlink to achieve my goal. I'd like to convert the following line into C code that doesn't rely on the system()
call. I believe if I use rtnetlink 当我的应用程序终止时,我启动的隧道适配器将被内核销毁,这是我想要的主要原因这样做。
这是我在 C 中的当前行:
system("ip tuntap add dev tun1 mode tun");
如果 rtnetlink 不是我这样做的方式,是否有另一种方法可以在我的应用程序被强制终止时破坏隧道?
@Jonathon Reinhart 在评论中回答了这个问题:
您正在寻找的是 non-persistent TUN 适配器。而不是使用
system("ip tuntap add dev tun1 mode tun");
查看此文件中的 tun_alloc
函数:simpletun.c
你可以这样称呼它:
int tun_fd = tun_alloc("tun1", IFF_TUN | IFF_NO_PI);
调用时,如果新隧道不存在,它将创建新隧道,return 隧道的文件描述符。如果它已经存在,它将简单地 return 隧道的文件描述符。
当它创建隧道时,如果您的进程终止,它将主动销毁隧道和任何关联的路由。