Annotation of embedaddon/trafshow/netstat.h, revision 1.1
1.1 ! misho 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>