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