Opened 7 years ago
Closed 6 years ago
#273 closed баг (invalid)
Бесконечные попытки ресолвинга IP -> MAC
Reported by: | alx | Owned by: | alx |
---|---|---|---|
Priority: | низкий | Milestone: | 2 очередь |
Component: | any | Keywords: | |
Cc: |
Description
При инициировании медиапотока канальное окончание получает адрес IP удаленной стороны, и ей требуется узнать MAC адрес получателя (непосредственно или через маршрутизатор). Для этого канальное окончание делает ARP/NDP запрос и ждет ответа. После получении ответа настраиваются заголовки ethernet кадров и выполняется startRTP()
. Даже при успешном получении ответа запрос периодически повторяется по таймеру на случай изменения MAC удаленной стороны.
Таким образом, в коде нет условия, по которому ARP/NDP запросы перестают посылаться. Будучи один раз инициированы, запросы продолжают посылаться бесконечно, даже если этот хост никому уже не нужен.
Еще одна проблема: если был инициирован медиапоток, но еще до того как пришел ответ на ARP/NDP запрос и выполнилась startRTP() вызов был отбит, при получении ответа вызовется startRTP() и будет активирован медиапоток, хотя он уже никому не нужен...
Предлагается завести флаг типа haveMedia, который будет устанавливаться при
инициировании медиапотока и сбрасываться, когда медиапоток более не нужен. arp_timeout() должна проверять этот флаг и прекращать свои действия, если флаг не установлен.
Replying to alx:
Это не так - в stopRTP() отменяется таймер посылки ARP/NDP запроса.