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>