前回、オープンソースの Robot Framework を使った簡単な状態確認を行いましたが、今回はもう少し踏み込んで、ネットワークのテストでよく行う、冗長ルートの切替りの際の断時間を測定を模擬を Containerlab でやってみます
▼ 第1回の記事
今回の環境
今回は前回のコンテナに追加で、トラフィックを流すための ixia-c を追加してます
- Ubuntu : 24.04.2 LTS
- Containerlab 0.71.0
- Arista cEOS : 4.35.0.1F
- ixia-c : 1.42.0-4
ixia-c はコンテナベースのネットワークテストツールで、Open Traffic Generator(OTG)APIに準拠したトラフィックジェネレーターおよびプロトコルエミュレーターです
ixia-cには無償で利用できる Community Edition があり今回はこちらを利用してます
詳しくはこちらの過去の記事をご参照ください
今回は以下のように Containerlab に以下の構築してます
- cEOS を 2台設置して、
eth1とeth2の2本接続し経路冗長- OSPF で cost に差をつけて正常時は
eth1を通るようにする
- OSPF で cost に差をつけて正常時は
- Robot Framework 用のコンテナを設置
- ixia-cを cEOS の 2台を挟むように接続してトラフィックを流せるようにする
Containerlab 用の yml など各ファイルは以下の通りです
▼ Containerlab 用の yml clab-rf-ospf-failover.clab.yml
- Arsita cEOS-1 のコンフィグ
-
Arsita cEOS-2 のコンフィグ
- ログインのユーザ名・パスワードはともに
adminとしてます
- ログインのユーザ名・パスワードはともに
環境構築
Containerlab のインストールと Arista cEOS の準備は前回と同じため省略します (第1回で実施していれば今回は作業不要です)
Robot Framework サーバは、ixia-c を API で制御するための snappi が追加で必要なため再ビルドします
ixia-c についてはcontainerlab deployすると自動でダウンロードするため特に事前準備は不要です
Robot Framework サーバのビルド
以下の手順でまずはRobot Framework サーバのコンテナをビルドします
# 今回の構成やコンフィグを一式 GitHub からダウンロード
git clone --depth=1 https://github.com/katsumi2018/clab-robotframework-ospf-failover.git
# ディレクトリ移動
cd clab-robotframework-ospf-failover
# ビルド
docker build -f Dockerfile.robot -t robotframework:latest .
docker imagesコマンドで以下のように表示されれば準備完了です
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ceos 4.35.0.1F fe76e130493f 2 hours ago 2.52GB
robotframework latest 297b60fd395c 4 hours ago 212MB$
containerlab deploy
containerlab deployで検証環境が起動します
containerlab deploy
初回は ixia-c のダウンロードがあります。また、起動は時間がかかることがあります
Robot Framework で自動テスト実行してみる
今回実施する内容
今回は、ルート切替りの断時間を測定します
はじめはインターフェースを shutdown して確認しようとしましたが、今回の環境だと停止時間なしで切替ってしまって断時間を測るイメージが持てなかったため、以下を実施してサイレント故障のように無理やり見立てて断時間を測定しました
- ixia-c からトラフィックを、cEOS-1 → cEOS-2 の方向で 10pps で送信する、正常時 cEOS 間は
eth1を通る - cEOS-2 の
eth1にすべての IP パケットを deny するフィルタを適用してeth1で受信するトラフィックを止める - cEOS-2 の
eth1の OSPF の Hello インターバルのタイマーを変更 - cEOS-1 で
eth1の OSPF ネイバーダウンとなり、eth2にルートが切替りトラフィックが復旧する。パケットロス数から断時間を測定する
テスト実行
ChatGPTさんに今回実施する内容を書いてもらいました
# Robot Framework のコンテナへログイン
docker exec -it clab-ospf-failover-ixia-rf bash
# Robot Framework のテスト(.robot ファイル)を実行
# (/opt/robot/tests/ 内の .robot ファイルを実行)
robot -d /opt/robot/results /opt/robot/tests/
実行すると以下のような結果が表示されます、正常な場合は「PASS」が表示されます
# robot -d /opt/robot/results /opt/robot/tests/
===============================================================
Tests
===============================================================
Tests.Failover
===============================================================
OSPF Failover Outage Measurement ........PASS: OSPF up 確認
OSPF Failover Outage Measurement .....PASS: warm-up (ARP 学習 + 正常確認)
OSPF Failover Outage Measurement .PASS: 測定用トラフィック安定
..PASS: 測定開始メトリクス取得
OSPF Failover Outage Measurement ...PASS: OSPF Helloインターバル変更&IPフィルター設定 (ceos2 Ethernet1)
..PASS: Traffic 復旧・安定
..PASS: 測定終了メトリクス取得
.dtx=127, drx=94, lost_frames=33, outage_sec=3.3
OSPF Failover Outage Measurement ....PASS: Outage 計算・検証
OSPF Failover Outage Measurement .PASS: OTG Stop
OSPF Failover Outage Measurement | PASS |
PacketLoss=33 frames, Outage=3.3 sec
---------------------------------------------------------------
Tests.Failover | PASS |
1 test, 1 passed, 0 failed
===============================================================
Tests | PASS |
1 test, 1 passed, 0 failed
===============================================================
Output: /opt/robot/results/output.xml
Log: /opt/robot/results/log.html
Report: /opt/robot/results/report.html
#
ルート切替りの断時間は lost_frames=33, outage_sec=3.3 の部分となり、今回は 3.3 秒停止になります。今回は、OSPF の Hello インターバル 1 秒、Dead インターバル 4 秒の設定ため、cEOS-1 の eth1 の OSPF のネイバーがダウンするのは 3 ~ 4 秒になるので、想定どおりの断時間が得られました
テスト結果確認
ブラウザから http://<サーバのIP>:8080/ にアクセスすると以下のような表示がされます
report.htmlを選択すると以下のような画面が表示されてすべてPASSしてることがわかります
また、「All」を選択すると「Message」に今回測定できた断時間を確認することができます

summary.jsonにも今回の断時間が JSON 形式で結果が出力されます
{"test":"OSPF Failover Outage Measurement","loss_frames":33,"outage_sec":3.3,"pps":10}
もう一度実施したい場合は、cEOS-2 にログインして以下の設定で正常時に戻してから実施してください
interface Ethernet1
ip ospf hello-interval 1
no ip access-group Et1-BLOCK in
最後に
Robot Framework で OSPF のルート切替りの断時間測定を自動化を実施してみました
テストでやりたい内容を定義する.robot ファイルは、Robot Framework の独自言語のため、新規に作成するのは骨が折れますが、生成 AI の力を借りると意外とすんなりやりたいことができました
生成 AI めちゃ便利





