.\" $NetBSD: ethersubr.9,v 1.16 2005/12/26 19:48:12 perry Exp $ .\" .\" Copyright (c) 1997 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This code is derived from software contributed to The NetBSD Foundation .\" by Ignatios Souvatzis. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the NetBSD .\" Foundation, Inc. and its contributors. .\" 4. Neither the name of The NetBSD Foundation nor the names of its .\" contributors may be used to endorse or promote products derived .\" from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" .Dd March 3, 1997 .Dt ETHERSUBR 9 .Os .Sh NAME .Nm ethersubr , .Nm ether_ifattach , .Nm ether_addmulti , .Nm ether_delmulti , .Nm ETHER_FIRST_MULTI , .Nm ETHER_NEXT_MULTI , .Nm ETHER_IS_MULTICAST , .Nm fddi_ifattach , .Nm fddi_addmulti , .Nm fddi_delmulti .Nd Ethernet and FDDI driver support functions and macros .Sh SYNOPSIS .In net/if_ether.h .Ft void .Fn ether_ifattach "struct ifnet *ifp" "uint8_t *lla" .Ft int .Fn ether_addmulti "struct ifrequest *ifr" "struct ethercom *ec" .Ft int .Fn ether_delmulti "struct ifrequest *ifr" "struct ethercom *ec" .Ft void .Fn ETHER_FIRST_MULTI "struct ether_multistep step" "struct ethercom *ec" "struct ether_multi *enm" .Ft void .Fn ETHER_NEXT_MULTI "struct ether_multistep step" "struct ether_multi *enm" .Ft int .Fn ETHER_IS_MULTICAST "uint8_t *addr" .In net/if_fddi.h .Ft void .Fn fddi_ifattach "struct ifnet *ifp" "uint8_t *lla" .Ft int .Fn fddi_addmulti "struct ifrequest *ifr" "struct ethercom *ec" .Ft int .Fn fddi_delmulti "struct ifrequest *ifr" "struct ethercom *ec" .Sh DESCRIPTION The .Nm functions provide the interface between the .Nm module and the network drivers which need Ethernet support. Such drivers must request the .Ar ether attribute in their .Ar files declaration and call the appropriate functions as specified below. .Pp 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. .Pp Note that you also need the .Xr arp 9 stuff to support IPv4 on your hardware. .Bl -tag -width compact .It Fn ether_ifattach Perform the device-independent, but Ethernet-specific initialization of the interface pointed to by .Fa ifp . .Pp 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 .Fa lla there. .Pp You must call this function from the driver's attach function. .It Fn fddi_ifattach corresponding function for FDDI devices. .It Fn ether_addmulti .It Fn ether_delmulti Add .Pq Fn ether_addmulti or delete .Pq Fn ether_delmulti the address described by the .Fa ifr pointer to the Ethernet multicast list belonging to .Fa ec . .Pp These functions must be called from the driver's ioctl function to handle .Dv SIOCADDMULTI and .Dv SIOCDELMULTI requests. If they return .Er ENETRESET , the hardware multicast filter must be reinitialized. .Pp These functions accept .Dv AF_UNSPEC addresses, which are interpreted as Ethernet addresses, or .Dv AF_INET addresses. In the latter case, .Dv INADDR_ANY is mapped to a range describing all the Ethernet address space reserved for IPv4 multicast addresses. .Pp .Fn ether_addmulti returns .Er EAFNOSUPPORT if an unsupported address family is specified, .Er EINVAL if a non-multicast address is specified, or .Er ENETRESET if the multicast list really changed and the driver should synchronize its hardware filter with it. .Pp .Fn ether_delmulti returns, in addition to the above errors, .Er ENXIO if the specified address can't be found in the list of multicast addresses. .It Fn fddi_addmulti .It Fn fddi_delmulti corresponding functions for FDDI devices. .It Fn ETHER_NEXT_MULTI is a macro to step through all of the ether_multi records, one at a time. The current position is remembered in .Fa step , which the caller must provide. .It Fn ETHER_FIRST_MULTI must be called to initialize .Fa step and get the first record. Both macros return a .Dv NULL .Fa enm when there are no remaining records. .It Fn ETHER_IS_MULTICAST returns 1, if .Fa addr points to an Ethernet/FDDI multicast (or broadcast) address. Implemented as a macro. .El .Sh SEE ALSO .Xr arp 9 .Sh AUTHORS UCB CSRG (original implementation) .br Ignatios Souvatzis (support for new ARP system) .Sh CODE REFERENCES Ethernet support functions are declared in .Aq Pa net/if_ether.h and defined (if not implemented as macro) in .Pa /usr/src/sys/net/if_ethersubr.c . .Pp FDDI support functions are declared in .Aq Pa net/if_fddi.h and defined (if not implemented as macro) in .Pa /usr/src/sys/net/if_fddisubr.c . .Sh HISTORY Rewritten to attach to the new ARP system in .Nx 1.3 .