LINUX.ORG.RU

Нужна помощь по работе с socket`ами (UDP+BROADCAST)

 , , ,


0

2

Пишу DHCP-сервер (в академических целях) и вот назрел вопрос. Суть идеи: есть хост с кучей сетевых интерфейсов. На каждый интерфейс можно назначить свои настройки сети, либо не назначать (игнорировать запросы с этих интерфейсов). Я предполагал bind`ить socket на INADDR_ANY и слушать запросы, то есть получаю DHCPDISCOVER или DHCPREQUEST с адреса-источника 0.0.0.0 на адрес-назначение 255.255.255.255 . Так вот, есть ли возможность по recvfrom достать данные об интерфейсе на который пришел udp пакет, или придется под каждый интерфейс bind`ить socket?

про recvfrom - в общем случае imho нет. Наверно с AF_PACKET, SOCK_DGRAM можно.

mac-адрес источника пакета ты как получаешь ?

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 2)
Ответ на: комментарий от vel

про recvfrom я уже понял - структура sockaddr_in ничего нужного не содержит

ryvkin-sergey
() автор топика
Ответ на: комментарий от ryvkin-sergey

подробности гугли сам.

ценность этого типа сокета в возврате «struct sockaddr_ll» в которой есть и sll_ifindex и адреса.

Самое сложное - отправить пакет offer по езернет-адресу получателя в ответ на discovery.

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)

Еще можно попробовать открыть по сокету на каждый интерфейс и сделать setsockopt(SO_BINDTODEVICE). Тогда и с отправкой ответа наверное будет проще

alx777 ★★
()

Используйте recvmsg и IP_PKTINFO.

uglym8
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.