Что такое LPF и Socket/fallback в выводе dhclient -v?

Что такое LPF и Socket/fallback в выводе dhclient -v?

Ниже приведен пример вывода этой команды:

$ sudo dhclient -v
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth0/00:15:5d:5a:e4:c5
Sending on   LPF/eth0/00:15:5d:5a:e4:c5
Listening on LPF/dummy0/6e:0b:72:f9:83:f0
Sending on   LPF/dummy0/6e:0b:72:f9:83:f0
Listening on LPF/bond0/82:a2:7e:03:69:19
Sending on   LPF/bond0/82:a2:7e:03:69:19
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0x3115634c)
DHCPDISCOVER on dummy0 to 255.255.255.255 port 67 interval 3 (xid=0x1ab3dc37)
DHCPDISCOVER on bond0 to 255.255.255.255 port 67 interval 3 (xid=0xcea7a32d)

Я не смог найти никакой документации о том, что такое "LPF" или "Socket/fallback".
Не могли бы вы дать какое-нибудь объяснение и где можно узнать об этом больше?

Связьhttps://www.isc.org/software/dhcp/не помогло.

решение1

По-видимому, LPF относится к Linux Packet Filter:https://gitlab.isc.org/isc-projects/dhcp/-/blob/master/common/lpf.c

В других контекстах его также называютФильтрация сокетов Linux или фильтр пакетов Berkeley.

Клиент DHCP должен иметь возможность отправлять и получать широковещательные пакеты UDP, в то время как сетевой интерфейс не обязательно должен иметь настроенный IP-адрес. Он также должен заботиться о том, через какой интерфейс будут проходить пакеты, чтобы назначить конфигурацию сети конкретному сетевому интерфейсу, на котором они были получены, а не просто любому интерфейсу в системе, где их больше одного.

API-интерфейс фильтрации пакетов, такой как LPF в Linux, является наиболее гибким и эффективным способом для программного обеспечения DHCP сообщить сетевому стеку ОС: «Я собираюсь использовать сокет для необработанных пакетов, поскольку мои потребности в сетевом трафике немного необычны, но я по-прежнему не хочу получать копиюкаждый отдельный пакеткоторый поступает через сетевой интерфейс - просто пакеты UDP на этих конкретных номерах портов».

Если LPF или аналогичный API-фильтр пакетов недоступен, то программное обеспечение DHCP должно будет полагаться на стандартный API сетевых сокетов и его различные расширения - в частности, опции сокетов. Но они не поддерживаются единообразно во всех операционных системах, поддерживаемых пакетом ISC DHCP, и поэтомукод сокетов ISC DHCP довольно сложени полный #ifdefs.

Если API-интерфейс фильтрации пакетов и определенные параметры сокетов недоступны, набор DHCP может работать правильно только в том случае, если у хоста есть только один сетевой интерфейс:

#if !defined(SO_BINDTODEVICE) && !defined(USE_FALLBACK)
    /* Make sure only one interface is registered. */
    if (once) {
        log_fatal ("The standard socket API can only support %s",
               "hosts with a single network interface.");
    }
    once = 1;
#endif

При использовании API-интерфейса пакетного фильтра пакет ISC DHCP также устанавливаетрезервный сокетс использованием стандартного API сетевых сокетов. На стороне приема резервный сокет просто отбрасывает любой входящий трафик: возможно, какой-то API пакетного фильтра выдасткопиявходящего трафика, и обычный сокет должен присутствовать, чтобы гарантировать, что ОС не посчитает, что порт UDP, используемый для DHCP, закрыт, и не вызовет отправку сообщений об ошибках ICMP для любых полученных одноадресных пакетов DHCP (т. е. обновлений существующей активной аренды).

На стороне отправки использование резервного сокета менее очевидно. Если кто-то знает больше, не стесняйтесь редактировать этот ответ или добавлять свой собственный.

Связанный контент