summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/ethersubr.9
blob: 7442859a48eea94df900dc9faea94cdb84b7e88c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
.\"	$NetBSD: ethersubr.9,v 1.28 2020/01/20 18:38:18 thorpej 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.
.\"
.\" 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 January 19, 2020
.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
.Nd Ethernet 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 "const struct sockaddr *sa" "struct ethercom *ec"
.Ft int
.Fn ether_delmulti "const struct sockaddr *sa" "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"
.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
Note that you also need the
.Xr arp 9
stuff to support IPv4 on your hardware.
.Bl -tag -width compact
.It Fn ether_ifattach "ifp" "lla"
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.
Drivers can initialize the link level address by themselves by calling
the function with
.Fa lla
as
.Dv NULL
and calling
.Fn if_set_sadl .
.Pp
This function must be called from the driver's attach function.
.It Fn ether_addmulti "sa" "ec"
.It Fn ether_delmulti "sa" "ec"
Add
.Pq Fn ether_addmulti
or delete
.Pq Fn ether_delmulti
the address described by the
.Fa sa
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 these 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
The
.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
The
.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 ETHER_NEXT_MULTI "step" "enm"
A macro to step through all of the
.Em 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 "step" "ec" "enm"
A macro that 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 "addr"
A macro that returns 1, if
.Fa addr
points to an Ethernet/FDDI multicast (or broadcast) address.
.El
.Sh CODE REFERENCES
Ethernet support functions are declared in
.In net/if_ether.h
and defined (if not implemented as macro) in
.Pa sys/net/if_ethersubr.c .
.Sh SEE ALSO
.Xr arp 9
.Sh HISTORY
Rewritten to attach to the new ARP system in
.Nx 1.3 .
.Sh AUTHORS
UCB CSRG (original implementation)
.Pp
.An Ignatios Souvatzis
(support for new ARP system)