Opened 6 years ago

Closed 6 years ago

#256 closed баг (fixed)

Невалидные запросы NDP

Reported by: alx Owned by: alx
Priority: средний Milestone: 1 очередь
Component: any Keywords:
Cc:

Description

При создании потока RTP с адресом получателя IPv6 плата отправляет запросы NDP, которые на понимает tcpdump, и которые "не видит" хост получателя:

09:13:36.317215 02:ad:c3:00:00:06 > 33:33:fe:40:03:72, ethertype IPv6 (0x86dd), length 86: 
        0x0000:  6000 0000 0020 3aff 2a01 0540 2f0a 5f00  `.....:.*..@/._.
        0x0010:  00ad c3ff fe00 0006 ff02 0000 0000 0000  ................
        0x0020:  0000 0001 ff40 0372 8700 1c6c 0000 0000  .....@.r...l....
        0x0030:  2a01 0540 2f0b 6000 22cf 30ff fe40 0372  *..@/.`.".0..@.r
        0x0040:  0101 02ad c300 0006                      ........

Здесь адрес платы 2a01:540:2f0a:5f00:ad:c3ff:fe00:6/64, адрес получателя 2a01:540:2f0b:6000:22cf:30ff:fe40:372

Change History (5)

comment:1 by alx, 6 years ago

А вот валидный запрос NDP с той же платы:

14:51:33.640773 02:ad:c3:00:00:06 > 33:33:ff:40:03:72, ethertype IPv6 (0x86dd), length 86: (hlim 255, next-header ICMPv6 (58) payload length: 32) 2a01:540:2f0b:6000:ad:c3ff:fe00:6 > ff02::1:ff40:372: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has 2a01:540:2f0b:6000:22cf:30ff:fe40:372
	  source link-address option (1), length 8 (1): 02:ad:c3:00:00:06
	0x0000:  6000 0000 0020 3aff 2a01 0540 2f0b 6000
	0x0010:  00ad c3ff fe00 0006 ff02 0000 0000 0000
	0x0020:  0000 0001 ff40 0372 8700 1b6b 0000 0000
	0x0030:  2a01 0540 2f0b 6000 22cf 30ff fe40 0372
	0x0040:  0101 02ad c300 0006

comment:2 by alx, 6 years ago

Как видно из приведенных дампов, они различаются адресом отправителя. Проблема в том, что интерфейс eth0 имеет сразу два глобальных адреса:

eth0      Link encap:Ethernet  HWaddr 02:AD:C3:00:00:06  
          inet addr:192.168.1.67  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: 2a01:540:2f0a:5f00:ad:c3ff:fe00:6/64 Scope:Global
          inet6 addr: 2a01:540:2f0b:6000:ad:c3ff:fe00:6/64 Scope:Global
          inet6 addr: fe80::ad:c3ff:fe00:6/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:3131643 errors:0 dropped:0 overruns:0 frame:0
          TX packets:112988 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:238297945 (227.2 MiB)  TX bytes:15421459 (14.7 MiB)
          Interrupt:1 

Маршрутизатор анонсирует сразу два адреса: адрес 2a01:540:2f0a:5f00:ad:c3ff:fe00:6/64 - старый, он анонсируется с временем жизни 0, адрес 2a01:540:2f0b:6000:ad:c3ff:fe00:6/64 - новый, он анонсируется с ненулевым временем жизни.

Плата VE-01 взяла первый из этих адресов, что неправильно. Требуется дополнительная проверка при нахождении адреса.

comment:3 by alx, 6 years ago

In 1342/sip_ua:

При чтении файла /proc/net/if_inet6 пропускаются адреса с флагом IFA_F_DEPRECATED.
Помогает в случаях, когда маршрутизатор анонсирует префиксы с нулевым временем жизни.
See #256.

comment:4 by alx, 6 years ago

После changeset:1342 плата стала отправлять такие запросы:

10:55:50.831965 02:ad:c3:00:00:06 > 33:33:fe:40:03:72, ethertype IPv6 (0x86dd), length 86: 
        0x0000:  6000 0000 0020 3aff 2a01 0540 2f0b 6000  `.....:.*..@/.`.
        0x0010:  00ad c3ff fe00 0006 ff02 0000 0000 0000  ................
        0x0020:  0000 0001 ff40 0372 8700 1b6b 0000 0000  .....@.r...k....
        0x0030:  2a01 0540 2f0b 6000 22cf 30ff fe40 0372  *..@/.`.".0..@.r
        0x0040:  0101 02ad c300 0006                      ........

Как видно, содержимое пакета теперь полностью идентично тому, который мы видели в connent:1, отличие только в MAC адресе получателя: 33:33:fe:40:03:72 вместо 33:33:ff:40:03:72. Вероятно, send_ndp_req() неверно формирует мультикастовый адрес ethernet.

comment:5 by alx, 6 years ago

Resolution: fixed
Status: newclosed

In 1343/sip_ua:

Исправлена ошибка: send_ndp_req() отправляла запросы NDP с неверным
мультикастовым адресом ethernet. Closes #256.

Note: See TracTickets for help on using tickets.