Bluetooth Mesh 仕様 – Proxy protocol

仕様

はじめに

Bluetooth Meshの仕様について、Bluetooth SIGで公開されている「Mesh Profile Specification 1.0.1」に基づき、学習を兼ねて記載して行こうと思っています。本文章では、6章の「プロキシプロトコル」について記載いたします。

記載内容に誤り等がありましたら、ご連絡いただければ幸いです。

6 プロキシプロトコル

プロキシプロトコルを使用すると、ノードはコネクション型ベアラを介してネットワークPDU、メッシュビーコン、プロキシ構成メッセージ、およびプロビジョニングPDUを送受信できます。

たとえば、あるノードはGATTをサポートできますが、メッシュメッセージADタイプをアドバタイズできません。このノードは、プロキシプロトコルを使用してこれらのベアラ間でメッセージを転送し、GATTベアラとアドバタイジングベアラをサポートする別のノードとのGATT接続を確立することができます。

6.1 エンディアン

特に明記されていない限り、このプロトコルのすべてのマルチオクテット数値は、セクション3.1.1.1で説明されているように、「ビッグエンディアン」でなければなりません。

6.2 プロキシの役割

プロキシプロトコルは、プロキシサーバとプロキシクライアントの2つの役割を定義します。

プロキシサーバは、プロキシプロトコルと少なくとも1つの他のメッシュベアラーを使用してメッシュベアラをサポートするノードです。 たとえば、プロキシサーバは、アドバタイジングベアラとGATTベアラの間でメッシュメッセージを転送できます。

プロキシクライアントは、プロキシプロトコルを使用するメッシュベアラをサポートします。 たとえば、プロキシクライアントはGATTベアラを使用して、アドバタイジングベアラをサポートするノードにメッシュメッセージを送信できます。

6.3 プロキシPDU

プロキシクライアントとプロキシサーバは、プロキシPDUを交換します。 プロキシPDUには、ネットワークPDU、メッシュビーコン、プロキシ構成メッセージ、またはプロビジョニングPDUを含めることができます。 単一のプロキシPDUには、メッセージ全体またはメッセージのセグメントを含めることができます。 プロキシPDUのサイズは、プロキシプロトコルのユーザによって決定されます。たとえば、GATTベアラは、ATT_MTUに基づいてプロキシPDUのサイズを定義します。

6.3.1 PDUフォーマット

プロキシPDUのフォーマットを図6.1に示し、表6.1で定義します。

図6.1:プロキシPDUフォーマット
フィールド名サイズ
(bits)
説明
SAR2メッセージのセグメンテーションと
再構成の情報
Message Type6PDUに含まれるメッセージのタイプ
Data可変長完全なメッセージまたはメッセージセグメント
表6.1:プロキシPDUフォーマット

表6.2に示すSARフィールドは、メッセージのセグメンテーションを識別し、データフィールドの内容を定義します。

説明
0b00データフィールドには完全なメッセージが
含まれています
0b01データフィールドには、メッセージの最初のセグメントが
含まれます
0b10データフィールドには、メッセージの継続セグメントが
含まれます
0b11データフィールドには、メッセージの最後のセグメントが
含まれます
表6.2:SARフィールド値

表6.3に示すMessageTypeフィールドは、プロキシPDUに含まれるメッセージのタイプを識別します。

タイプ名前説明
0x00ネットワークPDUメッセージは、セクション3.4.4で
定義されているネットワークPDUです。
0x01メッシュビーコンメッセージは、セクション3.9で
定義されているメッシュビーコンです。
0x02プロキシ構成このメッセージは、セクション6.5で
定義されているプロキシ構成メッセージです。
0x03プロビジョニングPDUメッセージは、セクション5.4.1で
定義されているプロビジョニングPDUです。
0x04 – 0x3FRFU将来の使用のために予約されています。
表6.3:Message Typeの値

Dataフィールドには、SARフィールドで定義されたようにセグメント化されたMessage Typeフィールドで定義されたメッセージが含まれます。

6.3.2 セグメンテーション

プロキシプロトコルを使用して送信されるメッセージは、個々のプロキシPDUよりも大きい場合があります。 このようなメッセージを送信できるようにするために、セグメンテーションと再構成が使用されます。

プロキシPDUの最大サイズ以下のメッセージを送信する場合、SARフィールドは0b00に設定され、データフィールドには完全なメッセージが含まれます。

プロキシPDUの最大サイズより大きいメッセージを送信する場合、メッセージはセグメントに分割され、最後のプロキシPDUが満たされる場合とされない場合を除いて、各プロキシPDUが満たされます。 これらのセグメントは順番に送信され、最初のセグメントのSARフィールドは0b01に設定され、最後のセグメントのSARフィールドは0b11に設定され、他のすべてのセグメントのSARフィールドは0b10に設定されます。

6.4 プロキシフィルタリング

プロキシクライアントとプロキシサーバ間で交換されるネットワークPDUの数を減らすために、プロキシフィルターを使用できます。

プロキシサーバによってインスタンス化されたネットワークインターフェイス(セクション3.4.5を参照)の出力フィルターは、プロキシクライアントによって構成できます。 これにより、プロキシクライアントは、特定の宛先アドレスを持つメッシュメッセージのみの受信を明示的に要求できます。 たとえば、グループアドレスにサブスクライブされているプロキシクライアントは、その要素の1つのユニキャストアドレスとそのグループアドレスにアドレス指定されたパケットのみを受信したい場合があります。 したがって、プロキシクライアントは、プロキシプロトコルを使用して受信するパケットを完全に制御できます。

6.4.1 フィルタータイプ

プロキシフィルターは、ホワイトリストフィルターまたはブラックリストフィルターのいずれかです。

ホワイトリストフィルターには、プロキシクライアントが対象とする宛先アドレスのリストであるホワイトリストが関連付けられています。ホワイトリストフィルターは、ホワイトリストに追加されたアドレスを除くすべての宛先アドレスをブロックします。

ブラックリストフィルターには、プロキシクライアントが受信したくない宛先アドレスのリストであるブラックリストが関連付けられています。ブラックリストフィルターは、ブラックリストに追加されたものを除くすべての宛先アドレスを受け入れます。

空のリストを持つホワイトリストフィルターは、デフォルトのフィルタータイプです。 プロキシクライアントは、フィルタータイプを変更したり、プロキシフィルターのアドレスを設定したりできます。

6.5 プロキシ構成メッセージ

ネットワークPDU、メッシュビーコン、プロビジョニングPDUに加えて、プロキシクライアントとプロキシサーバは、プロキシプロトコルを使用してプロキシ構成メッセージを交換できます。

プロキシ構成メッセージは、プロキシフィルターを構成するために使用されます。

プロキシ設定メッセージの形式は、表3.7で定義されているネットワークPDUと同じです。

CTLフィールドは1に設定されます。

TTLフィールドは0に設定されます。

DSTフィールドは、割り当てられていないアドレスに設定されます。

TransportPDUフィールドは、表6.4に示すようにフォーマットされ、セクション3.8.6.3.1で定義されているマスターセキュリティ資格情報と、セクション3.8.5.4で定義されているプロキシナンスを使用して保護されます。

フィールド名サイズ
(octets)
説明
Opcode1メッセージオペコード
Prameters可変長メッセージパラメータ
表6.4:Proxy TransportPDUフィールドのフォーマット

Opcodeフィールドの値は、表6.5で定義されています。

Opcode説明
0x00フィルタタイプを設定するプロキシフィルタータイプを設定するために
プロキシクライアントによって送信されます。
0x01フィルタにアドレスを追加するプロキシフィルターリストにアドレスを
追加するためにプロキシクライアントによって
送信されます。
0x02フィルタからアドレスを削除するプロキシフィルターリストからアドレスを
削除するためにプロキシクライアントによって
送信されます。
0x03フィルタステータスプロキシフィルタリストのステータスを報告するための
プロキシサーバからプロキシクライアントへの確認応答。
0x04 – 0xFFRFU将来の使用のために予約済み
表6.5:プロキシ構成メッセージのオペコード

Parametersフィールドは各オペコードに固有であり、次のサブセクションで定義されています。

6.5.1 フィルタータイプの設定

プロキシクライアントは、Set Filter Typeメッセージを送信して、プロキシフィルタタイプを変更し、プロキシフィルタリストをクリアすることができます。

このメッセージのパラメータは、表6.6で定義されています。

フィールドサイズ
(octets)
説明
FilterType1プロキシフィルタータイプ。
表6.6:Set Filter Typeメッセージのフォーマット

FilterTypeフィールドの値は、表6.7で定義されています。

説明
0x00ホワイトリストフィルター
0x01ブラックリストフィルター
0x02 – 0xFF禁止
表6.7:FilterType値

6.5.2 フィルターへのアドレスの追加

Add Addresses to Filterメッセージは、プロキシクライアントによって送信され、宛先アドレスをプロキシフィルターリストに追加します。

このメッセージのパラメータは、表6.8で定義されています。

フィールドサイズ
(octets)
説明
AddressArray2 * Nアドレスのリスト。
Nはこのメッセージ内のアドレスの数です。
表6.8:Add Addresses to Filterメッセージのフォーマット

AddressArrayフィールドには、プロキシフィルターリストに追加される一連のアドレスが含まれています。 ユニキャストアドレス、仮想アドレス、およびグループアドレスの任意の組み合わせを含めることができます。

注:AddressArrayの各アドレスは16ビット値であるため、ラベルUUIDではなく16ビットの仮想アドレスが使用されます。

6.5.3 フィルターからアドレスを削除

Remove Addresses from Filterメッセージは、プロキシクライアントによって送信され、プロキシフィルターリストから宛先アドレスを削除します。

このメッセージのパラメータは、表6.9で定義されています。

フィールドサイズ
(octets)
説明
AddressArray2 * Nアドレスのリスト。
Nはこのメッセージ内のアドレスの数です。
表6.9:Remove Addresses from Filterメッセージのフォーマット

AddressArrayフィールドには、プロキシフィルターリストから削除される一連のアドレスが含まれています。 ユニキャストアドレス、仮想アドレス、またはグループアドレスの任意の組み合わせを含めることができます。

注:AddressArrayの各アドレスは16ビット値であるため、ラベルUUIDではなく16ビットの仮想アドレスが使用されます。

6.5.4 フィルターステータス

Filter Statusメッセージは、プロキシフィルタのステータスを報告するためにプロキシサーバによって送信されます。

このメッセージのパラメータは、表6.10で定義されています。

フィールドサイズ
(octets)
説明
FilterType1ホワイトリストまたはブラックリスト。
ListSize2プロキシフィルターリスト内のアドレスの数。
表6.10:Filter Statusメッセージのフォーマット

FilterTypeフィールドの値は、表6.7で定義されています。

ListSizeフィールドには、プロキシフィルターリスト内のアドレスの数が含まれます。

6.6 プロキシサーバの動作

プロキシクライアントがプロキシサーバに接続すると、新しいベアラのインスタンスがネットワークインターフェイスを介してネットワーク層に接続されます(セクション3.4.5を参照)。

接続時に、プロキシサーバはプロキシフィルターをホワイトリストフィルターとして初期化し、ホワイトリストは空になります。

プロキシフィルターがホワイトリストフィルターの場合、プロキシクライアントから有効なメッシュメッセージを受信すると、プロキシサーバはメッセージのSRCフィールドに含まれるユニキャストアドレスをホワイトリストに追加します。

プロキシフィルターがブラックリストフィルターの場合、プロキシクライアントから有効なメッシュメッセージを受信すると、プロキシサーバはメッセージのSRCフィールドに含まれているユニキャストアドレスをブラックリストから削除します。

接続時に、プロキシサーバは既知のサブネットごとにセキュアネットワークビーコンをプロキシクライアントに送信します。

IV IndexフィールドまたはFlagsフィールドの新しい値でセキュアネットワークビーコンを正常に処理すると、プロキシサーバはこのセキュアネットワークビーコンをプロキシクライアントに送信します。

プロキシサーバが新しいサブネットに追加されると、プロキシサーバはそのサブネットのセキュアネットワークビーコンをプロキシクライアントに送信します。

プロキシクライアントからセキュアネットワークビーコンを受信すると、プロキシサーバはセクション3.9.3.1で定義されているようにそれを処理するものとします。

proxy configurationメッセージを送信する場合、プロキシサーバはSRCフィールドをそのプライマリエレメントのユニキャストアドレスに設定し、SEQフィールドはそのプライマリエレメントのシーケンス番号を使用するものとします。

プロキシサーバは、Set Filter Typeメッセージを受信すると、メッセージパラメータで要求されたとおりにプロキシフィルタタイプを設定し、プロキシフィルタリストをクリアします。その後、プロキシサーバはフィルターステータスメッセージで応答します。

プロキシサーバーがAdd Addresses to Filterメッセージを受信した場合、プロキシサーバはこれらのアドレスをプロキシフィルターリストに追加し、フィルターステータスメッセージで応答します。メッセージに含まれる1つ以上のアドレスがすでにリストにある場合、プロキシサーバはこれらのアドレスを追加しません。プロキシサーバがプロキシフィルターリストのスペースを使い果たした場合、プロキシサーバはこれらのアドレスを追加しません。AddressArrayフィールドに割り当てられていないアドレスが含まれている場合、プロキシサーバはそのアドレスを無視します。

プロキシサーバーがRemove Addresses to Filterメッセージを受信すると、プロキシサーバはこれらのアドレスをプロキシフィルターリストから削除し、フィルターステータスメッセージで応答します。メッセージに含まれる1つ以上のアドレスがリストになかった場合、プロキシサーバーはこれらのアドレスを無視します。AddressArrayフィールドに割り当てられていないアドレスが含まれている場合、プロキシサーバーはそのアドレスを無視します。

SARフィールドの予期しない値を持つメッセージを受信すると、プロキシサーバは切断します。

Message Typeフィールドが将来の使用のために予約されている値に設定されたメッセージを受信すると、プロキシサーバはこのメッセージを無視します。

SAR転送のタイムアウトは20秒です。タイムアウトが経過すると、プロキシサーバは切断されます。

6.7 プロキシクライアントの動作

プロキシクライアントは、proxy configurationメッセージを送信してプロキシフィルタを設定できます。

proxy configurationメッセージを送信する場合、プロキシクライアントはSRCフィールドをそのプライマリエレメントのユニキャストアドレスに設定し、SEQフィールドはそのプライマリエレメントのシーケンス番号を使用するものとします。プロキシクライアントは、フィルタステータスメッセージを受信したときにプロキシフィルタリストの状態を判断できます。

SARフィールドの予期しない値を持つメッセージを受信すると、プロキシクライアントは切断します。

Message Typeフィールドが将来の使用のために予約されている値に設定されたメッセージを受信すると、プロキシクライアントはこのメッセージを無視するものとします。

SAR転送のタイムアウトは20秒です。 タイムアウトが経過すると、プロキシクライアントは切断されます。

6.8 MSCの例

6.8.1 ホワイトリストフィルタリング

図6.2に示すMSCは、プロキシクライアントによって構成されたプロキシサーバによって実行されるホワイトリストフィルタリングを示しています。

図6.2:ホワイトリストフィルタリング

6.8.2 ブラックリストフィルタリング

図6.3に示すMSCは、プロキシクライアントによって構成されたプロキシサーバによって実行されるブラックリストフィルタリングを示しています。

図6.3:ブラックリストフィルタリング
タイトルとURLをコピーしました