/* I/G bit: individual (unicast)/group (broadcast/multicast). */
always_inline uword
-ethernet_address_cast (u8 * a)
+ethernet_address_cast (const u8 * a)
{
return (a[0] >> 0) & 1;
}
always_inline int
-ethernet_address_is_broadcast (u8 * a)
+ethernet_address_is_broadcast (const u8 * a)
{
return clib_mem_unaligned (a, u32) == 0xffffffff &&
clib_mem_unaligned (a + 4, u16) == 0xffff;
}
always_inline uword
-ethernet_address_is_locally_administered (u8 * a)
+ethernet_address_is_locally_administered (const u8 * a)
{
return (a[0] >> 1) & 1;
}
}
always_inline int
-eh_dst_addr_to_rx_ctype (ethernet_header_t * eh)
+eh_dst_addr_to_rx_ctype (const ethernet_header_t * eh)
{
if (PREDICT_TRUE (ethernet_address_cast (eh->dst_address) ==
ETHERNET_ADDRESS_UNICAST))
}
always_inline int
-eh_dst_addr_to_tx_ctype (ethernet_header_t * eh)
+eh_dst_addr_to_tx_ctype (const ethernet_header_t * eh)
{
if (PREDICT_TRUE (ethernet_address_cast (eh->dst_address) ==
ETHERNET_ADDRESS_UNICAST))
{
u8 *bytes = (u8 *) (&h->priority_cfi_and_id);
- bytes[0] &= 0x1f;
- bytes[0] |= (prio & 0x7) << 5;
+ bytes[0] &= 0x0f;
+ bytes[0] |= (prio & 0xf) << 4;
}
always_inline u8
{
u8 *bytes = (u8 *) (&h->priority_cfi_and_id);
- return (bytes[0] >> 5);
+ return (bytes[0] >> 4);
}
/* VLAN with ethertype first and vlan id second */
#define ETHERNET_N_PBB (1 << 24)
} ethernet_pbb_header_t;
-/* *INDENT-OFF* */
typedef CLIB_PACKED (struct
{
/* Backbone source/destination address. */
/* 3 bit priority, 1 bit DEI, 1 bit UCA, 3 bit RES and 24 bit I_SID (service identifier) */
u32 priority_dei_uca_res_sid;
}) ethernet_pbb_header_packed_t;
-/* *INDENT-ON* */
#endif /* included_ethernet_packet_h */