MAC 地址数据类型

类型为 mac_addr_t 的变量用于保存 MAC 地址的值。 MAC 地址数据类型是抽象数据类型,不能将其直接用于标准 C 一元运算符或二进制运算符。

仅类型为 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. 

mac_addr_t 类型的变量不支持 signed、unsigned、register、static、thread 和 kernel 限定符。

分配操作

赋值 (=) 运算符允许将一个 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 地址类型变量

可在 Vue 的 printf() 函数中使用“%p”格式说明符显示 mac_addr_t 类型变量。 可使用 print() 函数显示将 mac_addr_t 类型变量用作键和/或值的关联数组。
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 类型变量配合使用。