110639SDarren.Reed@Sun.COM /* 210639SDarren.Reed@Sun.COM * CDDL HEADER START 310639SDarren.Reed@Sun.COM * 410639SDarren.Reed@Sun.COM * The contents of this file are subject to the terms of the 510639SDarren.Reed@Sun.COM * Common Development and Distribution License (the "License"). 610639SDarren.Reed@Sun.COM * You may not use this file except in compliance with the License. 710639SDarren.Reed@Sun.COM * 810639SDarren.Reed@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 910639SDarren.Reed@Sun.COM * or http://www.opensolaris.org/os/licensing. 1010639SDarren.Reed@Sun.COM * See the License for the specific language governing permissions 1110639SDarren.Reed@Sun.COM * and limitations under the License. 1210639SDarren.Reed@Sun.COM * 1310639SDarren.Reed@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 1410639SDarren.Reed@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1510639SDarren.Reed@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 1610639SDarren.Reed@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 1710639SDarren.Reed@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 1810639SDarren.Reed@Sun.COM * 1910639SDarren.Reed@Sun.COM * CDDL HEADER END 2010639SDarren.Reed@Sun.COM */ 2110639SDarren.Reed@Sun.COM 2210639SDarren.Reed@Sun.COM /* 23*13095SDarren.Reed@Oracle.COM * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 2410639SDarren.Reed@Sun.COM */ 2510639SDarren.Reed@Sun.COM 2610639SDarren.Reed@Sun.COM #ifndef _PACKET_H 2710639SDarren.Reed@Sun.COM #define _PACKET_H 2810639SDarren.Reed@Sun.COM 2910639SDarren.Reed@Sun.COM #include <sys/socket_impl.h> 30*13095SDarren.Reed@Oracle.COM #include <net/if_arp.h> 3110639SDarren.Reed@Sun.COM #include <net/bpf.h> 3210639SDarren.Reed@Sun.COM 3310639SDarren.Reed@Sun.COM /* 3410639SDarren.Reed@Sun.COM * With which we do the reverse of what it libpcap does.... 3510639SDarren.Reed@Sun.COM */ 3610639SDarren.Reed@Sun.COM #define PACKET_OUTGOING LINUX_SLL_OUTGOING 3710639SDarren.Reed@Sun.COM #define PACKET_HOST LINUX_SLL_HOST 3810639SDarren.Reed@Sun.COM #define PACKET_BROADCAST LINUX_SLL_BROADCAST 3910639SDarren.Reed@Sun.COM #define PACKET_MULTICAST LINUX_SLL_MULTICAST 4010639SDarren.Reed@Sun.COM #define PACKET_OTHERHOST LINUX_SLL_OTHERHOST 4110639SDarren.Reed@Sun.COM 4210639SDarren.Reed@Sun.COM #define PACKET_STATISTICS 1 4310639SDarren.Reed@Sun.COM #define PACKET_ADD_MEMBERSHIP 2 4410639SDarren.Reed@Sun.COM #define PACKET_DROP_MEMBERSHIP 3 4510639SDarren.Reed@Sun.COM #define PACKET_AUXDATA 4 4610639SDarren.Reed@Sun.COM 4710639SDarren.Reed@Sun.COM 4810639SDarren.Reed@Sun.COM struct packet_mreq { 4910639SDarren.Reed@Sun.COM uint32_t mr_ifindex; 5010639SDarren.Reed@Sun.COM uint16_t mr_type; 5110639SDarren.Reed@Sun.COM uint16_t mr_alen; 5210639SDarren.Reed@Sun.COM uint8_t mr_address[8]; 5310639SDarren.Reed@Sun.COM }; 5410639SDarren.Reed@Sun.COM 5510639SDarren.Reed@Sun.COM #define PACKET_MR_MULTICAST 1 5610639SDarren.Reed@Sun.COM #define PACKET_MR_PROMISC 2 5710639SDarren.Reed@Sun.COM #define PACKET_MR_ALLMULTI 3 5810639SDarren.Reed@Sun.COM 5910639SDarren.Reed@Sun.COM typedef enum tpkt_status_e { 6010639SDarren.Reed@Sun.COM TP_STATUS_KERNEL, 6110639SDarren.Reed@Sun.COM TP_STATUS_USER, 6210639SDarren.Reed@Sun.COM TP_STATUS_COPY, 6310639SDarren.Reed@Sun.COM TP_STATUS_LOSING, 6410639SDarren.Reed@Sun.COM TP_STATUS_CSUMNOTREADY 6510639SDarren.Reed@Sun.COM } tpkt_status_t; 6610639SDarren.Reed@Sun.COM 6710639SDarren.Reed@Sun.COM struct tpacket_auxdata { /* tp_macoff/tp_netoff ?? */ 6810639SDarren.Reed@Sun.COM tpkt_status_t tp_status; 6910639SDarren.Reed@Sun.COM uint32_t tp_len; 7010639SDarren.Reed@Sun.COM uint32_t tp_snaplen; 7110639SDarren.Reed@Sun.COM uint16_t tp_macoff; 7210639SDarren.Reed@Sun.COM uint16_t tp_netoff; 7310639SDarren.Reed@Sun.COM uint16_t tp_vlan_vci; 7410639SDarren.Reed@Sun.COM }; 7510639SDarren.Reed@Sun.COM 7610639SDarren.Reed@Sun.COM struct tpacket_hdr { /* tp_macoff/tp_netoff ?? */ 7710639SDarren.Reed@Sun.COM uint64_t tp_status; 7810639SDarren.Reed@Sun.COM uint32_t tp_len; 7910639SDarren.Reed@Sun.COM uint32_t tp_snaplen; 8010639SDarren.Reed@Sun.COM uint16_t tp_macoff; 8110639SDarren.Reed@Sun.COM uint16_t tp_netoff; 8210639SDarren.Reed@Sun.COM uint32_t tp_sec; 8310639SDarren.Reed@Sun.COM uint32_t tp_usec; 8410639SDarren.Reed@Sun.COM }; 8510639SDarren.Reed@Sun.COM 8610639SDarren.Reed@Sun.COM struct tpacket2_hdr { /* tp_macoff/tp_netoff ?? */ 8710639SDarren.Reed@Sun.COM tpkt_status_t tp_status; 8810639SDarren.Reed@Sun.COM uint32_t tp_len; 8910639SDarren.Reed@Sun.COM uint32_t tp_snaplen; 9010639SDarren.Reed@Sun.COM uint16_t tp_macoff; 9110639SDarren.Reed@Sun.COM uint16_t tp_netoff; 9210639SDarren.Reed@Sun.COM uint32_t tp_sec; 9310639SDarren.Reed@Sun.COM uint32_t tp_nsec; 9410639SDarren.Reed@Sun.COM uint16_t tp_vlan_tci; 9510639SDarren.Reed@Sun.COM }; 9610639SDarren.Reed@Sun.COM 9710639SDarren.Reed@Sun.COM struct tpacket_stats { 9810639SDarren.Reed@Sun.COM uint16_t tp_packets; 9910639SDarren.Reed@Sun.COM uint16_t tp_drops; 10010639SDarren.Reed@Sun.COM }; 10110639SDarren.Reed@Sun.COM 10210639SDarren.Reed@Sun.COM struct sock_filter { /* Fields named from bpf_insn */ 10310639SDarren.Reed@Sun.COM uint16_t code; 10410639SDarren.Reed@Sun.COM uint8_t jt; 10510639SDarren.Reed@Sun.COM uint8_t jf; 10610639SDarren.Reed@Sun.COM uint32_t k; 10710639SDarren.Reed@Sun.COM }; 10810639SDarren.Reed@Sun.COM 10910639SDarren.Reed@Sun.COM struct sock_fprog { 11010639SDarren.Reed@Sun.COM uint16_t len; 11110639SDarren.Reed@Sun.COM struct sock_filter *filter; 11210639SDarren.Reed@Sun.COM }; 11310639SDarren.Reed@Sun.COM 11410639SDarren.Reed@Sun.COM /* 11510639SDarren.Reed@Sun.COM * Linux ARPHRD_ symbols needed... 11610639SDarren.Reed@Sun.COM * 11710639SDarren.Reed@Sun.COM * The numbers above 50000 are because their real value is unknown from 11810639SDarren.Reed@Sun.COM * libpcap's source, so a number has been chosen that is unlikely to be 119*13095SDarren.Reed@Oracle.COM * confused with the real one on Linux. Those that are already found in 120*13095SDarren.Reed@Oracle.COM * Solaris inside <net/if_arp.h> may have a different value to that found 121*13095SDarren.Reed@Oracle.COM * in Linux but it should be used instead as the Solaris value originates 122*13095SDarren.Reed@Oracle.COM * from the IANA whereas the Linux values seem to ignore it. 12310639SDarren.Reed@Sun.COM */ 124*13095SDarren.Reed@Oracle.COM /* ARPHRD_AX25 see <net/if_arp.h> */ 125*13095SDarren.Reed@Oracle.COM /* ARPHRD_CHAOS see <net/if_arp.h> */ 12610639SDarren.Reed@Sun.COM #define ARPHRD_CSLIP 50005 12710639SDarren.Reed@Sun.COM #define ARPHRD_CSLIP6 50006 12810639SDarren.Reed@Sun.COM #define ARPHRD_DLCI 15 129*13095SDarren.Reed@Oracle.COM /* ARPHRD_EETHER see <net/if_arp.h> */ 130*13095SDarren.Reed@Oracle.COM /* ARPHRD_ETHER see <net/if_arp.h> */ 13110639SDarren.Reed@Sun.COM #define ARPHRD_FCAL 785 13210639SDarren.Reed@Sun.COM #define ARPHRD_FCFABRIC 787 13310639SDarren.Reed@Sun.COM #define ARPHRD_FCPL 786 13410639SDarren.Reed@Sun.COM #define ARPHRD_FCPP 784 13510639SDarren.Reed@Sun.COM #define ARPHRD_FRAD 770 13610639SDarren.Reed@Sun.COM #define ARPHRD_FDDI 774 137*13095SDarren.Reed@Oracle.COM /* ARPHRD_IEEE802 see <net/if_arp.h> */ 13810639SDarren.Reed@Sun.COM #define ARPHRD_IEEE802_TR 800 13910639SDarren.Reed@Sun.COM #define ARPHRD_IEEE80211 801 14010639SDarren.Reed@Sun.COM #define ARPHRD_IEEE80211_PRISM 802 14110639SDarren.Reed@Sun.COM #define ARPHRD_IEEE80211_RADIOTAP 803 14210639SDarren.Reed@Sun.COM #define ARPHRD_IRDA 783 14310639SDarren.Reed@Sun.COM #define ARPHRD_LAPD 8445 14410639SDarren.Reed@Sun.COM #define ARPHRD_LOCALTLK 50010 14510639SDarren.Reed@Sun.COM #define ARPHRD_LOOPBACK 50011 146*13095SDarren.Reed@Oracle.COM /* ARPHRD_METRICOM see <net/if_arp.h> */ 14710639SDarren.Reed@Sun.COM #define ARPHRD_PRONET 50013 14810639SDarren.Reed@Sun.COM #define ARPHRD_PPP 50014 14910639SDarren.Reed@Sun.COM #define ARPHRD_RAWHDLC 518 15010639SDarren.Reed@Sun.COM #define ARPHRD_SIT 776 15110639SDarren.Reed@Sun.COM #define ARPHRD_SLIP6 50015 15210639SDarren.Reed@Sun.COM #define ARPHRD_SLIP 50016 153*13095SDarren.Reed@Oracle.COM /* ARPHRD_TUNNEL see <net/if_arp.h> */ 154*13095SDarren.Reed@Oracle.COM 155*13095SDarren.Reed@Oracle.COM #define ETH_P_ALL 0 156*13095SDarren.Reed@Oracle.COM #define ETH_P_802_2 0xaa /* LSAP_SAP */ 157*13095SDarren.Reed@Oracle.COM #define ETH_P_803_3 0 158*13095SDarren.Reed@Oracle.COM #define ETH_P_IP 0x800 159*13095SDarren.Reed@Oracle.COM #define ETH_P_ARP 0x806 160*13095SDarren.Reed@Oracle.COM #define ETH_P_IPV6 0x86dd 16110639SDarren.Reed@Sun.COM 16210639SDarren.Reed@Sun.COM #ifdef _KERNEL 16310639SDarren.Reed@Sun.COM /* 16410639SDarren.Reed@Sun.COM * PFP socket structure. 16510639SDarren.Reed@Sun.COM */ 16610639SDarren.Reed@Sun.COM typedef struct pfpsock { 16710639SDarren.Reed@Sun.COM struct bpf_program ps_bpf; 16810639SDarren.Reed@Sun.COM krwlock_t ps_bpflock; 16910639SDarren.Reed@Sun.COM sock_upper_handle_t ps_upper; 17010639SDarren.Reed@Sun.COM sock_upcalls_t *ps_upcalls; 17110639SDarren.Reed@Sun.COM mac_handle_t ps_mh; 17210639SDarren.Reed@Sun.COM mac_client_handle_t ps_mch; 17310639SDarren.Reed@Sun.COM mac_promisc_handle_t ps_phd; 17410639SDarren.Reed@Sun.COM int ps_type; 17510639SDarren.Reed@Sun.COM int ps_proto; 17610639SDarren.Reed@Sun.COM uint_t ps_max_sdu; 17710639SDarren.Reed@Sun.COM boolean_t ps_bound; 17810639SDarren.Reed@Sun.COM mac_client_promisc_type_t ps_promisc; 17910639SDarren.Reed@Sun.COM boolean_t ps_auxdata; 18010639SDarren.Reed@Sun.COM struct tpacket_stats ps_stats; 18110639SDarren.Reed@Sun.COM struct sockaddr ps_sock; 18210639SDarren.Reed@Sun.COM datalink_id_t ps_linkid; 18310639SDarren.Reed@Sun.COM kmutex_t ps_lock; 18410639SDarren.Reed@Sun.COM boolean_t ps_flow_ctrld; 18510639SDarren.Reed@Sun.COM ulong_t ps_flow_ctrl_drops; 18610639SDarren.Reed@Sun.COM } pfpsock_t; 18710639SDarren.Reed@Sun.COM 18810639SDarren.Reed@Sun.COM typedef struct pfp_kstats_s { 18910639SDarren.Reed@Sun.COM kstat_named_t kp_recv_mac_hdr_fail; 19010639SDarren.Reed@Sun.COM kstat_named_t kp_recv_bad_proto; 19110639SDarren.Reed@Sun.COM kstat_named_t kp_recv_alloc_fail; 19210639SDarren.Reed@Sun.COM kstat_named_t kp_recv_ok; 19310639SDarren.Reed@Sun.COM kstat_named_t kp_recv_fail; 19410639SDarren.Reed@Sun.COM kstat_named_t kp_recv_filtered; 19510639SDarren.Reed@Sun.COM kstat_named_t kp_recv_flow_cntrld; 19610639SDarren.Reed@Sun.COM kstat_named_t kp_send_unbound; 19710639SDarren.Reed@Sun.COM kstat_named_t kp_send_failed; 19810639SDarren.Reed@Sun.COM kstat_named_t kp_send_too_big; 19910639SDarren.Reed@Sun.COM kstat_named_t kp_send_alloc_fail; 20010639SDarren.Reed@Sun.COM kstat_named_t kp_send_uiomove_fail; 20110639SDarren.Reed@Sun.COM kstat_named_t kp_send_no_memory; 20210639SDarren.Reed@Sun.COM kstat_named_t kp_send_open_fail; 20310639SDarren.Reed@Sun.COM kstat_named_t kp_send_wrong_family; 20410639SDarren.Reed@Sun.COM kstat_named_t kp_send_short_msg; 20510639SDarren.Reed@Sun.COM kstat_named_t kp_send_ok; 20610639SDarren.Reed@Sun.COM } pfp_kstats_t; 20710639SDarren.Reed@Sun.COM #endif /* _KERNEL */ 20810639SDarren.Reed@Sun.COM 20910639SDarren.Reed@Sun.COM #endif /* _PACKET_H */ 210