📶

Zao SDK を tagged-VLAN 対応 L2 スイッチでマルチリンクする

2024/05/23に公開

はじめに 🌟

Zao SDK for Jetson はマルチリンクに対応していますが、単に複数の LTE ルータを Jetson と GbE 接続してもマルチリンク動作にはなりません。
図のように USB NIC を用いてマルチリンク構成も組めますが、この記事では tagged-VLAN を用いて複数 LTE ルータでマルチリンク動作させる方法を紹介します。

なお、この記事では Jetson に Zao SDK for Jetson がインスール・設定済であることを前提としています。 Zao SDK for Jetson のセットアップ等は、Zao SDK WEBサイトのドキュメント等を参照してください。

1: 接続構成 🔍

Jetson と 5 ポートの tagged-VLAN 対応 L2 スイッチを用いて、最大 4 台の LTE ルータと接続できる構成とします。

この記事では、L2 スイッチとして、NETGEAR 社の GS305E (ギガビット 5 ポートアンマネージプラススイッチ) を使用します。
多くの 802.1Q 対応の L2 スイッチで同様の構成が可能です。

2: GS305E の設定 ⚙

以下の手順で設定を行います。

  1. PC と GS305E を Ethernet で接続し、Webブラウザから GS305E にログインします
    (ログイン方法については、GS305E のインストールガイドを参照してください)。
    GS305E のどのポートを使っても大丈夫です。

  2. VLAN タブの「拡張/VLAN 設定」から「拡張 802.1Q VLAN」を「有効」にします。

  3. 「拡張/VLAN 設定」に VLAN ポートメンバー表示が出てくるので、「VLAN ID」に「10」を入力して右上「追加」ボタンを押下します。
    同様に「VLAN ID」に 20, 30, 40 を追加します。

  4. 「VLAN メンバーシップ」で以下のように各 VLAN ID のポート設定を行います。
    ・VLAN ID 1 : ポート 5 を U (UnTagged)
    ・VLAN ID 10 : ポート 1 を U (UnTagged)、5 を T (Tagged)
    ・VLAN ID 20 : ポート 2 を U (UnTagged)、5 を T (Tagged)
    ・VLAN ID 30 : ポート 3 を U (UnTagged)、5 を T (Tagged)
    ・VLAN ID 40 : ポート 4 を U (UnTagged)、5 を T (Tagged)

  5. 「Port VLAN ID (PVID)」で以下のように設定します。
    ・ポート1: 10
    ・ポート2: 20
    ・ポート3: 30
    ・ポート4: 40
    ・ポート5: 1

  6. 「VLAN 設定」を選択して、VLAN ポートメンバーが以下のようになっているれば設定完了です。
    PC との接続を外して大丈夫です。

3: Jetson の設定 🧙

Jetson に tagged-VLAN をブリッジする設定を施します。

Jetson 上で以下の内容の vlan.sh ファイルを作成します。

vlan.sh
#!/bin/bash
set -eu
# VLAN ID
VLANS=(10 20 30 40)
# On-board Ethernet
ETH="eth0" 
# for Jetson Nano Developer Kit
# ETH=$(basename /sys/devices/1003000.pcie/pci0000\:00/0000\:00\:02.0/0000\:01\:00.0/net/*)
# Bridge
BR=br0

func_log() {
  local -r M=$1
  local -r T=$(date '+[%Y%m%dT%H:%M:%S.%3N%:z]')
  logger -p local0.info -t VLAN "${T} ${M}" 
}

func_log "tagged:${ETH}, VLAN ID:${VLANS[*]}, Bridge:${BR}" 
if [ -z "${ETH}" ] ; then
  exit 1
fi

ip link add ${BR} type bridge vlan_filtering 1
ip link set ${ETH} master ${BR}

for id in ${VLANS[@]}; do
  ip link add name eth${id} type veth peer name eth${id}-br
  ip link set eth${id}-br master ${BR}
  bridge vlan add dev eth${id}-br vid ${id} pvid untagged master
  bridge vlan add dev ${ETH} vid ${id} master
  ip link set up dev eth${id}-br
done

ip link set up dev ${BR}

func_log "Done" 
exit 0

作成したファイルをインストールします。

$ sudo mkdir -p /usr/local/libexec
$ sudo install -m 755 -o root -g root vlan.sh /usr/local/libexec/

続けて、起動時に vlan.sh を実行するために vlan.service を以下の内容で作成します。

vlan.service
[Unit]
Description=VLAN Setting
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/libexec/vlan.sh

[Install]
WantedBy=multi-user.target

vlan.serrvice をインストールして、有効化します。

$ sudo mkdir -p /usr/local/lib/systemd/system/
$ sudo install -m 644 -o root -g root vlan.serrvice /usr/local/lib/systemd/system/
$ sudo systemctl daemon-reload
$ sudo systemctl enable vlan.service

/etc/zao/InfraCtrl.conf に以下の内容を追加します。

/etc/zao/InfraCtrl.conf (追記)
nwk_dev=1,VETH1,virtual/net/eth10
nwk_dev=2,VETH2,virtual/net/eth20
nwk_dev=3,VETH3,virtual/net/eth30
nwk_dev=4,VETH4,virtual/net/eth40

この設定では、Jetson 側は各 LTE ルータから DHCP で IP アドレス取得して動こうとします。
固定 IP アドレス動作については後述します。

設定を反映するには Jetson の再起動が必要です。

4: マルチリンクでの映像伝送確認 📈

ここまでで、Jetson, GS305E, LTE ルータを接続して、Jetson を起動すればマルチリンク動作するはずです。
今回は L2 スイッチのポート 1, 2, に LTE ルータを接続し動作確認を行いました。
Jetson に HDMI ディスプレイを接続すると、下図のような TUI 画面となっており、Line1, 2 のマルチリンクでの映像伝送を行っていることを確認できました。

この時、Zao Cloud View の UI 画面の上部の右から 2 番目のアイコン (下図の赤丸) を選択して開いた画面が下図になります。
開いた画面の赤四角の箇所を選択して、各回線のビットレートを確認できます。
今回は、下図のように Line1, 2 の回線で映像伝送していることがグラフ表示でも確認できました。

補足 A: 固定 IP アドレスの設定 🛠

上記手順では Jetson の各 Line は LTE ルータから DHCP で IP アドレス取得する形での動作でした。
例えば Line1, 2 を固定 IP アドレスに動かすには、/etc/zao/InfraCtrl.conf を以下のように設定します。

/etc/zao/InfraCtrl.conf (追記)
nwk_dev=1,VETH1,virtual/net/eth10
nwk_dev=2,VETH2,virtual/net/eth20
nwk_dev=3,VETH3,virtual/net/eth30
nwk_dev=4,VETH4,virtual/net/eth40
# Line1 static address
line_1_addr=10.0.0.2
line_1_auto=0
line_1_dns=10.0.0.1
line_1_gw=10.0.0.1
line_1_mask=255.255.255.0
# Line2 static address
line_2_addr=10.0.0.2
line_2_auto=0
line_2_dns=10.0.0.1
line_2_gw=10.0.0.1
line_2_mask=255.255.255.0

各 Line は別々に扱われるので、同じネットワークアドレス (上記例では 10.0.0.0/24) でも問題ありません。

補足 B: tagged-VLAN 設定の無効化 🟧

Jetson の tagged-VLAN の設定を無効化するには、以下のようにコマンド実行します。

$ sudo systemctl disable vlan.service
$ sudo reboot

終わりに

本記事では、NETGEAR GS305E と複数台の LTE ルータを接続してマルチリンクで映像伝送する方法を説明しました。
複数の USB NIC を使った場合よりもすっきりしたハードウェア構成でマルチリンク構成が構築できますのでご活用下さい。

関連資料

Discussion