MAC アドレス・データ型
mac_addr_t 型の変数は MAC アドレスの値を保持するために使用されます。 MAC アドレス・データ型は抽象データ型であり、標準 C の単項演算子や 2 項演算子と直接一緒には使用できません。
mac_addr_t 型のローカル変数またはグローバル変数のみがサポートされます。
この型の変数は、キーまたは値として連想配列に保管することもできます。
Vue は、MAC アドレス型変数に関して、以下の特性および演算をサポートしています。
MAC アドレス変数の宣言
mac_addr_t m1; // global variable of type
__auto mac_addr_t m2; // auto variable of type
m2 = __etherhdr->src_addr; // store source MAC address in a local variable
mac_aso[“src_mac_addr”] = __etherhdr->src_addr ; // store in an associative array.
signed、unsigned、register、static、thread、および kernel の各修飾子は、mac_addr_t 型変数ではサポートされていません。
割り当て演算
代入 (=)> 演算子では、mac_addr_t 型変数を別の mac_addr_t 型変数に割り当てることが許可されます。 この変数の元の値は上書きされます。 mac_addr_t 変数からの型キャスト、またはこの変数への型キャストは許可されません。
以下の例で、mac_addr_t m1 の内容は、m2 に割り当てられます。
mac_addr_t m1, m2; // Declares two MAC address variables.
m1 = __etherhdr->src_addr; // Get the source MAC address of the packet in m1.
m2 = m1 ; // Get the content of m1 into m2.
比較演算
mac_addr_t 変数では、等価 (==) 演算子と不等価 (! =) 演算子のみが許可されます。 等価演算子の結果は、両方に同じ MAC アドレス値が含まれる場合は True (1) であり、そうでない場合は False (0) です。
非等価演算子は、この動作を正確に補完します。 その他の比較演算子 (> =、>、<、または = <) は使用できません。
mac_addr_t 型変数に使用できます。if ( m1 == m2) // comparing two mac_addr_t type variables.
printf(“Mac addresses are equal”); else printf(“Mac addresses are not equal”);MAC アドレス型変数の表示
mac_addr_t 型変数は、Vue の printf() 関数の「%M」フォーマット指定子を使用して表示できます。 mac_addr_t 型変数をキーまたは値 (もしくはその両方) として持つ連想配列は、print() 関数を使用して表示できます。printf(“ Source MAC address=[%M]\n”, __etherhdr->src_addr);
mac_aso[“src_mac_address”] = __etherhdr->src_addr ; // Store source MAC address as value in an associative array mac_aso.
print(mac_aso);
MAC アドレス型変数の制限
- mac_addr_t 変数の配列は宣言できません。
- mac_addr_t 変数は、struct または union のメンバーとして使用できません。
- mac_addr_t 変数を指すポインターは使用できません。
- 他のいずれかの型への mac_addr_t 変数の型キャスト、または mac_addr_t 型への他のいずれかの型の型キャストは許可されません。
- 算術演算子 (+、-、*、/、++、-- など) を mac_addr_t 型変数と一緒に使用することはできません。