dhclient -v の出力における LPF と Socket/fallback とは何ですか?

dhclient -v の出力における LPF と Socket/fallback とは何ですか?

以下は、そのコマンドの出力サンプルです。

$ 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 アドレスが設定されていません。また、複数のインターフェイスを持つシステム上の任意のインターフェイスではなく、パケットが受信された特定のネットワーク インターフェイスにネットワーク構成を割り当てるために、パケットが通過するインターフェイスを考慮する必要があります。

LinuxのLPFのようなパケットフィルタAPIは、DHCPソフトウェアがOSのネットワークスタックに「ネットワークトラフィックのニーズが少し変わっているため、生のパケットソケットを使用するつもりだが、それでもパケットのコピーを受け取りたくない」と伝えるための最も柔軟で効率的な方法です。一つ一つのパケットネットワーク インターフェイスを介して到着する、つまり特定のポート番号の UDP パケットのみです。」

LPFまたは同様のパケットフィルタAPIが利用できない場合、DHCPソフトウェアは標準のネットワークソケットAPIとそのさまざまな拡張機能、特にソケットオプションに頼らなければなりません。しかし、それらはISC DHCPスイートがサポートするすべてのオペレーティングシステムで一様にサポートされているわけではないので、ISC DHCPのソケットコードはかなり複雑ですそしてSがいっぱい#ifdef

パケット フィルタ API も特定のソケット オプションも利用できない場合は、ホストにネットワーク インターフェイスが 1 つだけある場合にのみ、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がコピー着信トラフィックの、通常のソケットは、OS が DHCP に使用される UDP ポートが閉じていると認識せず、受信したユニキャスト DHCP パケット (既存のアクティブ リースの更新など) に対して ICMP エラー メッセージが送信されないようにするために存在している必要があります。

送信側では、フォールバック ソケットの使用はそれほど明白ではありません。 他にも詳しい方がいらっしゃいましたら、この回答を編集したり、独自の回答を追加したりしてください。

関連情報