Привязка сокета к интерфейсу Vlan

#c #sockets

Вопрос:

У меня проблема с отправкой пакетов UDP по интерфейсу Vlan.

Я настроил интерфейс vlan «eth0.2» с сопоставлением qos-выхода с приоритетом сокета 3 на PCP 6 Vlan. Теперь я хочу, чтобы мое приложение, которое отправляет пакеты UDP с указанным SO_Priority, использовало этот интерфейс. Я использовал опцию SO_BINDTODEVICE (см. Фрагмент кода).

Он не будет отправлять пакеты через eth0.2 (хотя sendmsg не возвращает -1), но он работает, когда я использую eth0.

PS: Я нашел пример программы, которая использует многоадресную рассылку, где используется интерфейс vlan, но я не хочу использовать многоадресную рассылку.

 ... tx_sockfd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); ... setsockoptres = setsockopt(tx_sockfd, SOL_SOCKET, SO_PRIORITY, amp;txsock_prio, sizeof(txsock_prio)); if (setsockoptres != 0) {  // Error Handling } ... setsockoptres = setsockopt(tx_sockfd, SOL_SOCKET, SO_BINDTODEVICE, interface, strlen(interface)); if (setsockoptres != 0) {  // Error Handling } ...  

У кого-нибудь есть какой-нибудь совет? Спасибо.

Комментарии:

1. SO_BINDTODEVICE влияет только на прием пакетов. Передаваемые пакеты проходят обычную маршрутизацию.