2021年5月9日版(r46604)のファームで、BroadcomのCPUを使ったルータでのVLAN設定方法が変更されたようです。
以下のフォーラムへのアナウンスにもあるのですが
• Added CTF (Cut Through Forwarding) and swconfig support to Broadcom devices.
DD-WRT Forum :: View topic – New Build – 05/09/2021 – r46604
r46604で swconfig
ユーティリティがサポートされました。その関係でしょうか、以前の記事で書いた nvram
コマンドを使ったポート単位のVLAN設定が機能しなくなっていました。
ポート単位にVLAN設定していて、しかもVLAN Taggingも使っているので、機能しなくなるととても困ります。急いで swconfig
バージョンに切り替えることにしました。
swconfigの使い方調査
swconfig
は OpenWRT でも使われているスイッチ制御用のユーティリティです。私の手元の環境で実行するとこんな出力が得られました。
root@dd-wrt:~# swconfig
swconfig list
swconfig dev <dev> [port <port>|vlan <vlan>] (help|set <key> <value>|get <key>|load <config>|show)
どうやらまずは list
オプションが手っ取り早そうです。やってみます。
root@dd-wrt:~# swconfig list
Found: switch0 - bcm53011
制御可能なスイッチデバイスが switch0
として見つかりました。制御しているドライバは bcm53011
みたいです。では情報が得られそうな swconfig dev <dev> help
をやってみます。
root@dd-wrt:~# swconfig dev switch0 help
switch0: bcm53011(BCM53012), ports: 9 (cpu @ 5), vlans: 4096
--switch
Attribute 1 (int): enable_vlan (Enable VLAN mode)
Attribute 2 (string): ports (Available Ports (as bitmask))
Attribute 3 (int): reset_mib (Reset MIB counters)
Attribute 4 (int): enable_jumbo (Enable Jumbo Frames)
Attribute 5 (int): allow_vid_4095 (Allow VID 4095)
Attribute 6 (none): apply (Activate changes in the hardware)
Attribute 7 (none): reset (Reset the switch)
--vlan
Attribute 1 (ports): ports (VLAN port mapping)
--port
Attribute 1 (string): mib (Get port's MIB counters)
Attribute 2 (int): pvid (Primary VLAN ID)
Attribute 3 (unknown): link (Get port link information)
使える機能が見えてきました。
- switch 全体
- enable_vlan: VLAN有効化
- ports: 利用可能なポートをビットマスクで指定
- reset_mib: MIBカウンタのリセット
- enable_jumbo: ジャンボフレーム有効化
- allow_vid_4095: 4095までのVLAN ID有効化 ※デフォルトは16までだったはず
- apply: 変更内容の反映
- reset: スイッチの初期化
- vlan レベル
- ports: VLANに所属するポートの指定
- port レベル
- mib: ポートのMIBカウンタの取得
- pvid: ポートのプライマリ VLAN ID
- link: ポートのリンク状態
を使うことで情報収集や設定変更ができるっぽいです。
現在の設定確認
現在の状態の確認
まずは今の状態を確認してみます。コマンド書式に show
があったのでまずは実行してみます。
root@dd-wrt:~# swconfig dev switch0 show
Global attributes:
enable_vlan: 1
ports: 0x01bf
reset_mib: ???
enable_jumbo: 0
allow_vid_4095: 0
Port 0:
mib: TxOctets : 8605
TxDropPkts : 0
TxBroadcastPkts : 4
TxMulticastPkts : 6
TxUnicastPkts : 21
TxCollisions : 0
TxSingleCollision : 0
TxMultipleCollision : 0
TxDeferredTransmit : 0
TxLateCollision : 0
TxExcessiveCollision: 0
TxPausePkts : 0
RxOctets : 19693
RxUndersizePkts : 0
RxPausePkts : 0
Pkts64Octets : 3
Pkts65to127Octets : 16
Pkts128to255Octets : 13
Pkts256to511Octets : 6
Pkts512to1023Octets : 15
Pkts1024to1522Octets: 4
RxOversizePkts : 0
RxJabbers : 0
RxAlignmentErrors : 0
RxFCSErrors : 0
RxGoodOctets : 19693
RxDropPkts : 0
RxUnicastPkts : 6
RxMulticastPkts : 47
RxBroadcastPkts : 4
RxSAChanges : 1
RxFragments : 0
RxJumboPkts : 0
RxSymbolErrors : 0
RxDiscarded : 0
pvid: 1
link: port:0 link:down
Port 1:
mib: TxOctets : 1601491
TxDropPkts : 0
TxBroadcastPkts : 616
TxMulticastPkts : 2594
TxUnicastPkts : 2157
TxCollisions : 0
TxSingleCollision : 0
TxMultipleCollision : 0
TxDeferredTransmit : 0
TxLateCollision : 0
TxExcessiveCollision: 0
TxPausePkts : 0
RxOctets : 557506
RxUndersizePkts : 0
RxPausePkts : 0
Pkts64Octets : 96
Pkts65to127Octets : 781
Pkts128to255Octets : 265
Pkts256to511Octets : 128
Pkts512to1023Octets : 89
Pkts1024to1522Octets: 239
RxOversizePkts : 0
RxJabbers : 0
RxAlignmentErrors : 0
RxFCSErrors : 0
RxGoodOctets : 557506
RxDropPkts : 0
RxUnicastPkts : 787
RxMulticastPkts : 356
RxBroadcastPkts : 455
RxSAChanges : 1
RxFragments : 0
RxJumboPkts : 0
RxSymbolErrors : 0
RxDiscarded : 23
pvid: 1
link: port:1 link:up speed:1000baseT full-duplex auto
Port 2:
mib: TxOctets : 1285352
TxDropPkts : 0
TxBroadcastPkts : 2039
TxMulticastPkts : 3428
TxUnicastPkts : 30
TxCollisions : 0
TxSingleCollision : 0
TxMultipleCollision : 0
TxDeferredTransmit : 0
TxLateCollision : 0
TxExcessiveCollision: 0
TxPausePkts : 0
RxOctets : 20190
RxUndersizePkts : 0
RxPausePkts : 0
Pkts64Octets : 93
Pkts65to127Octets : 204
Pkts128to255Octets : 0
Pkts256to511Octets : 0
Pkts512to1023Octets : 0
Pkts1024to1522Octets: 0
RxOversizePkts : 0
RxJabbers : 0
RxAlignmentErrors : 0
RxFCSErrors : 0
RxGoodOctets : 20190
RxDropPkts : 0
RxUnicastPkts : 37
RxMulticastPkts : 2
RxBroadcastPkts : 258
RxSAChanges : 255
RxFragments : 0
RxJumboPkts : 0
RxSymbolErrors : 0
RxDiscarded : 38
pvid: 1
link: port:2 link:up speed:1000baseT full-duplex auto
Port 3:
mib: TxOctets : 79803191
TxDropPkts : 0
TxBroadcastPkts : 1889
TxMulticastPkts : 2683
TxUnicastPkts : 79315
TxCollisions : 0
TxSingleCollision : 0
TxMultipleCollision : 0
TxDeferredTransmit : 0
TxLateCollision : 0
TxExcessiveCollision: 0
TxPausePkts : 1112
RxOctets : 8690581
RxUndersizePkts : 0
RxPausePkts : 0
Pkts64Octets : 11035
Pkts65to127Octets : 35468
Pkts128to255Octets : 5694
Pkts256to511Octets : 2929
Pkts512to1023Octets : 1851
Pkts1024to1522Octets: 1409
RxOversizePkts : 0
RxJabbers : 0
RxAlignmentErrors : 0
RxFCSErrors : 0
RxGoodOctets : 8690651
RxDropPkts : 0
RxUnicastPkts : 57292
RxMulticastPkts : 808
RxBroadcastPkts : 286
RxSAChanges : 1
RxFragments : 0
RxJumboPkts : 0
RxSymbolErrors : 0
RxDiscarded : 100
pvid: 1
link: port:3 link:up speed:1000baseT full-duplex auto
Port 4:
mib: TxOctets : 18070021
TxDropPkts : 0
TxBroadcastPkts : 6
TxMulticastPkts : 8
TxUnicastPkts : 140862
TxCollisions : 0
TxSingleCollision : 0
TxMultipleCollision : 0
TxDeferredTransmit : 0
TxLateCollision : 0
TxExcessiveCollision: 0
TxPausePkts : 0
RxOctets : 929099297
RxUndersizePkts : 0
RxPausePkts : 0
Pkts64Octets : 7455
Pkts65to127Octets : 455721
Pkts128to255Octets : 5110
Pkts256to511Octets : 3758
Pkts512to1023Octets : 3760
Pkts1024to1522Octets: 579677
RxOversizePkts : 0
RxJabbers : 0
RxAlignmentErrors : 0
RxFCSErrors : 4
RxGoodOctets : 929093209
RxDropPkts : 0
RxUnicastPkts : 609686
RxMulticastPkts : 441720
RxBroadcastPkts : 4071
RxSAChanges : 1
RxFragments : 0
RxJumboPkts : 0
RxSymbolErrors : 4
RxDiscarded : 19419
pvid: 2
link: port:4 link:up speed:1000baseT full-duplex auto
Port 5:
mib: TxOctets : 707287646
TxDropPkts : 0
TxBroadcastPkts : 990
TxMulticastPkts : 2162
TxUnicastPkts : 544942
TxCollisions : 0
TxSingleCollision : 0
TxMultipleCollision : 0
TxDeferredTransmit : 0
TxLateCollision : 0
TxExcessiveCollision: 0
TxPausePkts : 1057
RxOctets : 27711295
RxUndersizePkts : 0
RxPausePkts : 0
Pkts64Octets : 225725
Pkts65to127Octets : 3731
Pkts128to255Octets : 6232
Pkts256to511Octets : 2332
Pkts512to1023Octets : 1617
Pkts1024to1522Octets: 6368
RxOversizePkts : 0
RxJabbers : 0
RxAlignmentErrors : 0
RxFCSErrors : 0
RxGoodOctets : 27711295
RxDropPkts : 0
RxUnicastPkts : 245035
RxMulticastPkts : 874
RxBroadcastPkts : 96
RxSAChanges : 238
RxFragments : 0
RxJumboPkts : 0
RxSymbolErrors : 0
RxDiscarded : 3
pvid: 1
link: port:5 link:up speed:1000baseT full-duplex
Port 6:
mib: ???
pvid: 0
link: port:6 link:down
Port 7:
mib: TxOctets : 956679920
TxDropPkts : 0
TxBroadcastPkts : 4936
TxMulticastPkts : 424512
TxUnicastPkts : 878359
TxCollisions : 0
TxSingleCollision : 0
TxMultipleCollision : 0
TxDeferredTransmit : 0
TxLateCollision : 0
TxExcessiveCollision: 0
TxPausePkts : 140
RxOctets : 794850306
RxUndersizePkts : 0
RxPausePkts : 0
Pkts64Octets : 9630
Pkts65to127Octets : 140906
Pkts128to255Octets : 7103
Pkts256to511Octets : 10500
Pkts512to1023Octets : 98754
Pkts1024to1522Octets: 469108
RxOversizePkts : 0
RxJabbers : 0
RxAlignmentErrors : 0
RxFCSErrors : 0
RxGoodOctets : 794850492
RxDropPkts : 0
RxUnicastPkts : 733281
RxMulticastPkts : 1461
RxBroadcastPkts : 1259
RxSAChanges : 117898
RxFragments : 0
RxJumboPkts : 0
RxSymbolErrors : 0
RxDiscarded : 399
pvid: 2
link: port:7 link:up speed:1000baseT full-duplex auto
Port 8:
mib: TxOctets : 0
TxDropPkts : 0
TxBroadcastPkts : 0
TxMulticastPkts : 0
TxUnicastPkts : 0
TxCollisions : 0
TxSingleCollision : 0
TxMultipleCollision : 0
TxDeferredTransmit : 0
TxLateCollision : 0
TxExcessiveCollision: 0
TxPausePkts : 0
RxOctets : 0
RxUndersizePkts : 0
RxPausePkts : 0
Pkts64Octets : 0
Pkts65to127Octets : 0
Pkts128to255Octets : 0
Pkts256to511Octets : 0
Pkts512to1023Octets : 0
Pkts1024to1522Octets: 0
RxOversizePkts : 0
RxJabbers : 0
RxAlignmentErrors : 0
RxFCSErrors : 0
RxGoodOctets : 0
RxDropPkts : 0
RxUnicastPkts : 0
RxMulticastPkts : 0
RxBroadcastPkts : 0
RxSAChanges : 0
RxFragments : 0
RxJumboPkts : 0
RxSymbolErrors : 0
RxDiscarded : 0
pvid: 0
link: port:8 link:down
VLAN 1:
ports: 0 1 2 3 5 7t
VLAN 2:
ports: 4 7
おおお、めっちゃカウンタ表示されてますね。でも今欲しいのはVLANの設定状況やポート数の認識に関する情報です。
一番上を見ると「Global attributes」のなかで enable_vlan
は有効になっているのでVLANは設定可能っぽいですね。となると設定だけ今までの状態に合わせれば良さそうです。ポート数もPort 0からPort 8までが認識されているので制御はこの範囲でやれば問題なさそうです。
一番下を見るとVLAN1とVLAN2しかなく、ポートの割当も以前の記事で確認していたデフォルトのポート割当になっているっぽいです。
リンク状態の確認
ポートが実際に見えているのかも確認してみましょう。ポートを0から8までいっぺんに見たいので seq
コマンド使ったワンライナーでぱっと出してみます。
root@dd-wrt:~# for i in `seq 0 1 8`; do swconfig dev switch0 port $i get link; done;
port:0 link:down
port:1 link:up speed:1000baseT full-duplex auto
port:2 link:up speed:1000baseT full-duplex auto
port:3 link:up speed:1000baseT full-duplex auto
port:4 link:up speed:1000baseT full-duplex auto
port:5 link:up speed:1000baseT full-duplex
port:6 link:down
port:7 link:up speed:1000baseT full-duplex auto
port:8 link:down
これも大丈夫そうです。
swconfig によるVLAN設定の適用
ここまでくれば、前回 nvram
コマンドで設定したものをそのまま swconfig
で適用すればOKです。前回の記事で使用したVLAN関連のコマンドは以下のとおりです。
nvram set port3vlans="1 10 16"
nvram set vlan1ports="1 2 3t 5 7*"
nvram set vlan10ports="3t 7"
しかし swconfig
では port レベルのコマンドではプライマリのVLAN IDだけしか設定できないみたいなので、最初の port3vlans
に相当するものは必要なさそうです。ですので、vlan レベルの設定で「どのVLANにどのポートが属するか」だけ設定することにします。具体的には以下のコマンドです。
swconfig dev switch0 vlan 1 set ports '0 1 2 3t 5 7'
swconfig dev switch0 vlan 10 set ports '3t 7'
VLAN:1 のほうだけ「0」が増えていますが、これは swconfig dev switch0 show
で確認したときに含まれていたのでそのまま残しているだけです。
あとは swconfig dev switch0 set apply
で反映して終わりです。
これを [Administration→Commands] で実行するコマンドに含めれば、次回起動時も有効になります。
コメント