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 类型变量配合使用。