1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IxNetwork利用経験者のための ixia-c入門(2)~Topology(Device)の基本を理解する~

1
Last updated at Posted at 2026-06-28

はじめに

本記事では、Topology(Device)とIPv4 Interfaceの役割を理解しながら、MACアドレスやIPアドレスを設定する方法を解説する。

前回記事はこちら

今回の着目するポイント

前回記事の手順の一部を再掲する。今回はこのうち手順4〜6を中心に、Deviceの作成からIPv4 Interfaceの設定までを確認する。

手順 IxNetwork(GUI操作) 何をしている作業か ixia-c(Python(snappi SDK)によるAPI操作)
4 試験ポートに関連付けるTopology(Device)を作成する 試験ポートに関連付けるDeviceを作成する*2 cfg.devices.add()
5 Interfaceを設定する(Ethernet、IPv4/IPv6などを追加する) DeviceにL2/L3 Interfaceを構成する device.ethernets.add()
eth.ipv4_addresses.add()
6 MACアドレス、IPアドレス、デフォルトゲートウェイ、VLANなどのInterface情報を設定する Interfaceにネットワーク情報を設定する eth.mac
ip.address
ip.gateway
vlan.id
8 Start All Protocolsを実行し、設定したInterfaceおよびルーティングプロトコルを起動する InterfaceやRouting Protocolを有効化する api.set_protocol_state()(Topology/Protocolを利用する場合)

Topology(Device)とは

前回作成した試験パターンは、IxNetworkでPortをAssignした後に、Packet EditorでEthernetやIPv4、UDPヘッダを定義してTraffic Itemを作成する操作に相当する。
※詳しくは本記事の最後に記載した参考の公式URLを見ていただければと思う

PortのAssign

L2-3 Quick Flow Group

Packet Editor
Ethernet
IPv4
UDP

Apply Traffic

Start Traffic

Packet Editorの部分は以下のコードと同じようなものと考えて良いのではないかと思う。

flow1 = cfg.flows.add()

flow1.packet.ethernet()
flow1.packet.ipv4()
flow1.packet.udp()

ただし、このコードはEthernetヘッダ、IPv4ヘッダ、UDPヘッダを使用することを宣言しているだけであり、MACアドレスやIPアドレスなどのInterface情報は設定していない。

一方Topologyについては若干設定が異なり、以下のようになる。

Port Assign

Topology(Device)
※手順4

EthernetやIPv4(場合によってはルーティングプロトコル等)を選択し、設定。
※手順5、6(今回は実施しないが場合によっては7)

設定したInterface等を起動する。

Flow(Traffic Item)を作成する

Apply Traffic

Start Traffic

Topology(Device)で作成したEthernetやIPv4 Interfaceは、後続のFlow(Traffic Item)から参照して利用できる。

snappi APIでも考え方は同じである。まずDeviceを作成し、その配下にEthernetやIPv4 Interfaceを追加する。その後、FlowからこれらのInterfaceを参照することで、MACアドレスやIPアドレスを持った通信を生成できる。

今回は以下の条件での試験トラフィックを作ることとする。

項目 Topology1 Topology2
Port veth-a veth-z
MACアドレス 00:00:00:00:00:01 00:00:00:00:00:02
IPv4アドレス 10.1.0.1/24 10.1.0.2/24
Gateway 10.1.0.2 10.1.0.1

※snappiではIPv4 InterfaceにGatewayの設定が必須となっているため、本サンプルでは対向側のIPアドレスを設定している。このGateway設定がDevice Endpoint利用時のARP解決にどのように利用されるかについては、次回の記事で確認する。

Topology(Device)とIPv4 Interfaceを作成するサンプルコード

import snappi


def test_topology_ipv4_interface():
    # ------------------------------------------------------------------
    # Controllerへ接続
    # ------------------------------------------------------------------
    api = snappi.api(
        location="https://localhost:8443",
        verify=False
    )

    # ------------------------------------------------------------------
    # Config作成
    # ------------------------------------------------------------------
    cfg = api.config()

    # ------------------------------------------------------------------
    # Port作成
    # ------------------------------------------------------------------
    p1 = cfg.ports.add(name="p1", location="veth-a")
    p2 = cfg.ports.add(name="p2", location="veth-z")

    # ------------------------------------------------------------------
    # Topology(Device)作成【今回追加】
    # ------------------------------------------------------------------
    topo1 = cfg.devices.add(name="Topology1")
    topo2 = cfg.devices.add(name="Topology2")

    # ------------------------------------------------------------------
    # Topology1にEthernet/IPv4 Interfaceを作成【今回追加】
    # ------------------------------------------------------------------
    eth1 = topo1.ethernets.add(name="Ethernet1")
    eth1.connection.port_name = p1.name
    eth1.mac = "00:00:00:00:00:01"

    ip1 = eth1.ipv4_addresses.add(name="IPv4-1")
    ip1.address = "10.1.0.1"
    ip1.gateway = "10.1.0.2"
    ip1.prefix = 24

    # ------------------------------------------------------------------
    # Topology2にEthernet/IPv4 Interfaceを作成【今回追加】
    # ------------------------------------------------------------------
    eth2 = topo2.ethernets.add(name="Ethernet2")
    eth2.connection.port_name = p2.name
    eth2.mac = "00:00:00:00:00:02"

    ip2 = eth2.ipv4_addresses.add(name="IPv4-2")
    ip2.address = "10.1.0.2"
    ip2.gateway = "10.1.0.1"
    ip2.prefix = 24

    # ------------------------------------------------------------------
    # Config確認
    # ------------------------------------------------------------------
    print("\nCONFIGURATION", cfg.serialize(encoding=cfg.JSON), sep="\n")

※IxNetworkではPort配下にTopologyを作成し、その配下にDevice、Ethernet、IPv4などを構成する。一方、ixia-c(snappi)ではTopologyというオブジェクトは存在せず、cfg.devices.add()でDeviceを作成する。
このsnappiのDeviceは、IxNetworkにおけるTopologyとその配下のDeviceを合わせたような役割を持つ。そのため、本記事ではIxNetworkとの対応関係が分かりやすいよう、snappiで作成するDeviceの名前を「Topology1」「Topology2」としている。
※cfg.serialize()を利用すると、Python(snappi)で作成したConfigをJSON形式で確認できる。ixia-cへ送信されるConfigの内容を確認したい場合や、設定内容のデバッグ時に非常に便利である。

gateway設定省略時に発生したメッセージ

snappiのDevice IPv4設定では gateway が必須項目となっているため、本サンプルではGatewayアドレスを設定している。以下はgatewayを省略した場合に発生するエラーメッセージ。

> raise ValueError(msg) E ValueError: gateway is a mandatory property of <class 'snappi.snappi.DeviceIpv4'> and should not be set to None .env/lib/python3.12/site-packages/snappi/snappi.py:931: ValueError

動作確認

cd ~/ixia-c/conformance
./do.sh pytest examples/topology_sample.py -s
============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-7.1.1, pluggy-1.6.0 -- /home/test/ixia-c/conformance/.env/bin/python
cachedir: .pytest_cache
rootdir: /home/test/ixia-c/conformance, configfile: pytest.ini
plugins: html-4.2.0
collecting ... collected 1 item

examples/topology_sample.py::test_topology_ipv4_interface 2026-06-28 14:40:15.623 [snappi] [WARNING] Version check is disabled

-------------------------------- live log call ---------------------------------
WARNING  snappi:snappi.py:106 Version check is disabled
2026-06-28 14:40:15.623 [snappi] [WARNING] Certificate verification is disabled
WARNING  snappi:snappi.py:164 Certificate verification is disabled

CONFIGURATION
{
  "devices": [
    {
      "ethernets": [
        {
          "connection": {
            "choice": "port_name",
            "port_name": "p1"
          },
          "ipv4_addresses": [
            {
              "address": "10.1.0.1",
              "gateway": "10.1.0.2",
              "name": "IPv4-1",
              "prefix": 24
            }
          ],
          "mac": "00:00:00:00:00:01",
          "mtu": 1500,
          "name": "Ethernet1"
        }
      ],
      "name": "Topology1"
    },
    {
      "ethernets": [
        {
          "connection": {
            "choice": "port_name",
            "port_name": "p2"
          },
          "ipv4_addresses": [
            {
              "address": "10.1.0.2",
              "gateway": "10.1.0.1",
              "name": "IPv4-2",
              "prefix": 24
            }
          ],
          "mac": "00:00:00:00:00:02",
          "mtu": 1500,
          "name": "Ethernet2"
        }
      ],
      "name": "Topology2"
    }
  ],
  "ports": [
    {
      "location": "veth-a",
      "name": "p1"
    },
    {
      "location": "veth-z",
      "name": "p2"
    }
  ]
}
PASSED

============================== 1 passed in 0.18s ===============================

Device Endpointを使ったFlow生成について

今回はTopology(Device)およびIPv4 Interfaceを作成するところまで確認した。
続いてTopology(Device)をFlowのEndpointとして指定したところ、

MAC address resolution failed for IP: 10.1.0.2

というエラーが発生した。

Topology(Device)をFlowのEndpointとして利用した場合は、ARPによるMACアドレス解決が行われるように見える。現時点では詳細な動作は確認中であり、次回はこのARP解決の仕組みとDevice Endpointを利用したTraffic生成について確認していく。

まとめ

今回確認したサンプルコードでは、Topology(Device)、Ethernet、IPv4 Interfaceの設定を作成し、snappiが内部で生成するConfigをJSON形式で確認できることを確認した。
一方、このTopology(Device)をFlowのEndpointとしてTrafficを印可すると、ARPによるMACアドレス解決が必要となり、現時点では設定方法について調査中である。

参考資料

How to use the packet editor to construct packets with detail protocols template
https://www.youtube.com/watch?v=L9kuBpDjJcY

Introduction to IxNetwork NextGen Protocol Framework (NGPF)
https://www.youtube.com/watch?v=A0mbZuP94jo&list=PLtRQdxmT_4727o1aFcuQzl37lWNJk4Ybj

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?