| ETHERSUBR(9) | Kernel Developer's Manual | ETHERSUBR(9) |
ethersubr,
ether_ifattach,
ether_addmulti,
ether_delmulti,
ETHER_FIRST_MULTI,
ETHER_NEXT_MULTI,
ETHER_IS_MULTICAST —
Ethernet driver support functions and macros
#include
<net/if_ether.h>
void
ether_ifattach(struct
ifnet *ifp, uint8_t
*lla);
int
ether_addmulti(const
struct sockaddr *sa,
struct ethercom *ec);
int
ether_delmulti(const
struct sockaddr *sa,
struct ethercom *ec);
void
ETHER_FIRST_MULTI(struct
ether_multistep step,
struct ethercom *ec,
struct ether_multi
*enm);
void
ETHER_NEXT_MULTI(struct
ether_multistep step,
struct ether_multi
*enm);
int
ETHER_IS_MULTICAST(uint8_t
*addr);
The ethersubr functions provide the
interface between the ethersubr module and the
network drivers which need Ethernet support. Such drivers must request the
ether attribute in their files
declaration and call the appropriate functions as specified below.
Note that you also need the arp(9) stuff to support IPv4 on your hardware.
ether_ifattach(ifp,
lla)Among other duties, this function creates a
record for the link level address in the interface's address list and
records the link level address pointed to by lla
there. Drivers can initialize the link level address by themselves by
calling the function with lla as
NULL and calling
if_set_sadl().
This function must be called from the driver's attach function.
ether_addmulti(sa,
ec)ether_delmulti(sa,
ec)ether_addmulti()) or delete
(ether_delmulti()) the address described by the
sa pointer to the Ethernet multicast list belonging
to ec.
These functions must be called from the driver's ioctl
function to handle SIOCADDMULTI and
SIOCDELMULTI requests. If these return
ENETRESET, the hardware multicast filter must be
reinitialized.
These functions accept AF_UNSPEC
addresses, which are interpreted as Ethernet addresses, or
AF_INET addresses. In the latter case,
INADDR_ANY is mapped to a range describing all
the Ethernet address space reserved for IPv4 multicast addresses.
The
ether_addmulti()
returns EAFNOSUPPORT if an unsupported address
family is specified, EINVAL if a non-multicast
address is specified, or ENETRESET if the
multicast list really changed and the driver should synchronize its
hardware filter with it.
The
ether_delmulti()
returns, in addition to the above errors, ENXIO
if the specified address can't be found in the list of multicast
addresses.
ETHER_NEXT_MULTI(step,
enm)ETHER_FIRST_MULTI(step,
ec, enm)NULL
enm when there are no remaining records.ETHER_IS_MULTICAST(addr)Ethernet support functions are declared in
<net/if_ether.h> and defined
(if not implemented as macro) in
sys/net/if_ethersubr.c.
Rewritten to attach to the new ARP system in NetBSD 1.3.
UCB CSRG (original implementation)
Ignatios Souvatzis (support for new ARP system)
| January 19, 2020 | NetBSD 11.0 |