Logo

Linux 核心

6.16.0-rc4

快速搜尋

目錄

  • 開發過程
  • 提交補丁
  • 行為準則
  • 維護者手冊
  • 所有開發過程文件
  • 核心 API
  • 驅動 API
  • 子系統
  • 鎖
  • 許可規則
  • 編寫文件
  • 開發工具
  • 測試指南
  • Hacking 指南
  • 跟蹤
  • 故障注入
  • Livepatching
  • Rust
  • 管理
  • 構建系統
  • 報告問題
  • 使用者空間工具
  • 使用者空間 API
    • 系統呼叫
    • 安全相關介面
    • 裝置和 I/O
    • 其他所有
      • Linux 特有的 ELF 怪癖
      • Netlink 手冊
      • 平臺配置檔案選擇(例如 /sys/firmware/acpi/platform_profile)
      • VDUSE - “使用者空間中的 vDPA 裝置”
      • futex2
      • Perf 環形緩衝區
      • NT 同步原語驅動
  • 韌體
  • 韌體和裝置樹
  • CPU 架構
  • 未分類文件
  • 翻譯

本頁

  • 顯示源

Netlink 規範支援原始 Netlink 系列¶

本文件描述了原始 Netlink 系列(如 NETLINK_ROUTE)所需的附加屬性,這些系列使用 netlink-raw 協議規範。

規範¶

netlink-raw 模式透過用於指定原始 netlink 系列使用的協議號和多播 ID 的屬性擴充套件了 genetlink-legacy 模式。更多資訊請參見 經典 Netlink。原始 netlink 系列還使用型別特定的子訊息。

全域性變數¶

protonum¶

protonum 屬性用於指定開啟 netlink 套接字時使用的協議號。

# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

name: rt-addr
protocol: netlink-raw
protonum: 0             # part of the NETLINK_ROUTE protocol

多播組屬性¶

value¶

value 屬性用於指定用於多播組註冊的組 ID。

mcast-groups:
  list:
    -
      name: rtnlgrp-ipv4-ifaddr
      value: 5
    -
      name: rtnlgrp-ipv6-ifaddr
      value: 9
    -
      name: rtnlgrp-mctp-ifaddr
      value: 34

子訊息¶

一些原始 netlink 系列,例如 rt-link 和 tc,使用屬性巢狀作為抽象來攜帶模組特定資訊。

概念上它看起來如下:

[OUTER NEST OR MESSAGE LEVEL]
  [GENERIC ATTR 1]
  [GENERIC ATTR 2]
  [GENERIC ATTR 3]
  [GENERIC ATTR - wrapper]
    [MODULE SPECIFIC ATTR 1]
    [MODULE SPECIFIC ATTR 2]

外層 GENERIC ATTRs 在核心(或 rt_link 或核心 TC)中定義,而特定驅動、TC 分類器、qdisc 等可以在 GENERIC ATTR - wrapper 中攜帶它們自己的資訊。儘管上面的例子顯示了屬性巢狀在包裝器中,但模組通常擁有完全的自由來定義巢狀的格式。實際上,包裝器屬性的有效載荷與 netlink 訊息具有非常相似的特性。它可能包含固定頭部/結構、netlink 屬性,或兩者皆有。由於這些共享特性,我們將包裝器屬性的有效載荷稱為子訊息。

子訊息屬性使用另一個屬性的值作為選擇器鍵,以選擇正確的子訊息格式。例如,如果已解碼以下屬性:

{ "kind": "gre" }

並且我們遇到以下屬性規範:

-
  name: data
  type: sub-message
  sub-message: linkinfo-data-msg
  selector: kind

那麼我們查詢名為 linkinfo-data-msg 的子訊息定義,並使用 kind 屬性的值,即 gre,作為鍵來選擇子訊息的正確格式:

sub-messages:
  name: linkinfo-data-msg
  formats:
    -
      value: bridge
      attribute-set: linkinfo-bridge-attrs
    -
      value: gre
      attribute-set: linkinfo-gre-attrs
    -
      value: geneve
      attribute-set: linkinfo-geneve-attrs

這將把屬性值解碼為子訊息,其中名為 linkinfo-gre-attrs 的屬性集作為屬性空間。

子訊息可以有一個可選的 fixed-header,後面跟著零個或多個來自 attribute-set 的屬性。例如,以下 tc-options-msg 子訊息定義了混合使用 fixed-header、attribute-set 或兩者結合的訊息格式:

sub-messages:
  -
    name: tc-options-msg
    formats:
      -
        value: bfifo
        fixed-header: tc-fifo-qopt
      -
        value: cake
        attribute-set: tc-cake-attrs
      -
        value: netem
        fixed-header: tc-netem-qopt
        attribute-set: tc-netem-attrs

請注意,選擇器屬性必須在任何依賴它的子訊息屬性之前出現在 netlink 訊息中。

如果一個屬性(例如 kind)在多個巢狀級別上定義,那麼子訊息選擇器將使用“最接近”選擇器的值進行解析。例如,如果相同的屬性名在一個巢狀的 attribute-set 中與子訊息選擇器一起定義,並且也在頂層 attribute-set 中定義,那麼選擇器將使用“最接近”選擇器的值進行解析。如果該值在訊息中不存在於規範定義的同一級別,則這是一個錯誤。

巢狀結構定義¶

許多原始 netlink 系列(如 tc)使用巢狀結構定義。netlink-raw 模式可以透過 struct 屬性在結構定義中嵌入結構。例如,以下結構定義為 struct tc-tbf-qopt 的 rate 和 peakrate 成員都嵌入了 tc-ratespec 結構定義。

-
  name: tc-tbf-qopt
  type: struct
  members:
    -
      name: rate
      type: binary
      struct: tc-ratespec
    -
      name: peakrate
      type: binary
      struct: tc-ratespec
    -
      name: limit
      type: u32
    -
      name: buffer
      type: u32
    -
      name: mtu
      type: u32
©核心開發社群。 | 由 Sphinx 5.3.0 和 Alabaster 0.7.16 提供支援 | 頁面來源