HOOK_PKT_EVENT(9S) Data Structures for Drivers HOOK_PKT_EVENT(9S)

hook_pkt_event - packet event structure passed through to hooks

#include <sys/neti.h>
#include <sys/hook.h>
#include <sys/hook_event.h>

illumos DDI specific (illumos DDI).

The hook_pkt_event structure contains fields that relate to a packet in a network protocol handler. This structure is passed through to a callback for NH_PRE_ROUTING, NH_POST_ROUTING, NH_FORWARDING, NH_LOOPBACK_IN and NH_LOOPBACK_OUT events.

A callback may only modify the hpe_hdr, hpe_mp and hpe_mb fields.

The following table documents which fields can be safely used as a result of each event.

Event            hpe_ifp     hpe_ofp     hpe_hdr     hpe_mp     hpe_mb
-----            -------     -------     -------     ------     ------
NH_PRE_ROUTING      yes                     yes         yes       yes
NH_POST_ROUTING                 yes         yes         yes       yes
NH_FORWARDING       yes         yes         yes         yes       yes
NH_LOOPBACK_IN      yes                     yes         yes       yes
NH_LOOPBACK_OUT                 yes         yes         yes       yes

net_data_t           hne_family;
phy_if_t             hpe_ifp;
phy_if_t             hpe_ofp;
void                 *hpe_hdr;
mblk_t               *hpe_mp;
mblk_t               *hpe_mb;
uint32_t             hpe_flags;

The following fields are set for each event:


The protocol family for this packet. This value matches the corresponding value returned from a call to net_protocol_lookup(9F).


The inbound interface for a packet.


The outbound interface for a packet.


Pointer to the start of the network protocol header within an mblk_t structure.


Pointer to the mblk_t pointer that points to the first mblk_t structure in this packet.


Pointer to the mblk_t structure that contains hpe_hdr.


This field is used to carry additional properties of packets. The current collection of defined bits available is:


This bit is set if the packet was recognized as a broadcast packet from the link layer. The bit cannot be set if HPE_MULTICAST is set, currently only possible with physical in packet events.


This set if the packet was recognized as a multicast packet from the link layer. This bit cannot be set if HPE_BROADCAST is set, currently only possible with physical in packet events.

See attributes(7) for descriptions of the following attributes:

Interface Stability Committed

net_protocol_lookup(9F), netinfo(9F)
May 1, 2008 OmniOS