4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
27 * This file include definition of message passed from hook provider
28 * to hook consumer. If necessary, each hook provider can add its
29 * own message definition here.
32 #ifndef _SYS_HOOK_EVENT_H
33 #define _SYS_HOOK_EVENT_H
42 struct msgb
; /* avoiding sys/stream.h here */
45 * The hook_pkt_event_t structure is supplied with packet events on
46 * associated network interfaces.
48 * The members of this structure are defined as follows:
49 * hpe_protocol - protocol identifier that indicates which protocol the
50 * header data is associated with.
51 * hpe_ifp - "in" interface for packets coming into the system or forwarded
52 * hpe_ofp - "out" interface for packets being transmitted or forwarded
53 * hpe_hdr - pointer to protocol header within the packet
54 * hpe_mp - pointer to the mblk pointer starting the chain for this packet
55 * hpe_mb - pointer to the mblk that contains hpe_hdr
57 typedef struct hook_pkt_event
{
58 net_handle_t hpe_protocol
;
65 void *hpe_reserved
[2];
68 #define HPE_MULTICAST 0x01
69 #define HPE_BROADCAST 0x02
72 * NIC events hook provider
74 typedef enum nic_event
{
85 typedef void *nic_event_data_t
;
88 * The hook_nic_event data structure is provided with all network interface
91 * hne_protocol- network protocol for events, returned from net_lookup
92 * hne_nic - physical interface associated with event
93 * hne_lif - logical interface (if any) associated with event
94 * hne_event - type of event occuring
95 * hne_data - pointer to extra data about event or NULL if none
96 * hne_datalen - size of data pointed to by hne_data (can be 0)
98 typedef struct hook_nic_event
{
99 net_handle_t hne_protocol
;
102 nic_event_t hne_event
;
103 nic_event_data_t hne_data
;
108 * This structure is used internally by ip to queue events.
110 struct hook_nic_event_int
{
111 netstackid_t hnei_stackid
;
112 hook_nic_event_t hnei_event
;
114 typedef struct hook_nic_event_int hook_nic_event_int_t
;
117 * This structure holds the data passed back from the ip module to
118 * observability consumers.
120 * Externally exposed fields, that must match the order and size of
121 * dl_ipnetinfo_t in <sys/dlpi.h> are:
122 * hpo_version Version number for this header
123 * hpo_family Address family of the attached packet
124 * hpo_htype IPobs hook type
125 * hpo_pktlen Length of the attached packet
126 * hpo_ifindex Interface index that the packet was received/sent over.
127 * For local packets, this is the index of the interface
128 * associated with the local destination address.
129 * hpo_grifindex IPMP group interface index (zero unless ihd_ifindex
130 * is an IPMP underlying interface).
131 * hpo_zsrc Source zoneid; set to ALL_ZONES when unknown.
132 * hpo_zdst Destination zoneid; set to ALL_ZONES when unknown.
134 * Fields used internally are:
135 * hpo_pkt Pointer to the mblk_t containig this structure with
136 * the real packet found at b_cont
138 typedef struct hook_pkt_observe_s
{
143 uint32_t hpo_ifindex
;
144 uint32_t hpo_grifindex
;
148 * Fields used internally are below.
150 struct msgb
*hpo_pkt
;
152 } hook_pkt_observe_t
;
155 * ipobs_hooktype_t describes the hook types supported
156 * by the ip module. IPOBS_HOOK_LOCAL refers to packets
157 * which are looped back internally within the ip module.
160 typedef enum ipobs_hook_type
{
161 IPOBS_HOOK_INBOUND
= 0,
162 IPOBS_HOOK_OUTBOUND
= 1,
171 #endif /* _SYS_HOOK_EVENT_H */