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
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
* Copyright 2018 Joyent, Inc.
*/
#ifndef _SYS_PATTR_H
#define _SYS_PATTR_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* Attribute types and structures.
*/
#define PATTR_DSTADDRSAP 0x1 /* destination physical address+SAP */
#define PATTR_SRCADDRSAP 0x2 /* source physical address+SAP */
#define PATTR_HCKSUM 0x3 /* hardware checksum attribute */
#define PATTR_ZCOPY 0x4 /* zerocopy attribute */
/*
* Structure shared by {source,destination} physical address+SAP attributes.
*/
typedef struct pattr_addr_s {
uint8_t addr_is_group; /* address is broadcast or multicast */
uint8_t addr_len; /* length of address */
uint8_t addr[1]; /* address */
} pattr_addr_t;
/*
* Structure used for Hardware Checksum attribute.
*/
typedef struct pattr_hcksum_s {
uint32_t hcksum_start_offset;
uint32_t hcksum_stuff_offset;
uint32_t hcksum_end_offset;
union {
uint64_t value;
uint16_t inet_cksum; /* to store H/W computed cksum value */
} hcksum_cksum_val;
uint32_t hcksum_flags;
} pattr_hcksum_t;
/*
* Values for hcksum_flags
*/
#define HCK_IPV4_HDRCKSUM 0x01 /* On Transmit: Compute IP header */
/* checksum in hardware. */
#define HCK_IPV4_HDRCKSUM_OK 0x01 /* On Receive: IP header checksum */
/* was verified by h/w and is */
/* correct. */
#define HCK_PARTIALCKSUM 0x02 /* On Transmit: Compute partial 1's */
/* complement checksum based on */
/* start, stuff and end offsets. */
/* On Receive : Partial checksum */
/* computed and attached. */
#define HCK_FULLCKSUM 0x04 /* On Transmit: Compute full(in case */
/* of TCP/UDP, full is pseudo-header */
/* + header + payload) checksum for */
/* this packet. */
/* On Receive : Full checksum */
/* computed in h/w and is attached */
#define HCK_FULLCKSUM_OK 0x08 /* On Transmit: N/A */
/* On Receive: Full checksum status */
/* If set, implies full checksum */
/* computation was successful */
/* i.e. checksum was correct. */
/* If it is not set, IP will also */
/* check the attached h/w computed */
/* checksum value to determine if */
/* checksum was bad */
#define HCK_FLAGS (HCK_IPV4_HDRCKSUM | HCK_PARTIALCKSUM | \
HCK_FULLCKSUM | HCK_FULLCKSUM_OK)
/*
* Extended hardware offloading flags that also use hcksum_flags
*/
#define HW_LSO 0x10 /* On Transmit: hardware does LSO */
/* On Receive: N/A */
#define HW_LSO_FLAGS HW_LSO /* All LSO flags, currently only one */
/*
* The packet originates from a MAC on the same machine as the
* receiving MAC. There are two ways this can happen.
*
* 1. MAC loopback: When a packet is destined for a MAC client on the
* same MAC as the sender. This datapath is taken in
* max_tx_send().
*
* 2. Bridge Fwd: When a packet is destined for a MAC client on the
* same bridge as the sender. This datapath is taken in
* bridge_forward().
*
* Presented with this flag, a receiver can then decide whether or not
* it needs to emulate some or all of the HW offloads that the NIC
* would have performed otherwise -- or whether it should accept the
* packet as-is.
*/
#define HW_LOCAL_MAC 0x100
/*
* Structure used for zerocopy attribute.
*/
typedef struct pattr_zcopy_s {
uint_t zcopy_flags;
} pattr_zcopy_t;
#ifdef __cplusplus
}
#endif
#endif /* _SYS_PATTR_H */
|