packet.h revision 336069c20319c172c4ff9d87d67e8f6301c98a5d
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/*
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * CDDL HEADER START
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * The contents of this file are subject to the terms of the
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Common Development and Distribution License (the "License").
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * You may not use this file except in compliance with the License.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * or http://www.opensolaris.org/os/licensing.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * See the License for the specific language governing permissions
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * and limitations under the License.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * When distributing Covered Code, include this CDDL HEADER in each
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * If applicable, add the following below this CDDL HEADER, with the
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * fields enclosed by brackets "[]" replaced with your own identifying
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * information: Portions Copyright [yyyy] [name of copyright owner]
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * CDDL HEADER END
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/*
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Copyright 2015 Joyent, Inc. All rights reserved.
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka */
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka#ifndef _PACKET_H
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define _PACKET_H
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka#include <sys/socket_impl.h>
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include <net/if_arp.h>
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include <net/bpf.h>
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/*
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * With which we do the reverse of what it libpcap does....
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_OUTGOING LINUX_SLL_OUTGOING
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_HOST LINUX_SLL_HOST
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_BROADCAST LINUX_SLL_BROADCAST
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_MULTICAST LINUX_SLL_MULTICAST
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_OTHERHOST LINUX_SLL_OTHERHOST
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_STATISTICS_SHORT 1
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_ADD_MEMBERSHIP 2
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_DROP_MEMBERSHIP 3
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_AUXDATA 4
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_STATISTICS 5
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telkastruct packet_mreq {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t mr_ifindex;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t mr_type;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t mr_alen;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint8_t mr_address[8];
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_MR_MULTICAST 1
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_MR_PROMISC 2
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PACKET_MR_ALLMULTI 3
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooretypedef enum tpkt_status_e {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore TP_STATUS_KERNEL,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore TP_STATUS_USER,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore TP_STATUS_COPY,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore TP_STATUS_LOSING,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore TP_STATUS_CSUMNOTREADY
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore} tpkt_status_t;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorestruct tpacket_auxdata { /* tp_macoff/tp_netoff ?? */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore tpkt_status_t tp_status;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t tp_len;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t tp_snaplen;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t tp_macoff;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t tp_netoff;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t tp_vlan_vci;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorestruct tpacket_hdr { /* tp_macoff/tp_netoff ?? */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint64_t tp_status;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t tp_len;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t tp_snaplen;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t tp_macoff;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t tp_netoff;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t tp_sec;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t tp_usec;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorestruct tpacket2_hdr { /* tp_macoff/tp_netoff ?? */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore tpkt_status_t tp_status;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t tp_len;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t tp_snaplen;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t tp_macoff;
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka uint16_t tp_netoff;
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka uint32_t tp_sec;
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka uint32_t tp_nsec;
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka uint16_t tp_vlan_tci;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorestruct tpacket_stats {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t tp_packets;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t tp_drops;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorestruct tpacket_stats_short {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t tp_packets;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t tp_drops;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorestruct sock_filter { /* Fields named from bpf_insn */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t code;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint8_t jt;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint8_t jf;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint32_t k;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorestruct sock_fprog {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint16_t len;
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka struct sock_filter *filter;
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka};
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka/*
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka * Linux ARPHRD_ symbols needed...
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka *
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka * The numbers above 50000 are because their real value is unknown from
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka * libpcap's source, so a number has been chosen that is unlikely to be
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka * confused with the real one on Linux. Those that are already found in
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka * Solaris inside <net/if_arp.h> may have a different value to that found
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka * in Linux but it should be used instead as the Solaris value originates
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka * from the IANA whereas the Linux values seem to ignore it.
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka */
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka/* ARPHRD_AX25 see <net/if_arp.h> */
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka/* ARPHRD_CHAOS see <net/if_arp.h> */
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka#define ARPHRD_CSLIP 50005
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka#define ARPHRD_CSLIP6 50006
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka#define ARPHRD_DLCI 15
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka/* ARPHRD_EETHER see <net/if_arp.h> */
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka/* ARPHRD_ETHER see <net/if_arp.h> */
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka#define ARPHRD_FCAL 785
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka#define ARPHRD_FCFABRIC 787
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_FCPL 786
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_FCPP 784
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_FRAD 770
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_FDDI 774
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/* ARPHRD_IEEE802 see <net/if_arp.h> */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_IEEE802_TR 800
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_IEEE80211 801
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_IEEE80211_PRISM 802
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_IEEE80211_RADIOTAP 803
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_IRDA 783
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_LAPD 8445
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_LOCALTLK 50010
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_LOOPBACK 50011
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/* ARPHRD_METRICOM see <net/if_arp.h> */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_PRONET 50013
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_PPP 50014
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_RAWHDLC 518
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_SIT 776
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_SLIP6 50015
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ARPHRD_SLIP 50016
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/* ARPHRD_TUNNEL see <net/if_arp.h> */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ETH_P_ALL 0
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ETH_P_802_2 0xaa /* LSAP_SAP */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ETH_P_803_3 0
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ETH_P_IP 0x800
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ETH_P_ARP 0x806
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ETH_P_IPV6 0x86dd
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#ifdef _KERNEL
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/*
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * PFP socket structure.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooretypedef struct pfpsock {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore struct bpf_program ps_bpf;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore krwlock_t ps_bpflock;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore sock_upper_handle_t ps_upper;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore sock_upcalls_t *ps_upcalls;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore mac_handle_t ps_mh;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore mac_client_handle_t ps_mch;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore mac_promisc_handle_t ps_phd;
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka int ps_type;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore int ps_proto;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint_t ps_max_sdu;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore boolean_t ps_bound;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore mac_client_promisc_type_t ps_promisc;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore boolean_t ps_auxdata;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore struct tpacket_stats ps_stats;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore struct sockaddr ps_sock;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore datalink_id_t ps_linkid;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kmutex_t ps_lock;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore boolean_t ps_flow_ctrld;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore ulong_t ps_flow_ctrl_drops;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore timespec_t ps_timestamp;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore size_t ps_rcvbuf;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore} pfpsock_t;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooretypedef struct pfp_kstats_s {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_recv_mac_hdr_fail;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_recv_bad_proto;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_recv_alloc_fail;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_recv_ok;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_recv_fail;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_recv_filtered;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_recv_flow_cntrld;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_send_unbound;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_send_failed;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_send_too_big;
8c7cfd880e3f539ab3041a3168beec560e4ff5d9Sherry Moore kstat_named_t kp_send_alloc_fail;
8c7cfd880e3f539ab3041a3168beec560e4ff5d9Sherry Moore kstat_named_t kp_send_uiomove_fail;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_send_no_memory;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_send_open_fail;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_send_wrong_family;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_send_short_msg;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore kstat_named_t kp_send_ok;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore} pfp_kstats_t;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#endif /* _KERNEL */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#endif /* _PACKET_H */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore