Summary: | RIP v2 breaks after several interface attach/detach | ||||||
---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Sergey Vlasov <vsu> | ||||
Component: | zebra | Assignee: | Denis Ovsienko <pilot> | ||||
Status: | CLOSED WONTFIX | QA Contact: | qa-sisyphus | ||||
Severity: | normal | ||||||
Priority: | P2 | ||||||
Version: | unstable | ||||||
Hardware: | all | ||||||
OS: | Linux | ||||||
Attachments: |
|
Description
Sergey Vlasov
2004-03-31 18:06:26 MSD
Дополнение: rip_multicast_leave() всё-таки вызывается, но при этом не проходит тест if_is_up (ifp), поэтому ничего не делается. Created attachment 373 [details]
fix IP_ADD_MEMBERSHIP leak in ripd (RIP v2) when interfaces are deleted
Не проверял (вообще RIP не использую), но по части zebra вполне может быть. Всё оказывается немного хуже, странность ещё и в реализации IGMP. Ещё раз перечитал RFC1112 и понял, что ситуация с опусканием и поднятием интерфейса там явно не определена даже для однократного вызова ip_mc_join_group(). С одной стороны, приложения не волнуют такие события, они не обязаны отслеживать таблицу интерфейсов, с другой стороны, в этом конкретном случае join производится на конкретный ifindex и он уходит в даун. Мне кажется, разумным решением было бы различное поведение IGMP-кода в ядре при вызове join на любой интерфейс и на какой-то конкретный интерфейс (по аналогии bind() для TCP/UDP). Severity: major подтверждаю. P.S. Исходя из моего скромного опыта программирования для IGMP год назад могу подозревать, что в этой стороне зарыта ещё не одна неожиданность, по крайней мере в мультикастовых заголовочных файлах нужен порядочный аудит. Последний раз их трогал Алан Кокс в непонятно каком году. Патч приложен к zebra-0.94-alt2 Проблема осталась недофиксенной :( Ещё не до конца разобрался - похоже, интерфейсы иногда удаляются без предварительного down. Это проявляется реже, но всё-таки происходит; возможно, проявляется только с настоящим ppp, а не с использованным для быстрого тестирования патча ipip-туннелем. Могу только дёрнуть Kunihiro, RIP вообще не использую. Кстати, в zebra-0.95-pre2 вижу этот патч приложенным. Нашёл ещё одно безобразие (в последнее время это стало проявляться чаще): 2004/10/06 18:46:49 RIP: connected address 192.168.200.1/32 is deleted 2004/10/06 18:46:49 RIP: interface ppp0 index 347 flags 4240 metric 1 mtu 1500 is down 2004/10/06 18:46:52 RIP: rip_interface_delete: ppp0 is not up 2004/10/06 18:46:52 RIP: rip_multicast_leave: ppp0 is not up 2004/10/06 18:46:52 RIP: interface delete ppp0 index 347 flags 4240 metric 1 mtu 1500 Т.е, сначала через rip_interface_address_delete() удаляются адреса, в результате потом rip_multicast_leave() ничего не делает. :( Похоже, придётся перехватывать ещё и удаление адресов, отслеживая joined_multicast для каждого адреса. 0.95-pre3 пошла в Sisyphus 0.95 пошла Я не могу это сейчас ни диагностировать, ни чинить. |