xref: /illumos-gate/usr/src/man/man9f/mac_hcksum_get.9f (revision 52d2369a11f8e7fbf16d9fb72f92a154cf982013)
1*52d2369aSRobert Mustacchi.\"
2*52d2369aSRobert Mustacchi.\" This file and its contents are supplied under the terms of the
3*52d2369aSRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0.
4*52d2369aSRobert Mustacchi.\" You may only use this file in accordance with the terms of version
5*52d2369aSRobert Mustacchi.\" 1.0 of the CDDL.
6*52d2369aSRobert Mustacchi.\"
7*52d2369aSRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this
8*52d2369aSRobert Mustacchi.\" source.  A copy of the CDDL is also available via the Internet at
9*52d2369aSRobert Mustacchi.\" http://www.illumos.org/license/CDDL.
10*52d2369aSRobert Mustacchi.\"
11*52d2369aSRobert Mustacchi.\"
12*52d2369aSRobert Mustacchi.\" Copyright 2016 Joyent, Inc.
13*52d2369aSRobert Mustacchi.\"
14*52d2369aSRobert Mustacchi.Dd June 01, 2016
15*52d2369aSRobert Mustacchi.Dt MAC_HCKSUM_GET 9F
16*52d2369aSRobert Mustacchi.Os
17*52d2369aSRobert Mustacchi.Sh NAME
18*52d2369aSRobert Mustacchi.Nm mac_hcksum_get ,
19*52d2369aSRobert Mustacchi.Nm mac_hcksum_set
20*52d2369aSRobert Mustacchi.Nd get and set checksum information on message blocks
21*52d2369aSRobert Mustacchi.Sh SYNOPSIS
22*52d2369aSRobert Mustacchi.In sys/mac_provider.h
23*52d2369aSRobert Mustacchi.Ft void
24*52d2369aSRobert Mustacchi.Fo mac_hcksum_get
25*52d2369aSRobert Mustacchi.Fa "mblk_t *mp"
26*52d2369aSRobert Mustacchi.Fa "uint32_t *start"
27*52d2369aSRobert Mustacchi.Fa "uint32_t *stuff"
28*52d2369aSRobert Mustacchi.Fa "uint32_t *end"
29*52d2369aSRobert Mustacchi.Fa "uint32_t *value"
30*52d2369aSRobert Mustacchi.Fa "uint32_t *flags"
31*52d2369aSRobert Mustacchi.Fc
32*52d2369aSRobert Mustacchi.Ft void
33*52d2369aSRobert Mustacchi.Fo mac_hcksum_set
34*52d2369aSRobert Mustacchi.Fa "mblk_t *mp"
35*52d2369aSRobert Mustacchi.Fa "uint32_t start"
36*52d2369aSRobert Mustacchi.Fa "uint32_t stuff"
37*52d2369aSRobert Mustacchi.Fa "uint32_t end"
38*52d2369aSRobert Mustacchi.Fa "uint32_t value"
39*52d2369aSRobert Mustacchi.Fa "uint32_t flags"
40*52d2369aSRobert Mustacchi.Fc
41*52d2369aSRobert Mustacchi.Sh INTERFACE LEVEL
42*52d2369aSRobert Mustacchiillumos DDI specific
43*52d2369aSRobert Mustacchi.Sh PARAMETERS
44*52d2369aSRobert Mustacchi.Bl -tag -width Fa
45*52d2369aSRobert Mustacchi.It Fa mp
46*52d2369aSRobert MustacchiA pointer to a
47*52d2369aSRobert Mustacchi.Xr mblk 9S
48*52d2369aSRobert Mustacchistructure that contains a frame.
49*52d2369aSRobert Mustacchi.It Fa start
50*52d2369aSRobert MustacchiThe value or a pointer to it that contains the offset from the L3
51*52d2369aSRobert Mustacchiheader, generally IP, of the first byte that's covered by the checksum.
52*52d2369aSRobert Mustacchi.It Fa stuff
53*52d2369aSRobert MustacchiThe value or a pointer to it that contains the offset from the L3 header
54*52d2369aSRobert Mustacchiof where the L4 checksum is. For example, if using IPv4 and TCP, this
55*52d2369aSRobert Mustacchiwould contain the offset from the start of the IPv4 header to the first
56*52d2369aSRobert Mustacchibyte of the TCP checksum.
57*52d2369aSRobert Mustacchi.It Fa end
58*52d2369aSRobert MustacchiThe value or a pointer to it that contains the offset from the L3
59*52d2369aSRobert Mustacchiheader, generally IP, of the last byte that's covered by the checksum.
60*52d2369aSRobert Mustacchi.It Fa value
61*52d2369aSRobert MustacchiThe value or a pointer to it that contains the actual value of the
62*52d2369aSRobert Mustacchichecksum.
63*52d2369aSRobert Mustacchi.It Fa flags
64*52d2369aSRobert MustacchiA series of one or more flags that have bitwise inclusive ORed together.
65*52d2369aSRobert MustacchiThe set of flags have different meanings depending on whether
66*52d2369aSRobert Mustacchi.Fa mp
67*52d2369aSRobert Mustacchiis being transmitted or received.
68*52d2369aSRobert Mustacchi.El
69*52d2369aSRobert Mustacchi.Sh DESCRIPTION
70*52d2369aSRobert MustacchiThe
71*52d2369aSRobert Mustacchi.Fn mac_hcksum_get
72*52d2369aSRobert Mustacchiand
73*52d2369aSRobert Mustacchi.Fn mac_hcksum_set
74*52d2369aSRobert Mustacchifunctions are provided to device drivers to get and set checksum related
75*52d2369aSRobert Mustacchiinformation. When a device driver indicates that it supports the
76*52d2369aSRobert Mustacchi.Sy MAC_CAPAB_HCKSUM
77*52d2369aSRobert Mustacchicapability as part of its
78*52d2369aSRobert Mustacchi.Xr mc_getcapab 9E
79*52d2369aSRobert Mustacchientry point, then it is responsible for calling these functions
80*52d2369aSRobert Mustacchiappropriately during the transmit and receive paths.
81*52d2369aSRobert Mustacchi.Pp
82*52d2369aSRobert MustacchiWhile both functions operate on an
83*52d2369aSRobert Mustacchi.Sy mblk_t ,
84*52d2369aSRobert Mustacchithis function should only be called on the first
85*52d2369aSRobert Mustacchi.Sy mblk_t
86*52d2369aSRobert Mustacchithat begins a given individual frame in a chain. In other words, it only
87*52d2369aSRobert Mustacchiworks on entries where it is the first of many possible entries linked
88*52d2369aSRobert Mustacchitogether by the
89*52d2369aSRobert Mustacchi.Sy b_cont
90*52d2369aSRobert Mustacchimember. The first
91*52d2369aSRobert Mustacchi.Sy mblk_t
92*52d2369aSRobert Mustacchireceived from any
93*52d2369aSRobert Mustacchi.Xr mac 9E
94*52d2369aSRobert MustacchiAPI or pointed to by a
95*52d2369aSRobert Mustacchi.Sy b_next
96*52d2369aSRobert Mustacchipointer should be used.
97*52d2369aSRobert Mustacchi.Ss Receiving Data
98*52d2369aSRobert MustacchiWhen a device driver is receiving data, it is its responsibility to
99*52d2369aSRobert Mustacchi.Em set
100*52d2369aSRobert Mustacchichecksum information when it has indicated that it supports the
101*52d2369aSRobert Mustacchi.Sy MAC_CAPAB_HCKSUM
102*52d2369aSRobert Mustacchicapability. Device drivers will call the
103*52d2369aSRobert Mustacchi.Fn mac_hcksum_set
104*52d2369aSRobert Mustacchifunction to indicate what checksum information has occurred.
105*52d2369aSRobert Mustacchi.Pp
106*52d2369aSRobert MustacchiThe proper values to set depend on the flags passed in. The following
107*52d2369aSRobert Mustacchiflags are supported when receiving data, note that they may have
108*52d2369aSRobert Mustacchidifferent meanings from when transmitting data. The driver should set
109*52d2369aSRobert Mustacchithe
110*52d2369aSRobert Mustacchi.Fa flags
111*52d2369aSRobert Mustacchiargument to the bitwise inclusive OR of the following values:
112*52d2369aSRobert Mustacchi.Bl -tag -width Sy
113*52d2369aSRobert Mustacchi.It Sy HCK_IPV4_HDRCKSUM_OK
114*52d2369aSRobert MustacchiThis flag indicates that the hardware has verified the IPv4 header is
115*52d2369aSRobert Mustacchicorrect and that the networking stack does not need to verify it.
116*52d2369aSRobert Mustacchi.It Sy HCK_PARTIALCKSUM
117*52d2369aSRobert MustacchiThis flag indicates that the hardware has computed a partial checksum.
118*52d2369aSRobert MustacchiWhen this flag is set, the driver is responsible for passing in the
119*52d2369aSRobert Mustacchipartial checksum in the
120*52d2369aSRobert Mustacchi.Fa value
121*52d2369aSRobert Mustacchiargument as well as the start and ending bytes of the checksum in the
122*52d2369aSRobert Mustacchi.Fa start
123*52d2369aSRobert Mustacchiand
124*52d2369aSRobert Mustacchi.Fa end
125*52d2369aSRobert Mustacchiarguments.
126*52d2369aSRobert Mustacchi.It Sy HCK_FULLCKSUM
127*52d2369aSRobert MustacchiThis flag indicates that the hardware has calculated the full L4 header
128*52d2369aSRobert Mustacchichecksum; however, it wants the system to verify it. The checksum should
129*52d2369aSRobert Mustacchibe passed in the
130*52d2369aSRobert Mustacchi.Fa value
131*52d2369aSRobert Mustacchiargument.
132*52d2369aSRobert Mustacchi.It Sy HCK_FULLCKSUM_OK
133*52d2369aSRobert MustacchiThis flag indicates that the hardware has calculated the full L4 header
134*52d2369aSRobert Mustacchichecksum and verified that it is correct. The networking stack does not
135*52d2369aSRobert Mustacchineed to verify it.
136*52d2369aSRobert Mustacchi.El
137*52d2369aSRobert Mustacchi.Pp
138*52d2369aSRobert MustacchiThe
139*52d2369aSRobert Mustacchi.Sy HCK_PARTIALCKSUM ,
140*52d2369aSRobert Mustacchi.Sy HCK_FULLCKSUM ,
141*52d2369aSRobert Mustacchiand
142*52d2369aSRobert Mustacchi.Sy HCK_FULLCKSUM_OK
143*52d2369aSRobert Mustacchiflags are all mutually exclusive. A device driver should only set one of
144*52d2369aSRobert Mustacchithe three flags.
145*52d2369aSRobert Mustacchi.Pp
146*52d2369aSRobert MustacchiIf one of the arguments is not required based on the specified value of
147*52d2369aSRobert Mustacchi.Fa flags ,
148*52d2369aSRobert Mustacchithen the device driver should set any remaining arguments to
149*52d2369aSRobert Mustacchi.Sy 0 .
150*52d2369aSRobert Mustacchi.Ss Transmitting Data
151*52d2369aSRobert MustacchiWhen a device driver is transmitting data and it has advertised that it
152*52d2369aSRobert Mustacchisupports the
153*52d2369aSRobert Mustacchi.Sy MAC_CAPAB_HCKSUM
154*52d2369aSRobert Mustacchicapability, then it must call the
155*52d2369aSRobert Mustacchi.Fn mac_hcksum_get
156*52d2369aSRobert Mustacchifunction to determine what hardware checksumming options are required to
157*52d2369aSRobert Mustacchibe performed by the hardware. While the device driver may need the other
158*52d2369aSRobert Mustacchifields, it must check the
159*52d2369aSRobert Mustacchi.Fa flags
160*52d2369aSRobert Mustacchiargument to determine what it is being requested to do. The following
161*52d2369aSRobert Mustacchivalues may be set in
162*52d2369aSRobert Mustacchi.Fa flags :
163*52d2369aSRobert Mustacchi.Bl -tag -width Sy
164*52d2369aSRobert Mustacchi.It Sy HCK_IPV4_HDRCKSUM
165*52d2369aSRobert MustacchiThe device driver must compute the IPv4 header checksum. No other fields
166*52d2369aSRobert Mustacchihave been filled in.
167*52d2369aSRobert Mustacchi.It Sy HCK_PARTIALCKSUM
168*52d2369aSRobert MustacchiThe device driver needs to compute the partial ones' complement of the
169*52d2369aSRobert Mustacchichecksum. The system has filled in the
170*52d2369aSRobert Mustacchi.Fa start ,
171*52d2369aSRobert Mustacchi.Fa stuff ,
172*52d2369aSRobert Mustacchiand
173*52d2369aSRobert Mustacchi.Fa end
174*52d2369aSRobert Mustacchiarguments to assist the device driver.
175*52d2369aSRobert Mustacchi.It Sy HCK_FULLCKSUM
176*52d2369aSRobert MustacchiThe device driver should compute the full L4 checksum. No other fields
177*52d2369aSRobert Mustacchihave been filled in for the device driver.
178*52d2369aSRobert Mustacchi.El
179*52d2369aSRobert Mustacchi.Pp
180*52d2369aSRobert MustacchiThe flags that the device driver will get will depend on what the device
181*52d2369aSRobert Mustacchidriver has advertised that it supports in response to the
182*52d2369aSRobert Mustacchi.Xr mc_getcapab 9E
183*52d2369aSRobert Mustacchiquery for the
184*52d2369aSRobert Mustacchi.Sy MAC_CAPAB_HCKSUM
185*52d2369aSRobert Mustacchicapability.
186*52d2369aSRobert Mustacchi.Pp
187*52d2369aSRobert MustacchiThe
188*52d2369aSRobert Mustacchi.Sy HCK_PARTIALCKSUM
189*52d2369aSRobert Mustacchiand
190*52d2369aSRobert Mustacchi.Sy HCK_FULLCKSUM
191*52d2369aSRobert Mustacchiflags are mutually exclusive.
192*52d2369aSRobert Mustacchi.Sh CONTEXT
193*52d2369aSRobert MustacchiThe
194*52d2369aSRobert Mustacchi.Fn mac_hcksum_get
195*52d2369aSRobert Mustacchiand
196*52d2369aSRobert Mustacchi.Fn mac_hcksum_set
197*52d2369aSRobert Mustacchifunctions may be called from any context.
198*52d2369aSRobert Mustacchi.Sh SEE ALSO
199*52d2369aSRobert Mustacchi.Xr mac 9E ,
200*52d2369aSRobert Mustacchi.Xr mac_getcapab 9E ,
201*52d2369aSRobert Mustacchi.Xr mblk 9S
202