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 型変数と一緒に使用することはできません。