コンテンツにスキップ

DHCP_RELAY テーブル

概要

DHCPv6 relay agentVLAN インタフェース単位設定を保持する CONFIG_DB テーブル1dhcp6relay プロセス (sonic-dhcp-relay リポ) が CONFIG_DB から読み、IPv6 リレー対象 VLAN と上流サーバを構築する。

注: 名前は単に DHCP_RELAY だが、YANG モジュール名 sonic-dhcpv6-relay の通り IPv6 リレー専用。IPv4 リレーは VLAN テーブルの dhcp_servers フィールド(旧仕様)または DHCP_SERVER_IPV4 (新仕様の DHCP サーバ機能) を参照。

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>DHCP_RELAY")]
  DM["dhcrelay"]
  CDB --> DM

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

DHCP_RELAY|<name>
  • <name>: DHCPv6 リレー対象の VLAN インタフェース名 (例: Vlan100)。YANG では type string だが、実運用上は VLAN 名を入れる。

フィールド

フィールド 説明
name (key) string DHCPv6 リレー対象の VLAN インタフェース名
dhcpv6_servers leaf-list of inet:ipv6-address (ordered-by user) 上流 DHCPv6 サーバの IPv6 アドレス群
rfc6939_support string "true"/"false" RFC 6939 (Client Link-Layer Address Option) サポート
interface_id string "true"/"false" リレーメッセージへの Interface-ID オプション挿入 (RFC 3315 / RFC 6422)

dhcpv6_serversordered-by user設定順を維持 する。dhcp6relay は順序通りに upstream をスキャンする。

rfc6939_support / interface_idYANGpattern "false|true" の string 型(boolean ではない)。CONFIG_DB の慣習で文字列リテラル。

値依存挙動マトリクス

dhcpv6_servers (leaf-list of ipv6-address, ordered-by user)

挙動
1 件以上 dhcp6relay が VLAN ごとの upstream サーバとして登録。設定順(ordered-by user)を維持してスキャン
0 件(空 leaf-list) その VLAN のリレーは無効(config_interface.cpp: servers.empty() → skip)

rfc6939_support (string pattern "false|true")

挙動
"true" (デフォルト) dhcp6relay が RFC 6939 Client Link-Layer Address Option (option 79) をリレーメッセージに追加
"false" option 79 を付与しない(config_interface.cpp:169)

interface_id (string pattern "false|true")

挙動
"true" Interface-ID オプション (OPTION_INTERFACE_ID) をリレーメッセージに挿入(config_interface.cpp:172-173)
"false" / 未設定(非 DualToR) Interface-ID なし(デフォルト off)
未設定(DualToR 環境) dual_tor_sock が存在する場合はデフォルト on(config_interface.cpp:118-122)

制約

  • name キーは leafref ではないので任意の文字列が許されるが、対応する VLAN エントリが存在しなければ実環境では機能しない。
  • dhcpv6_servers が空 (leaf-list 自体が無い) の場合、その VLAN のリレーは事実上無効。

購読者

  • dhcp6relay (sonic-dhcp-relay リポ): CONFIG_DB → dhcp6relay --config-file 相当のランタイム反映
  • dhcpmon (オプション): リレー監視・統計

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: VLAN, VLAN_INTERFACE (リレー対象 VLAN の IP)、DHCP_SERVER_IPV4 (v4 側 in-band サーバ機能)
  • 関連 CLI: config dhcp_relay ipv6 destination add/remove, config dhcp_relay ipv6 helper
  • 関連 YANG: sonic-dhcpv6-relay

関連リファレンス

引用元

運用ヒント

典型値

  • key 形式: DHCP_RELAY|<vlan>
  • dhcp_servers: relay 先サーバ IP の list、rfc3046_compatibility: true

よくある誤設定

  • dhcp_relay デーモンが対象 VLAN に SVI を持たないと relay されない。

確認コマンド

sonic-db-cli CONFIG_DB keys 'DHCP_RELAY|*'
show dhcprelay_helper ipv4

例外条件・特殊挙動

consumer 条件 挙動
dhcp6relay 登録 VLAN が VLAN_INTERFACE テーブルに存在しない LOG_WARNING: "%s doesn't exist in VLAN_INTERFACE table, skip it" を出力してスキップ(config_interface.cpp:135)
dhcp6relay VLAN に IPv6 アドレス未設定 LOG_WARNING: "%s doesn't have IPv6 address configured, skip it" を出力してスキップ(config_interface.cpp:146)
dhcp6relay VLAN にサーバアドレスが 0 件 LOG_WARNING: "No servers found for VLAN %s, skipping configuration." を出力(config_interface.cpp:177)
dhcp6relay dhcpv6_option\|interface_id フィールド未設定 非 Dual-ToR 環境では false、Dual-ToR 環境では true をデフォルト使用(config_interface.cpp:117-121)

Evidence: sonic-dhcp-relay dhcp6relay/src/config_interface.cpp:117-177