ETHERSUBR(9) BSD Kernel Developer's Manual ETHERSUBR(9)
ethersubr, ether_ifattach, ether_addmulti, ether_delmulti,
ETHER_FIRST_MULTI, ETHER_NEXT_MULTI, ETHER_IS_MULTICAST, fddi_ifattach,
fddi_addmulti, fddi_delmulti -- Ethernet and FDDI driver support func-
tions and macros
ether_ifattach(struct ifnet *ifp, u_int8_t *lla);
ether_addmulti(struct ifrequest *ifr, struct ethercom *ec);
ether_delmulti(struct ifrequest *ifr, struct ethercom *ec);
ETHER_FIRST_MULTI(struct ether_multistep step, struct ethercom *ec,
struct ether_multi *enm);
ETHER_NEXT_MULTI(struct ether_multistep step, struct ether_multi *enm);
fddi_ifattach(struct ifnet *ifp, u_int8_t *lla);
fddi_addmulti(struct ifrequest *ifr, struct ethercom *ec);
fddi_delmulti(struct ifrequest *ifr, struct ethercom *ec);
The ethersubr functions provide the interface between the ethersubr mod-
ule 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.
FDDI drivers must request the "fddi" attribute in their "files" declara-
tion and call the functions tagged with "fddi_" or "FDDI_" instead, where
different. Some macros are shared.
Note that you also need the arp(9) stuff to support IPv4 on your hard-
Perform the device-independent, but Ethernet-specific initial-
ization of the interface pointed to by ifp.
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.
You must call this function from the driver's attach function.
corresponding function for FDDI devices.
Add (ether_addmulti()) or delete (ether_delmulti()) the address
described by the ifr 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 they
return ENETRESET, the hardware multicast filter must be reini-
These functions accept AF_UNSPEC addresses, which are inter-
preted as Ethernet addresses, or AF_INET addresses. In the lat-
ter case, INADDR_ANY is mapped to a range describing all the
Ethernet address space reserved for IPv4 multicast addresses.
ether_addmulti() returns EAFNOSUPPORT if an unsupported address
family is specified, EINVAL if a non-multicast address is speci-
fied, or ENETRESET if the multicast list really changed and the
driver should synchronize its hardware filter with it.
ether_delmulti() returns, in addition to the above errors, ENXIO
if the specified address can't be found in the list of multicast
corresponding functions for FDDI devices.
is a macro to step through all of the ether_multi records, one
at a time. The current position is remembered in step, which
the caller must provide.
must be called to initialize step and get the first record.
Both macros return a NULL enm when there are no remaining
returns 1, if addr points to an Ethernet/FDDI multicast (or
broadcast) address. Implemented as a macro.
UCB CSRG (original implementation)
Ignatios Souvatzis (support for new ARP system)
Ethernet support functions are declared in <net/if_ether.h> and defined
(if not implemented as macro) in /usr/src/sys/net/if_ethersubr.c.
FDDI support functions are declared in <net/if_fddi.h> and defined (if
not implemented as macro) in /usr/src/sys/net/if_fddisubr.c.
Rewritten to attach to the new ARP system in NetBSD 1.3.
BSD March 3, 1997 BSD