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
Do not use NETDEV_ANY
as EUI device type. Otherwise if you have two interfaces both will match the same EUI.
It is however possible to use NETDEV_INDEX_ANY
if you have multiple interfaces of the same type and your EUI provider function takes the index into account (or returns error if the index is out of bounds with the available ids).
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... | |
Typedefs | |
typedef int(* | netdev_get_eui48_cb_t) (uint8_t index, eui48_t *addr) |
Function for providing a EUI-48 to a device. | |
typedef int(* | netdev_get_eui64_cb_t) (uint8_t index, eui64_t *addr) |
Function for providing a EUI-64 to a device. | |
Functions | |
void | netdev_eui48_get (netdev_t *netdev, eui48_t *addr) |
Generates an EUI-48 address for the netdev interface. | |
void | netdev_eui64_get (netdev_t *netdev, eui64_t *addr) |
Generates an EUI-64 address for the netdev interface. | |
static void | eui_short_from_eui64 (eui64_t *addr_long, network_uint16_t *addr_short) |
Get a short unicast address from an EUI-64. | |
typedef int(* netdev_get_eui48_cb_t) (uint8_t index, eui48_t *addr) |
Function for providing a EUI-48 to a device.
[in] | index | index of the netdev |
[out] | addr | Destination pointer for the EUI-48 address |
Definition at line 119 of file eui_provider.h.
typedef int(* netdev_get_eui64_cb_t) (uint8_t index, eui64_t *addr) |
Function for providing a EUI-64 to a device.
[in] | index | index of the netdev |
[out] | addr | Destination pointer for the EUI-64 address |
Definition at line 131 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 191 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 |