File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / trafshow / netstat.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 16:55:18 2012 UTC (12 years, 3 months ago) by misho
Branches: trafshow, MAIN
CVS tags: v5_2_3p0, v5_2_3, HEAD
trafshow

    1: /*
    2:  *	Copyright (c) 2004 Rinet Corp., Novosibirsk, Russia
    3:  *
    4:  * Redistribution and use in source forms, with and without modification,
    5:  * are permitted provided that this entire comment appears intact.
    6:  *
    7:  * THIS SOURCE CODE IS PROVIDED ``AS IS'' WITHOUT ANY WARRANTIES OF ANY KIND.
    8:  */
    9: 
   10: #ifndef	_NETSTAT_H_
   11: #define	_NETSTAT_H_
   12: 
   13: #include <sys/types.h>
   14: #include <sys/time.h>
   15: #ifdef	linux
   16: #include <linux/if.h>
   17: #else
   18: #include <net/if.h>
   19: #endif
   20: #include <netinet/in.h>
   21: #include <netinet/if_ether.h>
   22: 
   23: #ifndef	IPPORT_RESERVED
   24: #define	IPPORT_RESERVED	1024
   25: #endif
   26: #ifndef	IPPORT_DYNAMIC
   27: #define	IPPORT_DYNAMIC	49152
   28: #endif
   29: 
   30: /*
   31:  * Any struct defined here is a storage contained all data.
   32:  */
   33: 
   34: /*
   35:  * Internet flow record address.
   36:  */
   37: struct ip_address {
   38: 	union {
   39: 		struct in_addr ipa4;
   40: #ifdef	INET6
   41: 		struct in6_addr ipa6;
   42: #endif
   43: 	} ipaddr;
   44: 	u_int16_t ip_port;
   45: };
   46: 
   47: #define	ip_addr		ipaddr.ipa4
   48: #ifdef	INET6
   49: #define	ip6_addr	ipaddr.ipa6
   50: #endif
   51: 
   52: /*
   53:  * Internet flow record header.
   54:  */
   55: struct internet_header {
   56: 	u_int8_t ver;			/* ip version */
   57: 	u_int8_t proto;			/* ip protocol */
   58: 	struct ip_address src;		/* source ip address */
   59: 	struct ip_address dst;		/* destination ip address */
   60: };
   61: 
   62: #ifndef	ETHER_ADDR_LEN
   63: #ifdef	HAVE_ETHER_ADDR
   64: #define	ETHER_ADDR_LEN	sizeof(struct ether_addr)
   65: #else
   66: #define	ETHER_ADDR_LEN	6
   67: #endif
   68: #endif
   69: 
   70: /*
   71:  * Ethernet flow record header.
   72:  */
   73: struct ethernet_header {
   74: 	u_char src[ETHER_ADDR_LEN];	/* source ether address */
   75: 	u_char dst[ETHER_ADDR_LEN];	/* destination ether address */
   76: 	u_int16_t type;			/* ether type */
   77: 	union {
   78: 		u_int16_t tag;		/* ether dot1q tag */
   79: 		struct {		/* IEEE 802.3 LLC header */
   80: 			u_char ssap;	/* source SAP ID */
   81: 			u_char dsap;	/* destination SAP ID */
   82: 		} llc;
   83: 	} param;
   84: };
   85: 
   86: #define	ETH_VIDOFTAG(tag)	((tag) & 0xfff)
   87: #define	ETH_PRIOFTAG(tag)	(((tag) >> 13) & 7)
   88: #define	ETH_CFIOFTAG(tag)	(((tag) >> 12) & 1)
   89: 
   90: struct netstat_header {
   91: 	struct ethernet_header en_hdr;	/* ether flow record header */
   92: 	struct internet_header in_hdr;	/* inet flow record header */
   93: };
   94: 
   95: typedef	struct netstat {
   96: 	/* all header fields in network byte order */
   97: 	struct netstat_header ns_hdr; /* must be first in struct netstat! */
   98: 
   99: #define	eth_src_addr	ns_hdr.en_hdr.src
  100: #define	eth_dst_addr	ns_hdr.en_hdr.dst
  101: #define	eth_type	ns_hdr.en_hdr.type
  102: #define	eth_tag		ns_hdr.en_hdr.param.tag
  103: #define	eth_ssap	ns_hdr.en_hdr.param.llc.ssap
  104: #define	eth_dsap	ns_hdr.en_hdr.param.llc.dsap
  105: 
  106: #define	ip_ver		ns_hdr.in_hdr.ver
  107: #define	ip_proto	ns_hdr.in_hdr.proto
  108: #define	ip_src_addr	ns_hdr.in_hdr.src
  109: #define	ip_dst_addr	ns_hdr.in_hdr.dst
  110: 
  111: 	/* all data fields in host byte order */
  112: 	struct timeval mtime;		/* last modification time */
  113: 
  114: 	u_int32_t pkt_cnt;		/* packet counter */
  115: 	u_int32_t pkt_len;		/* length of ip packet */
  116: 	u_int32_t data_len;		/* length of ip data */
  117: 
  118: 	u_int32_t gain_pkt_cnt;
  119: 	u_int32_t gain_pkt_len;
  120: 	u_int32_t gain_data_len;
  121: 
  122: 	u_int32_t pkt_cnt_rate;		/* rate of packet counter */
  123: 	u_int32_t pkt_len_rate;		/* rate of packet length */
  124: 	u_int32_t data_len_rate;	/* rate of data length */
  125: 
  126: 	int attr;			/* curses video attributes */
  127: 
  128: } NETSTAT;
  129: 
  130: 
  131: struct pcap_handler;
  132: void netstat_aggregate(struct netstat_header *nh, int bits);
  133: int netstat_count(const struct pcap_handler *ph);
  134: int netstat_insert(struct pcap_handler *ph, const NETSTAT *ns);
  135: int netstat_find(struct pcap_handler *ph, NETSTAT *ns);
  136: int netstat_purge(struct pcap_handler *ph, const struct timeval *at);
  137: void netstat_free(struct pcap_handler *ph);
  138: int netstat_match(const NETSTAT *ns1, const NETSTAT *ns2);
  139: int netstat_bidir(const NETSTAT *ns1, const NETSTAT *ns2);
  140: int netstat_fetch(NETSTAT **list[], struct pcap_handler *ph);
  141: 
  142: #endif	/* !_NETSTAT_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>