<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>3915</bug_id>
          
          <creation_ts>2004-03-31 18:06:26 +0400</creation_ts>
          <short_desc>RIP v2 breaks after several interface attach/detach</short_desc>
          <delta_ts>2005-11-10 01:28:07 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>zebra</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergey Vlasov">vsu</reporter>
          <assigned_to name="Denis Ovsienko">pilot</assigned_to>
          
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>12640</commentid>
    <comment_count>0</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2004-03-31 18:06:26 +0400</bug_when>
    <thetext>В zebra-0.94-alt1 при попытке использовать RIP v2 на ppp-интерфейсе после
нескольких поднятий и обрывов связи ripd перестаёт использовать интерфейс:

2004/03/31 13:31:58 RIP: can&apos;t setsockopt IP_ADD_MEMBERSHIP No buffer space
available
2004/03/31 13:31:58 RIP: multicast join failed, interface ppp0 not running

Это воспроизводится также следующей командой (при этом в конфигурации должен
быть включен rip version 2 для интерфейса test):

for ((i=0; i &lt; 20; ++i)) do ip tunnel add mode ipip local 192.168.99.0 remote
192.168.99.1 name test; ip addr add 192.168.98.1 peer 192.168.98.2 dev test; ip
link set test multicast on up; sleep 2; ip tunnel del name test; done

После добавления трассировки вызовов ipv4_multicast_join/ipv4_multicast_leave
выявилась следующая картина:

2004/03/31 17:50:51 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180334) for test
2004/03/31 17:50:52 RIP: interface delete test index 180334 flags 4240 metric 1
mtu 1480
2004/03/31 17:50:53 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180335) for test
2004/03/31 17:50:54 RIP: interface delete test index 180335 flags 4240 metric 1
mtu 1480
2004/03/31 17:50:55 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180336) for test
2004/03/31 17:50:56 RIP: interface delete test index 180336 flags 4240 metric 1
mtu 1480
2004/03/31 17:50:57 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180337) for test
2004/03/31 17:50:58 RIP: interface delete test index 180337 flags 4240 metric 1
mtu 1480
2004/03/31 17:50:59 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180338) for test
2004/03/31 17:51:00 RIP: interface delete test index 180338 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:01 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180339) for test
2004/03/31 17:51:02 RIP: interface delete test index 180339 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:03 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180340) for test
2004/03/31 17:51:04 RIP: interface delete test index 180340 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:05 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180341) for test
2004/03/31 17:51:06 RIP: interface delete test index 180341 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:07 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180342) for test
2004/03/31 17:51:08 RIP: interface delete test index 180342 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:09 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180343) for test
2004/03/31 17:51:10 RIP: interface delete test index 180343 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:11 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180344) for test
2004/03/31 17:51:12 RIP: interface delete test index 180344 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:13 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180345) for test
2004/03/31 17:51:14 RIP: interface delete test index 180345 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:15 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180346) for test
2004/03/31 17:51:16 RIP: interface delete test index 180346 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:17 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180347) for test
2004/03/31 17:51:18 RIP: interface delete test index 180347 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:19 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180348) for test
2004/03/31 17:51:20 RIP: interface delete test index 180348 flags 4240 metric 1
mtu 1480
2004/03/31 17:51:21 RIP: ipv4_multicast_join(sock=6, group=0xe0000009,
ifa=0xc0a86201, ifindex=180349) for test
2004/03/31 17:51:21 RIP: can&apos;t setsockopt IP_ADD_MEMBERSHIP No buffer space
available
2004/03/31 17:51:21 RIP: multicast join failed, interface test not running
2004/03/31 17:51:22 RIP: interface delete test index 180349 flags 4240 metric 1
mtu 1480

Т.е., каждый раз при появлении нового интерфейса выполняется join, однако при
удалении интерфейса leave не выполняется, а ядро автоматически не вычищает
записи при удалении интерфейсов (возможно, оно и не должно этого делать).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12641</commentid>
    <comment_count>1</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2004-03-31 18:25:39 +0400</bug_when>
    <thetext>Дополнение: rip_multicast_leave() всё-таки вызывается, но при этом не проходит
тест if_is_up (ifp), поэтому ничего не делается.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12643</commentid>
    <comment_count>2</comment_count>
      <attachid>373</attachid>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2004-03-31 19:38:37 +0400</bug_when>
    <thetext>Created attachment 373
fix IP_ADD_MEMBERSHIP leak in ripd (RIP v2) when interfaces are deleted</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12644</commentid>
    <comment_count>3</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2004-03-31 22:13:35 +0400</bug_when>
    <thetext>Не проверял (вообще RIP не использую), но по части zebra вполне может быть. Всё
оказывается немного хуже, странность ещё и в реализации IGMP.
Ещё раз перечитал RFC1112 и понял, что ситуация с опусканием и поднятием
интерфейса там явно не определена даже для однократного вызова
ip_mc_join_group(). С одной стороны, приложения не волнуют такие события, они не
обязаны отслеживать таблицу интерфейсов, с другой стороны, в этом конкретном
случае join производится на конкретный ifindex и он уходит в даун.
Мне кажется, разумным решением было бы различное поведение IGMP-кода в ядре при
вызове join на любой интерфейс и на какой-то конкретный интерфейс (по аналогии
bind() для TCP/UDP).
Severity: major подтверждаю.

P.S. Исходя из моего скромного опыта программирования для IGMP год назад могу
подозревать, что в этой стороне зарыта ещё не одна неожиданность, по крайней
мере в мультикастовых заголовочных файлах нужен порядочный аудит. Последний раз
их трогал Алан Кокс в непонятно каком году.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13865</commentid>
    <comment_count>4</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2004-05-16 23:48:46 +0400</bug_when>
    <thetext>Патч приложен к zebra-0.94-alt2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17099</commentid>
    <comment_count>5</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2004-07-15 17:12:05 +0400</bug_when>
    <thetext>Проблема осталась недофиксенной :(

Ещё не до конца разобрался - похоже, интерфейсы иногда удаляются без
предварительного down.  Это проявляется реже, но всё-таки происходит; возможно,
проявляется только с настоящим ppp, а не с использованным для быстрого
тестирования патча ipip-туннелем.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17958</commentid>
    <comment_count>6</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2004-08-09 19:03:06 +0400</bug_when>
    <thetext>Могу только дёрнуть Kunihiro, RIP вообще не использую.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18936</commentid>
    <comment_count>7</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2004-09-26 16:03:21 +0400</bug_when>
    <thetext>Кстати, в zebra-0.95-pre2 вижу этот патч приложенным.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19084</commentid>
    <comment_count>8</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2004-10-06 19:00:58 +0400</bug_when>
    <thetext>Нашёл ещё одно безобразие (в последнее время это стало проявляться чаще):

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 для каждого адреса.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21783</commentid>
    <comment_count>9</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2005-02-08 17:11:18 +0300</bug_when>
    <thetext>0.95-pre3 пошла в Sisyphus</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22844</commentid>
    <comment_count>10</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2005-03-29 16:36:09 +0400</bug_when>
    <thetext>0.95 пошла</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32592</commentid>
    <comment_count>11</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2005-10-28 14:10:53 +0400</bug_when>
    <thetext>Я не могу это сейчас ни диагностировать, ни чинить.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373</attachid>
            <date>2004-03-31 19:38:37 +0400</date>
            <delta_ts>2004-03-31 19:38:37 +0400</delta_ts>
            <desc>fix IP_ADD_MEMBERSHIP leak in ripd (RIP v2) when interfaces are deleted</desc>
            <filename>zebra-0.94-alt-ripd-mcast-leak.patch</filename>
            <type>text/plain</type>
            <size>1437</size>
            <attacher name="Sergey Vlasov">vsu</attacher>
            
              <data encoding="base64">LS0tIHplYnJhLTAuOTQvcmlwZC9yaXBfaW50ZXJmYWNlLmMubWNhc3QtbGVhawkyMDAzLTExLTA0
IDIxOjAwOjQyICswMzAwCisrKyB6ZWJyYS0wLjk0L3JpcGQvcmlwX2ludGVyZmFjZS5jCTIwMDQt
MDMtMzEgMTk6MzM6MjkgKzA0MDAKQEAgLTMwOSw4ICszMDksMTEgQEAgcmlwX3JlcXVlc3RfbmVp
Z2hib3JfYWxsICgpCiBpbnQKIHJpcF9tdWx0aWNhc3Rfam9pbiAoc3RydWN0IGludGVyZmFjZSAq
aWZwLCBpbnQgc29jaykKIHsKKyAgc3RydWN0IHJpcF9pbnRlcmZhY2UgKnJpOwogICBsaXN0bm9k
ZSBjbm9kZTsKIAorICByaSA9IGlmcC0+aW5mbzsKKwogICBpZiAoaWZfaXNfdXAgKGlmcCkgJiYg
aWZfaXNfbXVsdGljYXN0IChpZnApKQogICAgIHsKICAgICAgIGlmIChJU19SSVBfREVCVUdfRVZF
TlQpCkBAIC0zMzIsNyArMzM1LDEwIEBAIHJpcF9tdWx0aWNhc3Rfam9pbiAoc3RydWN0IGludGVy
ZmFjZSAqaWYKIAkgIGlmIChpcHY0X211bHRpY2FzdF9qb2luIChzb2NrLCBncm91cCwgcC0+cHJl
Zml4LCBpZnAtPmlmaW5kZXgpIDwgMCkKIAkgICAgcmV0dXJuIC0xOwogCSAgZWxzZQotCSAgICBy
ZXR1cm4gMDsKKwkgICAgeworCSAgICAgIHJpLT5qb2luZWRfbXVsdGljYXN0ID0gMTsKKwkgICAg
ICByZXR1cm4gMDsKKwkgICAgfQogCX0KICAgICB9CiAgIHJldHVybiAwOwpAQCAtMzQyLDEwICsz
NDgsMTQgQEAgcmlwX211bHRpY2FzdF9qb2luIChzdHJ1Y3QgaW50ZXJmYWNlICppZgogdm9pZAog
cmlwX211bHRpY2FzdF9sZWF2ZSAoc3RydWN0IGludGVyZmFjZSAqaWZwLCBpbnQgc29jaykKIHsK
KyAgc3RydWN0IHJpcF9pbnRlcmZhY2UgKnJpOwogICBsaXN0bm9kZSBjbm9kZTsKIAotICBpZiAo
aWZfaXNfdXAgKGlmcCkgJiYgaWZfaXNfbXVsdGljYXN0IChpZnApKQorICByaSA9IGlmcC0+aW5m
bzsKKworICBpZiAocmktPmpvaW5lZF9tdWx0aWNhc3QpCiAgICAgeworICAgICAgcmktPmpvaW5l
ZF9tdWx0aWNhc3QgPSAwOwogICAgICAgaWYgKElTX1JJUF9ERUJVR19FVkVOVCkKIAl6bG9nX2lu
Zm8gKCJtdWx0aWNhc3QgbGVhdmUgZnJvbSAlcyIsIGlmcC0+bmFtZSk7CiAKLS0tIHplYnJhLTAu
OTQvcmlwZC9yaXBkLmgubWNhc3QtbGVhawkyMDAzLTExLTA0IDIxOjAwOjQyICswMzAwCisrKyB6
ZWJyYS0wLjk0L3JpcGQvcmlwZC5oCTIwMDQtMDMtMzEgMTg6Mzg6NTggKzA0MDAKQEAgLTIyNiw2
ICsyMjYsOSBAQCBzdHJ1Y3QgcmlwX2ludGVyZmFjZQogICAvKiBSSVAgaXMgcnVubmluZyBvbiB0
aGlzIGludGVyZmFjZS4gKi8KICAgaW50IHJ1bm5pbmc7CiAKKyAgLyogSm9pbmVkIHRvIG11bHRp
Y2FzdCBncm91cCBmb3IgdGhpcyBpbnRlcmZhY2UuICovCisgIGludCBqb2luZWRfbXVsdGljYXN0
OworCiAgIC8qIFJJUCB2ZXJzaW9uIGNvbnRyb2wuICovCiAgIGludCByaV9zZW5kOwogICBpbnQg
cmlfcmVjZWl2ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>