| ETHERSUBR(9) | Kernel Developer's Manual | ETHERSUBR(9) |
ethersubr, ether_ifattach,
ether_addmulti,
ether_delmulti,
ETHER_FIRST_MULTI,
ETHER_NEXT_MULTI,
ETHER_IS_MULTICAST —
#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);
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)<net/if_ether.h> and defined
(if not implemented as macro) in
sys/net/if_ethersubr.c.
Ignatios Souvatzis (support for new ARP system)
| January 19, 2020 | NetBSD 10.0 |