/* * 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 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* * This file include definition of message passed from hook provider * to hook consumer. If necessary, each hook provider can add its * own message definition here. */ #ifndef _SYS_HOOK_EVENT_H #define _SYS_HOOK_EVENT_H #include #include #ifdef __cplusplus extern "C" { #endif /* * The hook_pkt_event_t structure is supplied with packet events on * associated network interfaces. * * The members of this structure are defined as follows: * hpe_protocol - protocol identifier that indicates which protocol the * header data is associated with. * hpe_ifp - "in" interface for packets coming into the system or forwarded * hpe_ofp - "out" interface for packets being transmitted or forwarded * hpe_hdr - pointer to protocol header within the packet * hpe_mp - pointer to the mblk pointer starting the chain for this packet * hpe_mb - pointer to the mblk that contains hpe_hdr */ typedef struct hook_pkt_event { net_handle_t hpe_protocol; phy_if_t hpe_ifp; phy_if_t hpe_ofp; void *hpe_hdr; mblk_t **hpe_mp; mblk_t *hpe_mb; int hpe_flags; void *hpe_reserved[2]; } hook_pkt_event_t; #define HPE_MULTICAST 0x01 #define HPE_BROADCAST 0x02 /* * NIC events hook provider */ typedef enum nic_event { NE_PLUMB = 1, NE_UNPLUMB, NE_UP, NE_DOWN, NE_ADDRESS_CHANGE, NE_LIF_UP, NE_LIF_DOWN, NE_IFINDEX_CHANGE } nic_event_t; typedef void *nic_event_data_t; /* * The hook_nic_event data structure is provided with all network interface * events. * * hne_protocol- network protocol for events, returned from net_lookup * hne_nic - physical interface associated with event * hne_lif - logical interface (if any) associated with event * hne_event - type of event occuring * hne_data - pointer to extra data about event or NULL if none * hne_datalen - size of data pointed to by hne_data (can be 0) */ typedef struct hook_nic_event { net_handle_t hne_protocol; phy_if_t hne_nic; lif_if_t hne_lif; nic_event_t hne_event; nic_event_data_t hne_data; size_t hne_datalen; } hook_nic_event_t; /* * This structure is used internally by ip to queue events. */ struct hook_nic_event_int { netstackid_t hnei_stackid; hook_nic_event_t hnei_event; }; typedef struct hook_nic_event_int hook_nic_event_int_t; /* * This structure holds the data passed back from the ip module to * observability consumers. * * Externally exposed fields, that must match the order and size of * dl_ipnetinfo_t in are: * hpo_version Version number for this header * hpo_family Address family of the attached packet * hpo_htype IPobs hook type * hpo_pktlen Length of the attached packet * hpo_ifindex Interface index that the packet was received/sent over. * For local packets, this is the index of the interface * associated with the local destination address. * hpo_grifindex IPMP group interface index (zero unless ihd_ifindex * is an IPMP underlying interface). * hpo_zsrc Source zoneid; set to ALL_ZONES when unknown. * hpo_zdst Destination zoneid; set to ALL_ZONES when unknown. * * Fields used internally are: * hpo_pkt Pointer to the mblk_t containig this structure with * the real packet found at b_cont */ typedef struct hook_pkt_observe_s { uint8_t hpo_version; uint8_t hpo_family; uint16_t hpo_htype; uint32_t hpo_pktlen; uint32_t hpo_ifindex; uint32_t hpo_grifindex; uint32_t hpo_zsrc; uint32_t hpo_zdst; /* * Fields used internally are below. */ mblk_t *hpo_pkt; void *hpo_ctx; } hook_pkt_observe_t; /* * ipobs_hooktype_t describes the hook types supported * by the ip module. IPOBS_HOOK_LOCAL refers to packets * which are looped back internally within the ip module. */ typedef enum ipobs_hook_type { IPOBS_HOOK_INBOUND = 0, IPOBS_HOOK_OUTBOUND = 1, IPOBS_HOOK_LOCAL = 2 } ipobs_hook_type_t; #ifdef __cplusplus } #endif #endif /* _SYS_HOOK_EVENT_H */