2015-03-16 3 views
0

Я пишу программу на C, которая должна взаимодействовать с виртуальными устройствами Ethernet. Вот некоторые примеры команд, которые я мог бы написать в доспехах, что я хочу, чтобы включить в свою программу C:Как создать виртуальное устройство Ethernet в C?

ip link add A type veth peer name B 
ip addr add 172.17.42.1/16 dev A 
ip link set A up 
ip link set B netns 123 

Я сделал некоторые поиски, но я не мог найти команды/библиотеки, которые я должен выполнить это вид операции. Может ли кто-нибудь указать мне в правильном направлении?

+1

Используйте [источник] (http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2) Люк. –

ответ

2

Вы не можете создать виртуальное устройство Ethernet в портативном C11 (или переносном C99), поскольку в стандарте C нет понятия Ethernet-устройств.

Для этого вам нужна поддержка операционной системы, и ваш вопрос становится специфичным для операционной системы.

Если вы ориентируетесь на операционную систему Linux, вы можете использовать strace(1), чтобы понять system calls, выполненный командами ip.

Однако, вы могли бы просто написать какой-нибудь конкретное приложение скрипта (работает выше команду) и тщательно использования system(3) или popen(3), чтобы запустить его (или даже использовать непосредственно fork(2), execve(2), pipe(2), poll(2) и т.д. ... далее Advanced Linux Programming для более). Испугайтесь потенциала code injection, и если вы построите командную строку, проверьте входные данные, входящие в нее.

Как ysdx комментировал, заглянуть внутрь rtnetlink(7)

+0

Спасибо за ваш быстрый ответ. Я действительно имел в виду Linux - совместимость в других операционных системах не нужна. Я посмотрю на strace - спасибо! Кроме того, я хочу, чтобы избежать popen и т. Д. – James

+1

Все это реализовано с помощью сетевых соединений AFAIK (и, вероятно, в основном NETLINK_ROUTE). См. «Man 7 rtnetlink». – ysdx

Смежные вопросы