#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 влияет только на прием пакетов. Передаваемые пакеты проходят обычную маршрутизацию.