110 lines
3.5 KiB
C
110 lines
3.5 KiB
C
/* @(#)nit.h 1.1 94/10/31 SMI */
|
|
|
|
/*
|
|
* Copyright (c) 1986 by Sun Microsystems, Inc.
|
|
*/
|
|
|
|
/*
|
|
* Constants and structures defined for nit
|
|
*/
|
|
|
|
#ifndef _net_nit_h
|
|
#define _net_nit_h
|
|
|
|
#define NITIFSIZ 10 /* size of ifname in sockaddr */
|
|
#define NITBUFSIZ 1024 /* buffers are rounded up to a
|
|
* multiple of this size (MCLBYTES) */
|
|
|
|
/*
|
|
* Protocols
|
|
*/
|
|
#define NITPROTO_RAW 1 /* raw protocol */
|
|
#define NITPROTO_MAX 2
|
|
|
|
/*
|
|
* Sockaddr_nit, as the "local address" associated with a raw socket,
|
|
* needs to uniquely identify the associated process, since this is
|
|
* what rawintr will use to distribute packets. We do not distribute
|
|
* on the "foreign address", as we need it to provide the outgoing
|
|
* network address.
|
|
*/
|
|
struct sockaddr_nit {
|
|
u_short snit_family;
|
|
caddr_t snit_cookie; /* link to filtering */
|
|
char snit_ifname[NITIFSIZ]; /* interface name (ie0) */
|
|
};
|
|
|
|
/* Header preceeding each packet returned to user */
|
|
struct nit_hdr {
|
|
int nh_state; /* state of tap -- see below */
|
|
struct timeval nh_timestamp; /* time of arriving packet */
|
|
int nh_wirelen; /* length (with header) off wire */
|
|
union {
|
|
int info; /* generic information */
|
|
int datalen; /* length of saved packet portion */
|
|
int dropped; /* number of dropped matched packets */
|
|
int seqno; /* sequence number */
|
|
} nh_un;
|
|
};
|
|
#define nh_info nh_un.info
|
|
#define nh_datalen nh_un.datalen
|
|
#define nh_dropped nh_un.dropped
|
|
#define nh_seqno nh_un.seqno
|
|
|
|
/*
|
|
* Ioctl parameter block
|
|
* When setting parameter values, values that
|
|
* are otherwise impossible mean "don't change".
|
|
*
|
|
* Nioc_bufalign and nioc_bufoffset control packet placement
|
|
* within buffers. The (nit) header for each packet in a buffer
|
|
* starts nioc_bufoffset bytes past some multiple of nioc_bufalign
|
|
* bytes from the beginning. The packet itself appears immediately
|
|
* beyond the header.
|
|
*/
|
|
struct nit_ioc {
|
|
int nioc_bufspace; /* total buffer space to use */
|
|
int nioc_chunksize; /* size of chunks to send */
|
|
u_int nioc_typetomatch; /* magic type with which to match */
|
|
int nioc_snaplen; /* length of packet portion to snap */
|
|
int nioc_bufalign; /* packet header alignment multiple */
|
|
int nioc_bufoffset; /* packet header alignment offset */
|
|
struct timeval nioc_timeout; /* delay after packet before flush */
|
|
int nioc_flags; /* see below */
|
|
};
|
|
#define NT_NOTYPES ((u_int)0) /* match no packet types */
|
|
#define NT_ALLTYPES ((u_int)-1) /* match all packet types */
|
|
|
|
#define NF_PROMISC 0x01 /* enter promiscuous mode */
|
|
#define NF_TIMEOUT 0x02 /* timeout value valid */
|
|
#define NF_BUSY 0x04 /* buffer is busy (has data) */
|
|
|
|
/*
|
|
* States for the packet capture portion of nit,
|
|
* some of which are passed to the user.
|
|
*/
|
|
#define NIT_QUIET 0 /* inactive */
|
|
#define NIT_CATCH 1 /* capturing packets */
|
|
#define NIT_NOMBUF 2 /* discarding -- out of mbufs */
|
|
#define NIT_NOCLUSTER 3 /* discarding -- out of mclusters */
|
|
#define NIT_NOSPACE 4 /* discarding -- would exceed buffer */
|
|
/* Pseudo-states returned in information packets */
|
|
#define NIT_SEQNO 5 /* sequence number of buffer -- helps
|
|
to detect other software drops */
|
|
#define NIT_MAXSTATE 6 /* state count */
|
|
|
|
#if defined(KERNEL) && defined(NIT)
|
|
struct ifnet *nit_ifwithaddr();
|
|
|
|
/* Interface provided information */
|
|
struct nit_ii {
|
|
caddr_t nii_header; /* header to be prepended to mbuf */
|
|
int nii_hdrlen; /* length of header to prepend */
|
|
u_int nii_type; /* magic "type" field for matching */
|
|
int nii_datalen; /* lenght (sans header) off wire */
|
|
int nii_promisc; /* packet not destined for host */
|
|
};
|
|
#endif defined(KERNEL) && defined(NIT)
|
|
|
|
#endif /*!_net_nit_h*/
|