| ETHERSUBR(9) | 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 —
#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);
#include
    <net/if_fddi.h>
void
  
  fddi_ifattach(struct
    ifnet *ifp, uint8_t
    *lla);
int
  
  fddi_addmulti(const
    struct sockaddr *sa,
    struct ethercom *ec);
int
  
  fddi_delmulti(const
    struct sockaddr *sa,
    struct ethercom *ec);
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.
FDDI drivers must request the "fddi" attribute in their "files" declaration 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 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.
fddi_ifattach(ifp,
    lla)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.
fddi_addmulti(sa,
    ec)fddi_delmulti(sa,
    ec)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.
FDDI support functions are declared in
    <net/if_fddi.h> and defined
    (if not implemented as macro) in
    sys/net/if_fddisubr.c.
Ignatios Souvatzis (support for new ARP system)
| December 28, 2016 | NetBSD 9.3 |