Преобразуйте `ip tuntap add` system() в код C
Я пытаюсь преобразовать system()
звоните, у меня есть в C, который звонит ip tuntap add ...
код C, который не полагается на system()
вызов.
В основном проблема в том, что туннельный адаптер, который я использую system("ip tuntap add ...")
вызов для вызова остается там, когда мое приложение принудительно прекращается.
Мне сказали, что я могу использовать rtnetlink для достижения своей цели. Я хотел бы преобразовать следующую строку в код C, который не зависит от system()
вызов. Я полагаю, что если я использую rtnetlink, то туннельный адаптер, который я использую, будет уничтожен ядром при завершении работы моего приложения, и это главная причина, по которой я хочу это сделать.
Это моя текущая строка в C:
system("ip tuntap add dev tun1 mode tun");
Если rtnetlink не такой, как я хотел бы сделать это, есть ли другой метод, который разрушит туннель, когда мое приложение будет принудительно завершено?
1 ответ
@ Jonathon Reinhart ответил на это в комментариях:
То, что вы ищете, это непостоянный адаптер TUN. Вместо того, чтобы использовать
system("ip tuntap add dev tun1 mode tun");
Посмотрите на tun_alloc
функция в этом файле: simpletun.c
Вы могли бы назвать это что-то вроде:
int tun_fd = tun_alloc("tun1", IFF_TUN | IFF_NO_PI);
Когда он вызывается, он создаст новый туннель, если он не существует, и вернет дескриптор файла для туннеля. Если он уже существует, он просто вернет дескриптор файла для туннеля.
Когда он создает туннель, если ваш процесс умирает, он будет активно разрушать туннель и любые связанные маршруты.