Updated: 2022/Sep/29

Please read Privacy Policy. It's for your privacy.


ETHERSUBR(9)               Kernel Developer's Manual              ETHERSUBR(9)

NAME
     ethersubr, ether_ifattach, ether_addmulti, ether_delmulti,
     ETHER_FIRST_MULTI, ETHER_NEXT_MULTI, ETHER_IS_MULTICAST - Ethernet driver
     support functions and macros

SYNOPSIS
     #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);

DESCRIPTION
     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)
              Perform the device-independent, but Ethernet-specific
              initialization 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.  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)
              Add (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)
              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.

     ETHER_FIRST_MULTI(step, ec, enm)
              A macro that must be called to initialize step and get the first
              record.  Both macros return a NULL enm when there are no
              remaining records.

     ETHER_IS_MULTICAST(addr)
              A macro that returns 1, if addr points to an Ethernet/FDDI
              multicast (or broadcast) address.

CODE REFERENCES
     Ethernet support functions are declared in <net/if_ether.h> and defined
     (if not implemented as macro) in sys/net/if_ethersubr.c.

SEE ALSO
     arp(9)

HISTORY
     Rewritten to attach to the new ARP system in NetBSD 1.3.

AUTHORS
     UCB CSRG (original implementation)

     Ignatios Souvatzis (support for new ARP system)

NetBSD 10.99                   January 19, 2020                   NetBSD 10.99