MAC address management. More...
MAC address management.
An EUI provider provides an Extended Unique Identifier, that is a hardware address for a network device.
A board may have an EEPROM with a unique ID (e.g. AT24MAC unique ID chip) that is used to store an address, a unique address is stored in a config area of the board's flash during production, etc.
The EUI provider is connected to a network device that will then use this address.
If there is only one EUI provider on the board, the configuration is done through three defines:
EUIxx_PROVIDER_TYPE
to specify which device the EUI should be used for. That is to prevent it from matching to 'virtual' devices like ethos or SLIP. It is of course also possible to provide a fixed address for 'virtual' devices this way.EUIxx_PROVIDER_INDEX
to specify which interface the EUI should be used for if there are multiple interfaces.EUIxx_PROVIDER_FUNC
the function that provides the EUI. It can use an optional EUIxx_PROVIDER_ARG
argument that is passed unmodified.If more than one EUI provider is present on the board, an array of euiXX_conf_t
has to be provided to EUI64_PROVIDER_PARAMS
:
This also assumes a _board_get_eui()
function to provide the EUI. For example, it could read an EUI from a config region on the flash that is provided with the memory-mapped addresses BOARD_ADDR_SUBGHZ
and BOARD_ADDR_24GHZ
. The function would then do
While it is possible to match EUIs with any netdev in a first come, first serve fashion (NETDEV_ANY
, NETDEV_INDEX_ANY
) it is recommended to fix the EUI providers to a device and interface to avoid them being used for 'virtual' interfaces.
Fixed addresses are only guaranteed if the network devices are also fixed. E.g. if you usually have two netdevs and disable the first one at compile-time the second interface will now use the first slot / index and therefore also use the EUI provider that was previously used by interface in the first slot.
Files | |
file | eui_provider.h |
EUI-48 and EUI-64 address provider. | |
file | eui48_provider_params.h |
EUI-48 address provider default values. | |
file | eui64_provider_params.h |
EUI-64 address provider default values. | |
Data Structures | |
struct | eui48_conf_t |
Structure to hold providers for EUI-48 addresses. More... | |
struct | eui64_conf_t |
Structure to hold providers for EUI-64 addresses. More... | |
Macros | |
#define | NETDEV_INDEX_ANY (0xFF) |
Will match any device index. | |
Typedefs | |
typedef int(* | netdev_get_eui48_cb_t) (const void *arg, eui48_t *addr) |
Function for providing a EUI-48 to a device. More... | |
typedef int(* | netdev_get_eui64_cb_t) (const void *arg, eui64_t *addr) |
Function for providing a EUI-64 to a device. More... | |
Functions | |
void | netdev_eui48_get (netdev_t *netdev, eui48_t *addr) |
Generates an EUI-48 address for the netdev interface. More... | |
void | netdev_eui64_get (netdev_t *netdev, eui64_t *addr) |
Generates an EUI-64 address for the netdev interface. More... | |
static void | eui_short_from_eui64 (eui64_t *addr_long, network_uint16_t *addr_short) |
Get a short unicast address from an EUI-64. More... | |
typedef int(* netdev_get_eui48_cb_t) (const void *arg, eui48_t *addr) |
Function for providing a EUI-48 to a device.
[in] | arg | Optional argument provided by eui48_conf_t |
[out] | addr | Destination pointer for the EUI-48 address |
Definition at line 121 of file eui_provider.h.
typedef int(* netdev_get_eui64_cb_t) (const void *arg, eui64_t *addr) |
Function for providing a EUI-64 to a device.
[in] | arg | Optional argument provided by eui64_conf_t |
[out] | addr | Destination pointer for the EUI-64 address |
Definition at line 133 of file eui_provider.h.
|
inlinestatic |
Get a short unicast address from an EUI-64.
The resulting address is built from the provided long address. The last two bytes of the long address will be used as the short address with the first bit cleared.
[in] | addr_long | the address to base the short address on |
[out] | addr_short | memory location to copy the address into. |
Definition at line 195 of file eui_provider.h.
Generates an EUI-48 address for the netdev interface.
[in] | netdev | The network device for which the address is generated. |
[out] | addr | The generated EUI-48 address |
Generates an EUI-64 address for the netdev interface.
[in] | netdev | The network device for which the address is generated. |
[out] | addr | The generated EUI-64 address |