FreeBSD は、Linux カーネルで使用される Netlink プロトコルのサポートを追加します

FreeBSD コード ベースは、Linux でカーネルとユーザー空間のプロセスとの対話を組織化するために使用される Netlink 通信プロトコル (RFC 3549) の実装を採用しています。 このプロジェクトは、カーネル内のネットワーク サブシステムの状態を管理するための NETLINK_ROUTE ファミリの操作のサポートに限定されています。

現在の形式では、Netlink サポートにより、FreeBSD は iproute2 パッケージの Linux ip ユーティリティを使用して、ネットワーク インターフェイスの管理、IP アドレスの設定、ルーティングの構成、およびパケットを目的の宛先に転送するために使用される状態データを保存するネクストホップ オブジェクトの操作を行うことができます。 ヘッダー ファイルに若干の変更を加えた後、Bird ルーティング パッケージで Netlink を使用できるようになります。

FreeBSD の Netlink 実装は、ロード可能なカーネル モジュールとして設計されており、可能であれば他のカーネル サブシステムに影響を与えず、プロトコル経由で到着するメッセージを処理し、非同期モードで操作を実行するための別個のタスク キュー (タスクキュー) を作成します。 Netlink を移植する理由は、カーネル サブシステムと対話するための標準メカニズムが欠如しているためです。そのため、さまざまなサブシステムやドライバーが独自のプロトコルを発明することになります。

Netlink は、さまざまなソースからの異種データを自動的に XNUMX つのリクエストに結合する仲介者として機能する統合通信層と拡張可能なメッセージ形式を提供します。 たとえば、現在独自の ioctl 呼び出しを使用している devd、jail、pfilctl などの FreeBSD サブシステムを Netlink に転送できるため、これらのサブシステムで動作するアプリケーションの作成が大幅に簡素化されます。 さらに、Netlink を使用してルーティング スタック内のネクストホップ オブジェクトとグループを変更すると、ユーザー空間のルーティング プロセスとより効率的に対話できるようになります。

現在実装されている機能:

  • ルート、オブジェクト、ネクストホップ グループ、ネットワーク インターフェイス、アドレス、隣接ホスト (arp/ndp) に関する情報を取得します。
  • ネットワークインターフェースの出現と切断に関する通知の生成、アドレスの設定と削除、ルートの追加と削除。
  • ルート、オブジェクト、ネクストホップ グループ、ゲートウェイ、ネットワーク インターフェイスの追加と削除。
  • ルーティング テーブル管理のための Rtsock インターフェイスとの統合。

出所: オープンネット.ru

コメントを追加します