DHCP_RELAY テーブル¶
概要¶
DHCPv6 relay agent の VLAN インタフェース単位設定を保持する CONFIG_DB テーブル1。dhcp6relay プロセス (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 構造¶
フィールド¶
| フィールド | 型 | 説明 |
|---|---|---|
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_servers は ordered-by user で 設定順を維持 する。dhcp6relay は順序通りに upstream をスキャンする。
rfc6939_support / interface_id は YANG 上 pattern "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
関連リファレンス¶
- YANG:
sonic-dhcpv6-relay - CLI:
config dhcp_relay
引用元¶
運用ヒント¶
典型値¶
- key 形式:
DHCP_RELAY|<vlan>。 dhcp_servers: relay 先サーバ IP の list、rfc3046_compatibility:true。
よくある誤設定¶
- dhcp_relay デーモンが対象 VLAN に SVI を持たないと relay されない。
確認コマンド¶
例外条件・特殊挙動¶
| 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
-
YANG 定義:
sonic-dhcpv6-relay.yang(revision 2021-10-30). https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-dhcpv6-relay.yang ↩