Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 06 章: L2 / VLAN / LAG を参照。
裏取りステータス: discrepancy-found
HLD と現行 master 実装に齟齬がある。
- HLD は CLI を
sonic-utilities側 Python スクリプトとして想定しているが、現行wolCLI は Rust 実装(sonic-buildimage/src/sonic-nettools/wol/のCargo.toml/src/main.rs/src/wol.rs/src/socket.rs)として配置されている。sonic-utilities側にwolスクリプトは存在しない。 - HLD の
SonicWolService/WolRequestproto を検索した範囲では、sonic-gnmimaster に該当 gNOI service・proto の取り込みは見つからなかった(D-Bus 経路含めsonic-host-services側にも未確認)。gNOI 経由の WoL は HLD 提案段階のままの可能性が高い。
Rust CLI の引数体系・UDP モード対応については sonic-buildimage/src/sonic-nettools/wol/src/wol.rs を直接参照すること。
Wake-on-LAN(wol CLI と SonicWolService gNOI)¶
概要¶
Wake-on-LAN (WoL) は、特殊な「Magic Packet」を NIC が受信した際に対象機器を電源オン / スリープ復帰させる Ethernet 標準である。本機能は SONiC スイッチを Magic Packet の送信元 として使えるようにするもので、運用ツールから WoL を発行することでサーバ群を遠隔起動できる。NIC 側で WoL 受信が動作するかは別問題(受信側 BIOS / NIC 設定)であり、本 HLD のスコープ外である。
機能は 2 経路で利用できる1。
sonic-utilitiesのwolCLI スクリプト(管理者がスイッチに SSH してから実行)sonic-gnmiのSonicWolServicegNOI サービス(外部から RPC で叩く。最終的にはsonic-host-services経由で同じwolCLI が実行される)
リビジョン 1.1 (2024-10-11) で UDP ペイロード形式の Magic Packet が追加され、ルーティング越しの WoL に対応している。
動作仕様¶
全体経路¶
flowchart LR
User1[admin SSH] --> CLI["wol CLI\n(sonic-utilities)"]
Client[gNOI Client] -->|gRPC| GNMI[sonic-gnmi\nSonicWolService.Wol]
GNMI -->|D-Bus| HOST[sonic-host-service]
HOST --> CLI
CLI -->|"raw socket / UDP"| NET["ターゲット (MAC)"]
gNOI 側は最終的に同じ wol CLI を呼び出す形で実装される設計になっており、Magic Packet の組み立てと送信は CLI スクリプトに一本化される1。
Magic Packet 形式(Ethernet ペイロード版)¶
「Magic Pattern」自体は固定で、6 バイトの 0xff + ターゲット MAC を 16 回連結 + 任意のパスワード (4 or 6 バイト) という構造を取る。Ethernet ペイロード版ではこれを EtherType 0x0842 のフレームの payload に詰めて送る1。
| Dst MAC (6) | Src MAC (6) | EtherType=0x0842 (2) |
| 0xff x6 | TargetMAC x16 (96) | Password (0/4/6) |
宛先 MAC の選択は次のとおり。
- 既定: ターゲットデバイスの MAC(
-b未指定時) -b指定時: ブロードキャストff:ff:ff:ff:ff:ff
Magic Packet 形式(UDP ペイロード版、-u)¶
ルーティング境界を越える WoL 用途のため、UDP ペイロード版が用意されている1。
| Ethernet Header | IP Header (Dst=任意 v4/v6) | UDP Header (Dst port=任意) |
| UDP payload: 0xff x6 + TargetMAC x16 + Password (0/4/6) |
宛先 IP は既定 255.255.255.255、宛先 UDP ポートは既定 9 で、-a / -t で上書きできる。-u 指定時は宛先 MAC は OS のネットワークスタックに任せる(ARP / ND の解決結果で決まる)。-u と -b は同時指定できない。
CLI 引数の組み合わせ規則¶
HLD はパラメータ間の依存関係を明示している1。
| 規則 | 内容 |
|---|---|
-b と -u 同時指定 |
不可 |
-a / -t |
-u がある時のみ有効 |
-c と -i |
一緒に指定する必要がある(片方だけは不可) |
count 範囲 |
1〜5 |
interval 範囲 |
0〜2000 (ms) |
複数 MAC を指定する場合、count=3 × MAC 2 件 = 計 6 個の Magic Packet が送信される。
gNOI サービス¶
SonicWolService.Wol の入出力は次のとおり1。
service SonicWolService {
rpc Wol(WolRequest) returns (WolResponse) {}
}
message WolRequest {
string interface = 1;
repeated string target_mac = 2;
optional bool broadcast = 3;
optional string password = 4;
optional int32 count = 5;
optional int32 interval = 6;
}
注意点として、HLD 時点の proto には -u (UDP モード) / -a / -t に対応するフィールドが入っていない。CLI のリビジョン 1.1 で UDP モードが拡張された一方で、proto 側の更新は未反映の可能性があり、実装で齟齬がないか裏取りが必要。
📋 検証エビデンス: sonic-net/SONiC/doc/wol/Wake-on-LAN-HLD.md#L168-L182 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
出典:
sonic-net/SONiC/doc/wol/Wake-on-LAN-HLD.md#L168-L182 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
抜粋:
message WolRequest {
string interface = 1;
repeated string target_mac = 2;
optional bool broadcast = 3;
optional string password = 4;
optional int32 count = 5;
optional int32 interval = 6;
}
判断根拠: HLD 時点の proto に UDP 拡張用フィールドが含まれていないことの根拠。
バリデーション¶
CLI 側は以下を検査する1。
- インタフェース名が SONiC で有効
- 対応インタフェースが
up target_mac/passwordの書式- 数値範囲と相互依存(前述)
- 送信失敗時はユーザー向けエラーメッセージで返す
設定¶
関連する CONFIG_DB¶
本機能は send-only のオペレーションコマンドであり、永続設定を持たない。CONFIG_DB エントリは無い。
関連する CLI¶
| Command | 用途 |
|---|---|
wol <intf> <target_mac>[,...] [-b] [-u] [-a IP] [-t PORT] [-p PWD] [-c N -i MS] |
指定 SONiC インタフェースから Magic Packet を送出 |
関連する YANG¶
HLD に YANG モジュール定義の記載は無い(永続設定を持たないため)。
設定例¶
# Ethernet10 経由で 1 台に Magic Packet
wol Ethernet10 00:11:22:33:44:55
# Vlan1000 経由でブロードキャスト + パスワード
wol Vlan1000 00:11:22:33:44:55,11:33:55:77:99:bb -b -p 00:22:44:66:88:aa
# UDP モードで IPv4 サブネットブロードキャストへ送出
wol Vlan1000 00:11:22:33:44:55 -u -a 192.168.255.255 -t 7
干渉する機能¶
- VLAN / ポートチャネル:
<interface>には VLAN 名 / PortChannel 名も指定可能。送出は OS のネットワークスタックを通る(特に-uモード)。 - gNOI / sonic-gnmi:
SonicWolServiceは他の gNOI サービスと同じく D-Bus 経由で sonic-host-service に橋渡しされる。Docker to Host communicationの枠組みに乗る1。 - インタフェース状態: HLD は対象インタフェースが
downの場合をエラーとして規定している。事前にshow interface statusで確認するか、config interface startupで起こす。
トラブルシューティング¶
- 送信は成功するのに対象機器が起きない場合: 対象 NIC の WoL 受信設定(BIOS / OS / NIC ドライバ)と、経路上のスイッチが Magic Packet を遮断していないかを確認する。SONiC 側は送出までしか責任を持たない。
-uで IPv6 Multicast を狙う場合、-aに IPv6 アドレスを直接指定可能(HLD 上「IPv4 / IPv6 どちらも可」と明記)1。- gNOI 側で UDP モードを使いたい場合、本 HLD 時点の proto では
-u系オプションが無く、CLI ラッパー経由の機能を完全には呼び出せない可能性がある。proto / 実装側の更新を確認する。
HLD と実装の差分
2026-05-11 時点の現行 master を裏取り。CLI 本体は完備だが gNOI 経路は未統合で、HLD 全体としては一部のみ取り込まれた部分実装状態。
1. ファイル + 行番号¶
- 取り込み済み(CLI 本体):
sonic-net/sonic-buildimagesrc/sonic-nettools/wol/src/wol.rsL47-L75(broadcast/udp/ip_address/udp_port/password/count/intervalの各 clap 引数)、src/sonic-nettools/wol/src/wol.rsL128(magic packet 組立)、src/sonic-nettools/wol/src/wol.rsL328-L332(raw / udp socket 分岐)。 - 取り込み済み(IPv6):
src/sonic-nettools/wol/src/socket.rsL2, L242-L248(Ipv6Addr::from_str経由でin6_addrを組み立てる UDP IPv6 経路あり)。 - 未取り込み(gNOI):
sonic-net/sonic-host-services配下にWol/wake_on_lanハンドラは見当たらず、HLD が前提とするSonicWolServiceの D-Bus ブリッジは 少なくとも sonic-host-services 側には未統合。
2. 差分の中身¶
実装は Rust 製の単独バイナリ(sonic-buildimage/src/sonic-nettools/wol)であり、HLD が示す Python click ラッパーではない。コマンド名は wol のまま、引数互換は概ね維持されているが、gNOI 経路(SonicWolService proto + sonic-host-service の D-Bus ハンドラ)は実装が見当たらない。-b/-u の排他制御は clap の conflicts_with で実装され(L50, L54)、-c/-i は requires_if で相互必須に変更されている。
3. 読者への影響¶
- CLI
wolの手元動作は HLD のフラグセットでほぼ問題なし。 - gNOI 経由で WoL を叩こうとすると proto / ハンドラの欠落に当たる可能性があり、自動化系(gNOI クライアント)から呼び出せない。
-uモードで-aに IPv6 アドレスを指定する場合、socket 層は対応しているが(socket.rsL242)、-aの clap default255.255.255.255は IPv4 文字列なので IPv6 を使う場合は-aを明示 する必要がある。
4. 回避策¶
- gNOI から起動したい場合は当面 SSH 等で
wolバイナリを直接呼ぶ。gNOI 統合状況はsonic-host-servicesの最新 PR を追跡。 - IPv6 UDP モード:
wol Vlan1000 00:11:22:33:44:55 -u -a ff02::1 -t 9。 - Rust 実装の
--helpで実引数のレンジ(count1〜5、interval0〜2000 ms 等)を再確認してから自動化に組み込む。
関連 GitHub Issue / PR¶
- [GitHub Issue / PR の関連リンクは未確認] —
wolCLI /SonicWolServicegNOI 実装は sonic-utilities / sonic-gnmi の個別 PR で取り込まれており、HLD 単独のトラッキング Issue は確認できず。
コマンド例¶
Wake-on-LAN の magic packet 送信と CONFIG_DB を確認する。
show wol
config wol Ethernet0 00:11:22:33:44:55
redis-cli -n 4 keys 'WAKE_ON_LAN|*'
tcpdump -i Ethernet0 ether proto 0x0842
制限事項¶
- WoL マジックパケット送出機能は SONiC ホスト側の utility として実装され、受信側 NIC / target 側 OS 設定 (BIOS, ethtool wol g) に依存する。
- ターゲット VLAN へのリレーには UDP/9 を許可する ACL / firewall 設定が必要で、デフォルト構成ではブロックされる場合がある。
- SecureOn (パスワード付 WoL) の対応は NIC によりまちまちで、SONiC 側の CLI からは未公開の場合がある。
実装フェーズ境界¶
Phase 別の実装済 / 未実装 サマリ
本ページは monitor: partially_implemented で、HLD で示された一連の機能
が 段階的に取り込まれている 状態を扱う。フェーズ毎の実装境界を
1 枚の表に集約する (詳細は本ページ上部の diff admonition および
discrepancy-index を参照)。
| Phase | 範囲 (機能 / 段階) | 実装済 (master 取り込み済) | 未実装 (HLD 提案のみ) |
|---|---|---|---|
| Phase 1 — 基本機能 | HLD §概要 / §設計の中核ユースケース | 取り込み済 — 本ページの「実装の概観」「実装詳細」節および diff admonition の現状側を参照 |
— (Phase 1 は実装済) |
| Phase 2 — 拡張機能 | HLD §拡張 / §追加要件 / §周辺統合 | 一部のみ取り込み済 — 本ページ「実装詳細」の補足参照 | 未実装 / 未マージ — HLD §未対応箇所、本ページ「制限事項」および diff admonition の差分側に列挙 |
| Phase 3 — 将来拡張 | HLD §Future Work / §将来課題 | — | 未実装 — HLD 提案段階。対応 PR は確認されていない (last_verified 時点) |
凡例: 「実装済」=現行 master で動作確認できる範囲 / 「未実装」=HLD には記載があるが対応 PR が未マージまたは設計のみで code が存在しない範囲。
引用元¶
このページを読んだ後の次アクション¶
読み手向け
- 本機能を実運用で使う場合: 実装は存在するが本 HLD の記述と乖離。最新 master の動作を別途確認した上で適用する
- upstream 動向を追う場合: 関連 issue / PR を sonic-net/SONiC で検索(HLD タイトル / CONFIG_DB テーブル名 / Orch クラス名で grep するのが速い)
- 代替手段 / 関連 reference: 本ページの frontmatter
relatedが空のため、Reference 索引 から関連テーブル / CLI / YANG を辿る
本ドキュメントの追跡
- monitor:
evolved_beyond_hld/ last_verified:2026-05-09 - 次回再裏取りトリガ: quarterly。一覧は discrepancy-index を参照(運用詳細は repo の
meta/discrepancy-operations.md)