マニュアルページセク ション 1M: システム管理コマンド

印刷ビューの終了

更新: 2014 年 7 月
 
 

flowadm(1M)

名前

flowadm - プロトコル、サービス、コンテナ、および仮想マシンの帯域幅リソース制御および優先度の管理

形式

flowadm
flowadm show-flow [-P] [[-p] -o field[,...]] [{-l link | flow}]
flowadm add-flow [-t] [-R root-dir] -l link -a attr=value[,...]
     [-p prop=value[,...]] flow
flowadm remove-flow [-t] [-R root-dir] {-l link | flow}
flowadm set-flowprop [-t] [-R root-dir] -p prop=value[,...] flow
flowadm reset-flowprop [-t] [-R root-dir] [-p prop[,...]] flow
flowadm show-flowprop [-P] [[-c] -o field[,...]] [-l link]
     [-p prop[,...]] [flow]
flowadm help [subcommand-name]

説明

flowadm コマンドは、特定リンク上のあるトラフィックタイプに対するネットワーク帯域幅、優先度、および関連リソースを作成、変更、削除、および表示するために使用されます。

flowadm コマンドを使用すると、トランスポート、サービス、またはサブネットのネットワーク帯域幅リソースを管理できます。サービスは、すべてまたは一部の属性 (トランスポート、ローカルポート、リモートポート、ローカル IP アドレス、リモート IP アドレス) の組み合わせで指定できます。サブネットは、その IP アドレスとサブネットマスクで指定します。このコマンドは、物理リンク、仮想 NIC、リンクアグリゲーションなど、任意のタイプのデータリンクで使用できます。

フローは、レイヤー 3 およびレイヤー 4 のヘッダーに基づく一連の属性として定義され、プロトコル、サービス、または仮想マシンを識別する目的で使用できます。

有効なフロー名には制限があります。第 1 に、フロー名は 31 文字を超えることはできません。第 2 に、フロー名は英数字 (a-z、A-Z、0-9)、下線 (「_」)、ピリオド (「.」) およびハイフン (「-」) のみで構成し、英字で始める必要があります。

パフォーマンスへの影響を最小限に抑えながら制限を適用できるように、非常に高速かつスケーラビリティーの高い方法でインバウンドおよびアウトバウンドのパケットがフローに対応付けられます。

flowadm コマンドを使用してフローを識別する際に、帯域幅リソースの制御を課さないようにすることもできます。これにより、flowstat(1M) とともに使用した場合の、フロー観測性が向上します。

フローの作成、変更、および削除は、すべての大域ゾーン、非大域ゾーン、およびカーネルゾーンで行うことができます。ゾーン管理者は、自身の大域または非大域ゾーン内でしかフローを作成できません。ただし、次の段落で説明するように、大域ゾーンで作成されたフローを非大域ゾーンに移行することは可能です。管理者がフローの変更や削除を行えるのは、そのフローの作成元となる大域または非大域ゾーン内からだけです。大域ゾーンのユーザーは、大域ゾーン内とすべての非大域ゾーン内に存在している、システム上のすべてのフローを表示できます。非大域ゾーンのユーザーが表示できるのは、そのゾーン内のフローだけです。

管理者は、大域ゾーン内でのフローの作成が完了すると、そのフローに関連付けられたデータリンクを非大域ゾーンに割り当てることができます。そのような場合、関連するフローもその同じ非大域ゾーンに割り当てられます。この非大域ゾーンが停止すると、データリンクとその関連フローは大域ゾーンに戻されます。

同じ名前のフローでも、ゾーン名が異なれば区別されます。たとえば、fastpak という名前のフローを 3 つ作成する場合、fastpak をそれぞれ異なるゾーン内に格納すれば可能となります。たとえば、zone1/fastpakzone2/fastpak、および zone3/fastpak はすべて有効なゾーン名です。

すべてのフロー構成は、ネットワーク構成プロファイル (NCP) の一部です。NCP は 1 つのシステムにいくつでも定義できますが、アクティブな NCP は常に 1 つになります。flowadm コマンドを使用して行われた変更は、現在アクティブになっている NCP に適用されます。

NCP は「固定」または「リアクティブ」にできます。DefaultFixed と呼ばれる固定 NCP が 1 つあります。NCP の詳細は、netcfg(1M) を参照してください。

flowadm は、対応するオプションを備えた一連のサブコマンドとして実装されています。オプションについては各サブコマンドの文脈で説明します。flowadm がサブコマンドなしで呼び出されると、システムで構成されているすべてのフローが表示されます。詳細は、後述の「使用例」を参照してください。

サブコマンド

サポートされているサブコマンドは次のとおりです。

flowadm show-flow [–P] [[–p] –o field[,...]] [{–l link | flow}]

すべてのフロー、1 つのリンクのすべてのフロー、指定されたフローのいずれかに対するフロー構成情報 (デフォルト) または統計情報を表示します。

–o field[,...]

表示する出力フィールドのコンマ区切りのリスト (大文字と小文字は区別されません)。フィールド名は、次に示すフィールドのいずれか、またはすべてのフィールドを表示するための特殊な値 all にする必要があります。見つかったフローごとに、次のフィールドを表示できます。

flow

フローの名前。

link

フローが存在するリンクの名前。

proto

使用されるトランスポートレイヤープロトコルの名前。

laddr

フローのローカル IP アドレス。指定しない場合、それは「--」として表示されます。

lport

フローのサービスのローカルポート。

raddr

フローのリモート IP アドレス。指定しない場合、それは「--」として表示されます。

rport

フローのサービスのリモートポート。

dsfield

フローの差別化サービス値、および IP ヘッダーの差別化サービスフィールドのどのビットを対象とするかを指定するためにDSFIELD値とともに使用されるマスク。

ipaddr

フローの IP アドレス。これは、フローの定義方法に応じて、ローカルかリモートのいずれかになります。このフィールドは非推奨であり、下位互換性のためだけに存在します。そのため、–o オプションとともに指定しないかぎり、デフォルトでは表示されません。代わりに、laddr および raddr を使用することをお勧めします。

pid

このフローを作成したプロセスの PID を指定します。このフィールドは、システムによって生成されたフローにのみ意味を持ち、ユーザーが生成したフローには「--」を表示します。

システムで生成されるフロー (「<id>.sys.sock」という接頭辞が付く) は、SO_FLOW_SLA オプションを使用して setsockopt() を呼び出すアプリケーションによって作成される一時フローです。

–p––parseable

安定したマシン解析可能な形式を使用して表示します。

–P––persistent

永続的なフロープロパティーの情報を表示します。

–l link, ––link=link | flow

指定されたリンク上のすべてのフローの情報または指定されたフローの情報を表示します。

flowadm add-flow [–t] [–R root-dir] –l link –a attr=value[,...] –p prop=value[,...] flow

システムにフローを追加します。フローはそのフロー属性とフロープロパティーによって識別されます。

特定のフローを識別するにあたり、その帯域幅、リソース、および優先度を制限できます。

–t, –-temporary

変更は一時的なものであり、リブート後は永続しません。永続がデフォルトです。

–R root-dir, ––root-dir=root-dir

flowadm が永続的な作成を適用するべき代替ルートディレクトリを指定します。

–l link, ––link=link

フローの追加先となるリンクを指定します。

–a attr=value[,...]、––attr=value

指定された値に設定される属性のコンマ区切りリスト。

–p prop=value[,...], ––prop=value[,...]

指定された値に設定するプロパティーのコンマ区切りのリスト。

flowadm remove-flow [–t] [–R root-dir] {–l link | flow}

リンクまたは名前で特定された既存のフローを削除します。

–t, ––temporary

変更は一時的なものであり、リブート後は永続しません。永続がデフォルトです。

–R root-dir, ––root-dir=root-dir

flowadm が永続的な削除を適用するべき代替ルートディレクトリを指定します。

–l link | flow, ––link=link | flow

リンクが指定されている場合、そのリンクからすべてのフローを削除します。単一のフローが指定されている場合は、そのフローだけを削除します。

flowadm set-flowprop [–t] [–R root-dir] –p prop=value[,...] flow

名前で指定されたフローで、1 つ以上のプロパティーの値を設定します。プロパティーの完全な一覧を取得するには、show-flow サブコマンドを使用します。

–t, ––temporary

変更は一時的なものであり、リブート後は永続しません。永続がデフォルトです。

–R root-dir, ––root-dir=root-dir

flowadm が永続的なプロパティー設定を適用するべき代替ルートディレクトリを指定します。

–p prop=value[,...], ––prop=value[,...]

指定された値に設定するプロパティーのコンマ区切りのリスト。

flowadm reset-flowprop [–t] [–R root-dir] [–p prop =value[,...]] flow

指定されたフローで、1 つ以上のプロパティーをデフォルト値にリセットします。プロパティーが指定されていない場合、すべてのプロパティーがリセットされます。デフォルト値など、プロパティーの説明については、show-flowprop サブコマンドを参照してください。

–t, ––temporary

リセットを一時的なものとして指定します。一時的なリセットは、次回のリブートまで保持されます。

–R root-dir, ––root-dir=root-dir

flowadm が永続的なプロパティー設定を適用するべき代替ルートディレクトリを指定します。

–p prop[,...]

リセットするプロパティーのコンマ区切りのリスト。

flowadm show-flowprop [–cP] [–l link] [–p prop[,...]] [flow]

すべてのフロー、指定されたリンクのフロー、指定されたフローのいずれかに対する 1 つ以上のプロパティーの現在値または永続的な値を表示します。

デフォルトでは、現在の値が表示されます。プロパティーが指定されていない場合、使用可能なすべてのフロープロパティーが表示されます。プロパティーごとに、次のフィールドが表示されます。

FLOW

フローの名前。

PROPERTY

プロパティーの名前。

PERM

プロパティーのアクセス権。読み取り専用プロパティーには「r-」、読み取りと書き込みの両方ができるプロパティーには「rw」。

VALUE

現在の (または永続的な) プロパティー値。値は、未設定の場合は -- (ハイフン 2 つ) として表示され、未知の場合は ? (疑問符) として表示されます。設定されていないか、またはリセットされた永続的な値は -- と表示され、システムの DEFAULT 値 (ある場合) を使用します。

DEFAULT

プロパティーのデフォルト値。プロパティーにデフォルト値がない場合は、-- (ハイフン 2 つ) が表示されます。

POSSIBLE

プロパティーに設定できる値のコンマ区切りのリスト。値に数値の範囲がある場合は、短縮形として最小値と最大値が表示される可能性があります。指定可能な値が不明または無限の場合は、-- (ハイフン 2 つ) が表示されます。

フロープロパティーについては「フロープロパティー」のセクションで説明されています。

–c, ––parseable

安定したマシン解析可能な形式を使用して表示します。

–P––persistent

永続的なフロープロパティーの情報を表示します。

–p prop[,...], ––prop=prop[,...]

表示するプロパティーのコンマ区切りのリスト。

flowadm help [subcommand-name]

サポートされているすべての flowadm サブコマンド、または特定のサブコマンドの使用法を表示します。特定のサブコマンドのヘルプを表示すると、コマンド構文および例が表示されます。flowadm help を引数なしで使用すると、すべてのサブコマンドが表示されます。

フロー属性

flowadm コマンド内でフローを識別するフローオペランドは、次の一覧から選択した 1 つ以上のキーワード-値ペアのコンマ区切りのリストです。

local_ip[/prefix_len]

ローカル IP アドレスでネットワークフローを識別します。value はドット区切り 10 進表記の IPv4 アドレス、コロン区切り表記の IPv6 アドレスのいずれかでなければいけません。prefix_len はオプションです。

prefix_len が指定された場合、それは、ifconfig(1M)route(1M) のアドレスと同じ表記規則に従って、サブネットアドレスのネットマスクを記述します。これが指定されなかった場合、指定された IP アドレスはホストアドレスとみなされ、そのデフォルトプレフィックス長は、IPv4 アドレスでは /32、IPv6 では /128 になります。

remote_ip[/prefix_len]

リモート IP アドレスでネットワークフローを識別します。その構文は local_ip 属性と同じです

transport={tcp|udp|sctp|icmp|icmpv6}

使用するレイヤー 4 プロトコルを識別します。これは通常、特別な注意を払う必要のあるローカルまたはリモートのサービスを識別するために、local_port または remote_port と組み合わせて使用されます。

local_port

ローカルポートで指定されるサービスを識別します。

remote_port

リモートポートで指定されるサービスを識別します。

dsfield[:dsfield_mask]

RFC 2474 で定義されているとおりに 8 ビットの差別化サービスフィールドを識別します。

省略可能な dsfield_mask は、dsfield 値との比較時に差別化サービスフィールドのどのビットを対象とするかを指定するために使用されます。あるビット位置の値が 0 の場合、それは、そのビットの値を無視する必要があることを示し、1 の場合はその逆を示します。このマスクの範囲は 0x01 から 0xff です。dsfield_mask が指定されていなければ、デフォルトマスク 0xff の値が使用されます。dsfield 値とマスクはどちらも 16 進数値でなければいけません。

サポートされている属性の組み合わせを、次に示します:

local_ip=address[/prefix_len]
remote_ip=address[/prefix_len]
transport={tcp|udp|sctp|icmp|icmpv6}
transport={tcp|udp|sctp},local_port=port
transport={tcp|udp|sctp},remote_port=port
transport={tcp|udp|sctp},local_ip=address[/prefix_len],local_port=port
    [,remote_ip=address[/prefix_len]][,remote_port=port]
dsfield=val[:dsfield_mask
]

ある特定のリンク上で、上の各組み合わせは相互に排他的です。特定リンク上のすべてのフローが同じ組み合わせを保持する必要があり、フローを差別化するのは属性値だけです。複数の組み合わせを含むフローを作成しようとすると、失敗します。

制限

制限には、個別のフロー制限とゾーンごとのフロー制限があります。

個別のフロー制限

個々のフローに対する制限では、同じリンクに追加されたほかのフローを考慮する必要はありません。

各フローで属性を指定できるのは、1 回だけです。たとえば、次のコマンドは有効ではありません。

# flowadm add-flow -l vnic1 -a local_port=80,local_port=8080 httpflow

transportlocal_port または transportremote_port:

TCP、UDP、または SCTP フローの指定時には、ローカルポートまたはリモートポートを使用できます。ICMP または ICMPv6 フローではポートを指定できません。

local_portremote_port のいずれかを指定する場合、トランスポートは TCP、UDP、または SCTP のいずれかでなければいけません。

次のコマンドは有効です。

# flowadm add-flow -l e1000g0 -a transport=udp udpflow
# flowadm add-flow -l e1000g0 -a transport=tcp,local_port=80 \
udp80flow

次のコマンドは有効ではありません。

# flowadm add-flow -l e1000g0 -a remote_port=25 flow25
# flowadm add-flow -l e1000g0 -a transport=icmpv6,remote_port=16 \
flow16
ゾーンごとのフロー制限

あるゾーン内で同じ名前のフローを 2 つ作成することはできません。リンクを指定してフローを追加した場合、そのフローを表示、変更、または削除する際にリンクを指定する必要はありません。

フロープロパティー

サポートされるフロープロパティーは次のとおりです。あるプロパティーを特定の値に設定できるかどうかは、ドライバやハードウェアによって異なることに注意してください。

maxbw

フローの全二重帯域幅を設定します。この帯域幅は、いずれかのスケールサフィックス (Kbps、Mbps、または Gbps を示す KM、または G) が付いた整数として指定されます。単位が指定されていない場合、入力値は Mbps として読み取られます。デフォルトでは、帯域幅の制限はありません。

priority

フローの優先度を設定します。優先度の値には、「high」、「medium」、および「low」のいずれかを指定できます。優先度のデフォルト値は「medium」です。

フロー上でトークンを「high」に設定すると、そのフローに分類されているパケットが、同じリンク上の通常のフローからのパケットよりも先に処理されるという効果があります。また、そのフローは NIC にオフロードされます (NIC にフローのオフロード機能がある場合)。優先度の高いフローでは、システムリソースの可用性に応じて待機時間が短縮されることがあります。

hwflow

フローが基本となる NIC にオフロードされるかどうかを示す読み取り専用のプロパティー。「on」はフローがオフロードされることを意味し、「off」はそうでないことを意味します。

使用例 1 フロー構成の表示

次のコマンドは flowadm を引数なしで呼び出し、その結果システムのすべてのフローを表示します。

# flowadm
	FLOW        LINK     PROTO LADDR             LPORT RADDR             RPORT DSFLD
	tcpflow     net0     tcp   --                --    --                --    --
	udpflow     net0     udp   --                --    --                --    --
使用例 2 ミッションクリティカルポートに関するポリシーの作成

次のコマンドは、HTTPS が専用の NIC ハードウェアとカーネル TCP/IP リソースを取得できるように、HTTPS サーバーのインバウンド HTTPS トラフィックに関するポリシーを作成しています。指定されている名前 https-1 は、あとでポリシーの変更や削除を行う際に使用できます。

# flowadm add-flow -l net0 -a transport=TCP,local_port=443 https-1
	# flowadm show-flow -l net0
	FLOW        LINK     PROTO LADDR             LPORT RADDR             RPORT DSFLD
	https-1     net0     tcp   --                443   --                --    --
使用例 3 既存のポリシーの変更による帯域幅リソース制御の追加

次のコマンドは、前述の例の https-1 ポリシーを変更します。このコマンドは帯域幅制御を追加します。


# flowadm set-flowprop -p maxbw=500M https-1
	#  flowadm show-flow https-1
	FLOW        LINK     PROTO LADDR             LPORT RADDR             RPORT DSFLD
	https-1     net0     tcp   --                443   --                --    --

# flowadm show-flowprop https-1
	FLOW         PROPERTY        PERM VALUE          DEFAULT        POSSIBLE
	https-1      maxbw           rw     500          --             -- 
	https-1      priority        rw   medium         medium         low,medium,high 
	https-1      hwflow          r-   off            --             on,off 

使用例 4 UDP 帯域幅使用量の制限

次のコマンドは、UDP プロトコルのポリシーを作成し、使用可能な帯域幅のうち、100 Mbps を超える量をそのプロトコルが消費できないようにしています。このフローには limit-udp-1 という名前が付けられています。

# flowadm add-flow -l net0 -a transport=UDP -p maxbw=100M \
       limit-udp-1
使用例 5 ローカルアドレス/ポートによって定義されたフローへのポリシーの設定

次のコマンドは、ローカル IP ポートが 192.168.200.102:443 である TCP フロー用のポリシーを作成します。つまり、高い優先度と 800M ビット/秒という最大帯域幅で配信されるような HTTPS パケットを優遇します。

# flowadm add-flow -l net0 -a transport=tcp,\
       local_ip=192.168.200.102,local_port=443 \
       -p priority=high,maxbw=800M my-https

# flowadm show-flow
	FLOW        LINK     PROTO LADDR             LPORT RADDR             RPORT DSFLD
	my-https    net0     tcp   192.168.200.102   443   --                --    --

# flowadm show-flowprop
	FLOW         PROPERTY        PERM VALUE          DEFAULT        POSSIBLE
	my-https     maxbw           rw     800          --             -- 
	my-https     priority        rw   high           medium         low,medium,high 
	my-https     hwflow          r-   off            --             on,off
使用例 6 ローカル/リモートアドレス/ポートによって定義されたフローへのポリシーの設定

次のコマンドは、ローカル IP ポートが 192.168.200.102:443 で、リモート IP ポートが 192.168.200.104:12785 である TCP フロー用のポリシーを作成します。つまり、特定のリモート IP ポートと通信している HTTPS パケットを優遇します。このフローに属しているパケットはすべて、高い優先度で配信されます。同時に、このフローで消費する帯域幅が使用可能な帯域幅の 800M ビット/秒を超えることはできません。

# flowadm add-flow -l net0 -a transport=tcp,\
       local_ip=192.168.200.102,local_port=443,\
       remote_ip=192.168.200.104,remote_port=12785 \
       -p priority=high,maxbw=800M my-flow

# flowadm show-flow
	FLOW        LINK     PROTO LADDR             LPORT RADDR             RPORT DSFLD
	my-flow     net0     tcp   192.168.200.102   443   192.168.200.104   12785 --

# flowadm show-flowprop
	FLOW         PROPERTY        PERM VALUE          DEFAULT        POSSIBLE
	my-flow      maxbw           rw     800          --             -- 
	my-flow      priority        rw   high           medium         low,medium,high 
	my-flow      hwflow          r-   off            --             on,off 
使用例 7 dsfield 属性を使用したポリシーの設定

次のコマンドは、帯域幅 500Mbps の EF PHB (RFC 2598 の DSCP 値 101110) に対するポリシーを設定します。このフローでは、dsfield の値が 0x2e (101110)、dsfield_mask0xfc になっています (下位 2 ビットを無視する必要があるため)。

# flowadm add-flow -l net0 -a dsfield=0x2e:0xfc
-p maxbw=500M efphb-flow
使用例 8 複数ゾーン内のフローの表示

次のコマンドは、同じ名前を持つ 2 つのフローを表示しています。最初のフローは大域ゾーン内に存在し、2 番目のフローはゾーン zone1 内に存在しています。このコマンドは大域ゾーンから呼び出されているため、ユーザーはシステム上のすべてのフローを表示できます

# flowadm 
	FLOW        LINK     PROTO LADDR             LPORT RADDR             RPORT DSFLD
	tcpflow     net0     tcp   --                --    --                --    --
	zone1/tcpflow zone1/net0 tcp   --                --    --                --    --
使用例 9 無効なフローの組み合わせ

特定のリンク上のすべてのフローで、同じ属性の組み合わせを保持する必要があります。次のシーケンスを考慮してください:

# flowadm add-flow -l net0 -a transport=tcp,local_port=443 httpsflow
# flowadm add-flow -l net0 -a local_ip=192.1.168.157 ngzflow

最初のフローで次の組み合わせが使用されるため、2 番目のコマンドは失敗します:

transport={tcp|udp|sctp},local_port=port

これは、2 番目のフローで使用される組み合わせと互換性がありません:

local_ip=address[/prefix_len]
使用例 10 ヘルプの表示

次のコマンドは、flowadm サブコマンドを一覧表示します。

# flowadm help
The following subcommands are supported:
Flow    : add-flow       remove-flow     reset-flowprop
		       set-flowprop   show-flow       show-flowprop
For more info, run: flowadm help <subcommand>

次のコマンドは、flowadm help を特定のサブコマンドとともに使用する方法を示します。

# flowadm help add-flow
usage:
	       add-flow       [-t] [-R <root-dir>] -l <link> -a <attr>=<value>[,...]
			                  [-p <prop>=<value>,...] <flow>

example:
# flowadm add-flow -l net0 -a transport=tcp -p maxbw=100 tcpflow
使用例 11 システムフローを作成したプロセスの取得

次のコマンドは、システムフローを指定して、pid とプロセス名を取得する方法を示します。


# flowadm
	FLOW        LINK     PROTO LADDR             LPORT RADDR             RPORT DSFLD
	1.sys.sock  net5     tcp   10.1.5.100        51204 10.1.5.101        22    --

# ps `flowadm show-flow -p -o pid 5.sys.sock`
      PID TT       S  TIME COMMAND
     1581 pts/1    T  0:00 ssh 10.1.5.101

次のコマンドは、pid によって作成されたすべてのフローを見つける方法を示します。

# flowadm show-flow  -p -o pid,flow | grep 1581
      1581:1.sys.sock

終了ステータス

0

アクションはすべて正常に実行されました。

>0

エラーが発生した。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/network
インタフェースの安定性
確実

関連項目

acctadm(1M), dladm(1M), flowstat(1M), ifconfig(1M), prstat(1M), route(1M), attributes(5), ifconfig(1M)

以前のリリースの flowadm に存在していた show-usage サブコマンドは、flowstat(1M) –h コマンドで置き換えられました。