Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
rte_ether.h(3)			      DPDK			  rte_ether.h(3)

NAME
     rte_ether.h

SYNOPSIS
     #include <assert.h>
     #include <stdalign.h>
     #include <stdint.h>
     #include <stdio.h>
     #include <rte_random.h>
     #include <rte_mbuf.h>
     #include <rte_byteorder.h>

   Data Structures
     struct rte_ether_hdr
     struct rte_vlan_hdr

   Macros
     #define RTE_ETHER_ADDR_LEN   6
     #define RTE_ETHER_TYPE_LEN   2
     #define RTE_ETHER_CRC_LEN	 4
     #define RTE_ETHER_HDR_LEN
     #define RTE_ETHER_MIN_LEN	 64
     #define RTE_ETHER_MAX_LEN	 1518
     #define RTE_ETHER_MTU
     #define RTE_VLAN_HLEN   4
     #define RTE_ETHER_MAX_VLAN_FRAME_LEN    (RTE_ETHER_MAX_LEN + RTE_VLAN_HLEN)
     #define RTE_ETHER_MAX_JUMBO_FRAME_LEN	  0x3F00
     #define RTE_ETHER_MAX_VLAN_ID   4095
     #define RTE_ETHER_MIN_MTU	 68
     #define RTE_ETHER_LOCAL_ADMIN_ADDR   0x02
     #define RTE_ETHER_GROUP_ADDR   0x01
     #define RTE_ETHER_ADDR_PRT_FMT   '%02X:%02X:%02X:%02X:%02X:%02X'
     #define RTE_ETHER_ADDR_BYTES(mac_addrs)
     #define RTE_ETHER_TYPE_IPV4   0x0800
     #define RTE_ETHER_TYPE_IPV6   0x86DD
     #define RTE_ETHER_TYPE_ARP   0x0806
     #define RTE_ETHER_TYPE_RARP   0x8035
     #define RTE_ETHER_TYPE_VLAN   0x8100
     #define RTE_ETHER_TYPE_QINQ   0x88A8
     #define RTE_ETHER_TYPE_QINQ1   0x9100
     #define RTE_ETHER_TYPE_QINQ2   0x9200
     #define RTE_ETHER_TYPE_QINQ3   0x9300
     #define RTE_ETHER_TYPE_PPPOE_DISCOVERY   0x8863
     #define RTE_ETHER_TYPE_PPPOE_SESSION   0x8864
     #define RTE_ETHER_TYPE_ETAG   0x893F
     #define RTE_ETHER_TYPE_1588   0x88F7
     #define RTE_ETHER_TYPE_SLOW   0x8809
     #define RTE_ETHER_TYPE_TEB   0x6558
     #define RTE_ETHER_TYPE_LLDP   0x88CC
     #define RTE_ETHER_TYPE_MPLS   0x8847
     #define RTE_ETHER_TYPE_MPLSM   0x8848
     #define RTE_ETHER_TYPE_ECPRI   0xAEFE

   Functions
     struct __rte_aligned (2) rte_ether_addr
     static  int rte_is_same_ether_addr (const struct rte_ether_addr *ea1, const
	 struct rte_ether_addr *ea2)
     static int rte_is_zero_ether_addr (const struct rte_ether_addr *ea)
     static int rte_is_unicast_ether_addr (const struct rte_ether_addr *ea)
     static int rte_is_multicast_ether_addr (const struct rte_ether_addr *ea)
     static int rte_is_broadcast_ether_addr (const struct rte_ether_addr *ea)
     static int rte_is_universal_ether_addr (const struct rte_ether_addr *ea)
     static int rte_is_local_admin_ether_addr (const struct rte_ether_addr *ea)
     static int rte_is_valid_assigned_ether_addr  (const  struct  rte_ether_addr
	 *ea)
     void rte_eth_random_addr (uint8_t *addr)
     static  void  rte_ether_addr_copy	(const struct rte_ether_addr *__restrict
	 ea_from, struct rte_ether_addr *__restrict ea_to)
     void  rte_ether_format_addr  (char  *buf,	uint16_t  size,   const   struct
	 rte_ether_addr *eth_addr)
     int   rte_ether_unformat_addr   (const  char  *str,  struct  rte_ether_addr
	 *eth_addr)
     static int rte_vlan_strip (struct rte_mbuf *m)
     static int rte_vlan_insert (struct rte_mbuf **m)

Detailed Description
     Ethernet Helpers in RTE

     Definition in file rte_ether.h.

Macro Definition Documentation
   #define RTE_ETHER_ADDR_LEN	6
     Length of Ethernet address.

     Definition at line 27 of file rte_ether.h.

   #define RTE_ETHER_TYPE_LEN	2
     Length of Ethernet type field.

     Definition at line 28 of file rte_ether.h.

   #define RTE_ETHER_CRC_LEN   4
     Length of Ethernet CRC.

     Definition at line 29 of file rte_ether.h.

   #define RTE_ETHER_HDR_LEN
     Value:.PP
	 (RTE_ETHER_ADDR_LEN * 2 + \
	     RTE_ETHER_TYPE_LEN)
     Length of Ethernet header.

     Definition at line 32 of file rte_ether.h.

   #define RTE_ETHER_MIN_LEN   64
     Minimum frame len, including CRC.

     Definition at line 33 of file rte_ether.h.

   #define RTE_ETHER_MAX_LEN   1518
     Maximum frame len, including CRC.

     Definition at line 34 of file rte_ether.h.

   #define RTE_ETHER_MTU
     Value:.PP
	 (RTE_ETHER_MAX_LEN - RTE_ETHER_HDR_LEN - \
	     RTE_ETHER_CRC_LEN)
     Ethernet MTU.

     Definition at line 37 of file rte_ether.h.

   #define RTE_VLAN_HLEN   4
     VLAN (IEEE 802.1Q) header length.

     Definition at line 39 of file rte_ether.h.

   #define RTE_ETHER_MAX_VLAN_FRAME_LEN    (RTE_ETHER_MAX_LEN + RTE_VLAN_HLEN)
     Maximum VLAN frame length (excluding QinQ), including CRC.

     Definition at line 41 of file rte_ether.h.

   #define RTE_ETHER_MAX_JUMBO_FRAME_LEN	0x3F00
     Maximum Jumbo frame length, including CRC.

     Definition at line 45 of file rte_ether.h.

   #define RTE_ETHER_MAX_VLAN_ID   4095
     Maximum VLAN ID.

     Definition at line 47 of file rte_ether.h.

   #define RTE_ETHER_MIN_MTU   68
     Minimum MTU for IPv4 packets, see RFC 791.

     Definition at line 49 of file rte_ether.h.

   #define RTE_ETHER_LOCAL_ADMIN_ADDR	0x02
     Locally assigned Eth. address.

     Definition at line 85 of file rte_ether.h.

   #define RTE_ETHER_GROUP_ADDR   0x01
     Multicast or broadcast Eth. address.

     Definition at line 86 of file rte_ether.h.

   #define RTE_ETHER_ADDR_PRT_FMT   '%02X:%02X:%02X:%02X:%02X:%02X'
     Macro to print six-bytes of MAC address in hex format

     Definition at line 248 of file rte_ether.h.

   #define RTE_ETHER_ADDR_BYTES(mac_addrs)
     Value:.PP
			  ((mac_addrs)->addr_bytes[0]), \
			  ((mac_addrs)->addr_bytes[1]), \
			  ((mac_addrs)->addr_bytes[2]), \
			  ((mac_addrs)->addr_bytes[3]), \
			  ((mac_addrs)->addr_bytes[4]), \
			  ((mac_addrs)->addr_bytes[5])
     Macro to extract the MAC address bytes from rte_ether_addr struct

     Definition at line 252 of file rte_ether.h.

   #define RTE_ETHER_TYPE_IPV4	 0x0800
     IPv4 Protocol.

     Definition at line 329 of file rte_ether.h.

   #define RTE_ETHER_TYPE_IPV6	 0x86DD
     IPv6 Protocol.

     Definition at line 330 of file rte_ether.h.

   #define RTE_ETHER_TYPE_ARP	0x0806
     Arp Protocol.

     Definition at line 331 of file rte_ether.h.

   #define RTE_ETHER_TYPE_RARP	 0x8035
     Reverse Arp Protocol.

     Definition at line 332 of file rte_ether.h.

   #define RTE_ETHER_TYPE_VLAN	 0x8100
     IEEE 802.1Q VLAN tagging.

     Definition at line 333 of file rte_ether.h.

   #define RTE_ETHER_TYPE_QINQ	 0x88A8
     IEEE 802.1ad QinQ tagging.

     Definition at line 334 of file rte_ether.h.

   #define RTE_ETHER_TYPE_QINQ1   0x9100
     Deprecated QinQ VLAN.

     Definition at line 335 of file rte_ether.h.

   #define RTE_ETHER_TYPE_QINQ2   0x9200
     Deprecated QinQ VLAN.

     Definition at line 336 of file rte_ether.h.

   #define RTE_ETHER_TYPE_QINQ3   0x9300
     Deprecated QinQ VLAN.

     Definition at line 337 of file rte_ether.h.

   #define RTE_ETHER_TYPE_PPPOE_DISCOVERY   0x8863
     PPPoE Discovery Stage.

     Definition at line 338 of file rte_ether.h.

   #define RTE_ETHER_TYPE_PPPOE_SESSION   0x8864
     PPPoE Session Stage.

     Definition at line 339 of file rte_ether.h.

   #define RTE_ETHER_TYPE_ETAG	 0x893F
     IEEE 802.1BR E-Tag.

     Definition at line 340 of file rte_ether.h.

   #define RTE_ETHER_TYPE_1588	 0x88F7
     IEEE 802.1AS 1588 Precise Time Protocol.

     Definition at line 342 of file rte_ether.h.

   #define RTE_ETHER_TYPE_SLOW	 0x8809
     Slow protocols (LACP and Marker).

     Definition at line 343 of file rte_ether.h.

   #define RTE_ETHER_TYPE_TEB	0x6558
     Transparent Ethernet Bridging.

     Definition at line 344 of file rte_ether.h.

   #define RTE_ETHER_TYPE_LLDP	 0x88CC
     LLDP Protocol.

     Definition at line 345 of file rte_ether.h.

   #define RTE_ETHER_TYPE_MPLS	 0x8847
     MPLS ethertype.

     Definition at line 346 of file rte_ether.h.

   #define RTE_ETHER_TYPE_MPLSM   0x8848
     MPLS multicast ethertype.

     Definition at line 347 of file rte_ether.h.

   #define RTE_ETHER_TYPE_ECPRI   0xAEFE
     eCPRI ethertype (.1Q supported).

     Definition at line 348 of file rte_ether.h.

Function Documentation
   struct __rte_aligned (2)
     Ethernet address: A universally administered address is  uniquely	assigned
     to  a  device  by its manufacturer. The first three octets (in transmission
     order) contain the Organizationally Unique Identifier (OUI). The  following
     three (MAC-48 and EUI-48) octets are assigned by that organization with the
     only  constraint  of uniqueness. A locally administered address is assigned
     to a device by a network administrator  and  does	not  contain  OUIs.  See
     http://standards.ieee.org/regauth/groupmac/tutorial.html < Addr bytes in tx
     order

     Definition at line 1 of file rte_ether.h.

   static  int	rte_is_same_ether_addr (const struct rte_ether_addr * ea1, const
     struct rte_ether_addr * ea2) [inline],  [static]
     Check if two Ethernet addresses are the same.

     Parameters
	 ea1 A pointer to the first ether_addr structure containing the ethernet
	 address.
	 ea2 A pointer to the second ether_addr structure containing the  ether-
	 net address.

     Returns
	 True (1) if the given two ethernet address are the same; False (0) oth-
	 erwise.

     Definition at line 102 of file rte_ether.h.

   static  int	rte_is_zero_ether_addr	(const	struct rte_ether_addr * ea) [in-
     line],  [static]
     Check if an Ethernet address is filled with zeros.

     Parameters
	 ea A pointer to a ether_addr structure containing the ethernet  address
	 to check.

     Returns
	 True  (1) if the given ethernet address is filled with zeros; false (0)
	 otherwise.

     Definition at line 121 of file rte_ether.h.

   static int rte_is_unicast_ether_addr (const struct rte_ether_addr * ea)  [in-
     line],  [static]
     Check if an Ethernet address is a unicast address.

     Parameters
	 ea  A pointer to a ether_addr structure containing the ethernet address
	 to check.

     Returns
	 True (1) if the given ethernet address is a unicast address; false  (0)
	 otherwise.

     Definition at line 138 of file rte_ether.h.

   static  int	rte_is_multicast_ether_addr  (const  struct rte_ether_addr * ea)
     [inline],	[static]
     Check if an Ethernet address is a multicast address.

     Parameters
	 ea A pointer to a ether_addr structure containing the ethernet  address
	 to check.

     Returns
	 True  (1)  if	the given ethernet address is a multicast address; false
	 (0) otherwise.

     Definition at line 153 of file rte_ether.h.

   static int rte_is_broadcast_ether_addr (const  struct  rte_ether_addr  *  ea)
     [inline],	[static]
     Check if an Ethernet address is a broadcast address.

     Parameters
	 ea  A pointer to a ether_addr structure containing the ethernet address
	 to check.

     Returns
	 True (1) if the given ethernet address is a  broadcast  address;  false
	 (0) otherwise.

     Definition at line 168 of file rte_ether.h.

   static  int	rte_is_universal_ether_addr  (const  struct rte_ether_addr * ea)
     [inline],	[static]
     Check if an Ethernet address is a universally assigned address.

     Parameters
	 ea A pointer to a ether_addr structure containing the ethernet  address
	 to check.

     Returns
	 True  (1)  if	the given ethernet address is a universally assigned ad-
	 dress; false (0) otherwise.

     Definition at line 185 of file rte_ether.h.

   static int rte_is_local_admin_ether_addr (const struct rte_ether_addr  *  ea)
     [inline],	[static]
     Check if an Ethernet address is a locally assigned address.

     Parameters
	 ea  A pointer to a ether_addr structure containing the ethernet address
	 to check.

     Returns
	 True (1) if the given ethernet address is a locally  assigned	address;
	 false (0) otherwise.

     Definition at line 200 of file rte_ether.h.

   static  int	rte_is_valid_assigned_ether_addr  (const struct rte_ether_addr *
     ea) [inline],  [static]
     Check if an Ethernet address is a valid address. Checks that the address is
     a unicast address and is not filled with zeros.

     Parameters
	 ea A pointer to a ether_addr structure containing the ethernet  address
	 to check.

     Returns
	 True (1) if the given ethernet address is valid; false (0) otherwise.

     Definition at line 216 of file rte_ether.h.

   void rte_eth_random_addr (uint8_t * addr)
     Generate  a  random  Ethernet  address that is locally administered and not
     multicast.

     Parameters
	 addr A pointer to Ethernet address.

   static void	rte_ether_addr_copy  (const  struct  rte_ether_addr  *__restrict
     ea_from, struct rte_ether_addr *__restrict ea_to) [inline],  [static]
     Copy an Ethernet address.

     Parameters
	 ea_from  A  pointer  to a ether_addr structure holding the Ethernet ad-
	 dress to copy.
	 ea_to A pointer to a ether_addr structure where to  copy  the	Ethernet
	 address.

     Definition at line 239 of file rte_ether.h.

   void   rte_ether_format_addr   (char  *  buf,  uint16_t  size,  const  struct
     rte_ether_addr * eth_addr)
     Format 48bits Ethernet address in pattern xx:xx:xx:xx:xx:xx.

     Parameters
	 buf A pointer to buffer contains the formatted MAC address.
	 size The format buffer size.
	 eth_addr A pointer to a ether_addr structure.

   int rte_ether_unformat_addr	(const	char  *  str,  struct  rte_ether_addr  *
     eth_addr)
     Convert string with Ethernet address to an ether_addr.

     Parameters
	 str A pointer to buffer contains the formatted MAC address. Accepts ei-
	 ther byte or word format separated by colon, hyphen or period.

     The example formats are: XX:XX:XX:XX:XX:XX - Canonical form XX-XX-XX-XX-XX-
     XX  -  Windows and IEEE 802 XXXX.XXXX.XXXX - Cisco where XX is a hex digit:
     0-9, a-f, or A-F. In the byte format, leading zeros are optional.

     Parameters
	 eth_addr A pointer to a ether_addr structure.

     Returns
	 0 if successful -1 and sets rte_errno if invalid string

   static int rte_vlan_strip (struct rte_mbuf * m) [inline],  [static]
     Extract VLAN tag information into mbuf

     Software version of VLAN stripping

     Parameters
	 m The packet mbuf.

     Returns

	 * 0: Success

	 * 1: not a vlan packet

     Definition at line 361 of file rte_ether.h.

   static int rte_vlan_insert (struct rte_mbuf ** m) [inline],	[static]
     Insert VLAN tag into mbuf.

     Software version of VLAN unstripping

     Parameters
	 m The packet mbuf.

     Returns

	 * 0: On success -EPERM: mbuf is  shared  overwriting  would  be  unsafe
	   -ENOSPC: not enough headroom in mbuf

     Definition at line 393 of file rte_ether.h.

Author
     Generated automatically by Doxygen for DPDK from the source code.

Version 25.11.0 		 Thu Aug 27 2026		  rte_ether.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=rte_is_local_admin_ether_addr&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help