将 `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 隧道的文件描述符。

当它创建隧道时,如果您的进程终止,它将主动销毁隧道和任何关联的路由。