/*
 *  MIB statistics gathering routines
 *      for Linux architecture
 */

#ifndef _MIBGROUP_KERNEL_LINUX_H
#define _MIBGROUP_KERNEL_LINUX_H

struct ip_mib {
    unsigned long   ipForwarding;
    unsigned long   ipDefaultTTL;
    unsigned long   ipInReceives;
    unsigned long   ipInHdrErrors;
    unsigned long   ipInAddrErrors;
    unsigned long   ipForwDatagrams;
    unsigned long   ipInUnknownProtos;
    unsigned long   ipInDiscards;
    unsigned long   ipInDelivers;
    unsigned long   ipOutRequests;
    unsigned long   ipOutDiscards;
    unsigned long   ipOutNoRoutes;
    unsigned long   ipReasmTimeout;
    unsigned long   ipReasmReqds;
    unsigned long   ipReasmOKs;
    unsigned long   ipReasmFails;
    unsigned long   ipFragOKs;
    unsigned long   ipFragFails;
    unsigned long   ipFragCreates;
    unsigned long   ipRoutingDiscards;
};

struct ip6_mib {
    unsigned long ip6InReceives;
    unsigned long ip6InHdrErrors;
    unsigned long ip6InTooBigErrors;
    unsigned long ip6InNoRoutes;
    unsigned long ip6InAddrErrors;
    unsigned long ip6InUnknownProtos;
    unsigned long ip6InTruncatedPkts;
    unsigned long ip6InDiscards;
    unsigned long ip6InDelivers;
    unsigned long ip6OutForwDatagrams;
    unsigned long ip6OutRequests;
    unsigned long ip6OutDiscards;
    unsigned long ip6OutNoRoutes;
    unsigned long ip6ReasmTimeout;
    unsigned long ip6ReasmReqds;
    unsigned long ip6ReasmOKs;
    unsigned long ip6ReasmFails;
    unsigned long ip6FragOKs;
    unsigned long ip6FragFails;
    unsigned long ip6FragCreates;
    unsigned long ip6InMcastPkts;
    unsigned long ip6OutMcastPkts;
};

struct icmp_mib {
    unsigned long   icmpInMsgs;
    unsigned long   icmpInErrors;
    unsigned long   icmpInDestUnreachs;
    unsigned long   icmpInTimeExcds;
    unsigned long   icmpInParmProbs;
    unsigned long   icmpInSrcQuenchs;
    unsigned long   icmpInRedirects;
    unsigned long   icmpInEchos;
    unsigned long   icmpInEchoReps;
    unsigned long   icmpInTimestamps;
    unsigned long   icmpInTimestampReps;
    unsigned long   icmpInAddrMasks;
    unsigned long   icmpInAddrMaskReps;
    unsigned long   icmpOutMsgs;
    unsigned long   icmpOutErrors;
    unsigned long   icmpOutDestUnreachs;
    unsigned long   icmpOutTimeExcds;
    unsigned long   icmpOutParmProbs;
    unsigned long   icmpOutSrcQuenchs;
    unsigned long   icmpOutRedirects;
    unsigned long   icmpOutEchos;
    unsigned long   icmpOutEchoReps;
    unsigned long   icmpOutTimestamps;
    unsigned long   icmpOutTimestampReps;
    unsigned long   icmpOutAddrMasks;
    unsigned long   icmpOutAddrMaskReps;
};

struct icmp6_mib {
    unsigned long icmp6InMsgs;
    unsigned long icmp6InErrors;
    unsigned long icmp6InDestUnreachs;
    unsigned long icmp6InPktTooBigs;
    unsigned long icmp6InTimeExcds;
    unsigned long icmp6InParmProblems;
    unsigned long icmp6InEchos;
    unsigned long icmp6InEchoReplies;
    unsigned long icmp6InGroupMembQueries;
    unsigned long icmp6InGroupMembResponses;
    unsigned long icmp6InGroupMembReductions;
    unsigned long icmp6InRouterSolicits;
    unsigned long icmp6InRouterAdvertisements;
    unsigned long icmp6InNeighborSolicits;
    unsigned long icmp6InNeighborAdvertisements;
    unsigned long icmp6InRedirects;
    unsigned long icmp6OutMsgs;
    unsigned long icmp6OutDestUnreachs;
    unsigned long icmp6OutPktTooBigs;
    unsigned long icmp6OutTimeExcds;
    unsigned long icmp6OutParmProblems;
    unsigned long icmp6OutEchoReplies;
    unsigned long icmp6OutRouterSolicits;
    unsigned long icmp6OutNeighborSolicits;
    unsigned long icmp6OutNeighborAdvertisements;
    unsigned long icmp6OutRedirects;
    unsigned long icmp6OutGroupMembResponses;
    unsigned long icmp6OutGroupMembReductions;
};

struct icmp_msg_mib {
    unsigned long InType;
    unsigned long OutType;
};

/* Lets use wrapper structures for future expansion */
struct icmp4_msg_mib {
    struct icmp_msg_mib vals[256];
};

struct icmp6_msg_mib {
    struct icmp_msg_mib vals[256];
};

struct udp_mib {
    unsigned long   udpInDatagrams;
    unsigned long   udpNoPorts;
    unsigned long   udpInErrors;
    unsigned long   udpOutDatagrams;
};

struct udp6_mib {
    unsigned long udp6InDatagrams;
    unsigned long udp6NoPorts;
    unsigned long udp6InErrors;
    unsigned long udp6OutDatagrams;
};

struct tcp_mib {
    unsigned long   tcpRtoAlgorithm;
    unsigned long   tcpRtoMin;
    unsigned long   tcpRtoMax;
    unsigned long   tcpMaxConn;
    unsigned long   tcpActiveOpens;
    unsigned long   tcpPassiveOpens;
    unsigned long   tcpAttemptFails;
    unsigned long   tcpEstabResets;
    unsigned long   tcpCurrEstab;
    unsigned long   tcpInSegs;
    unsigned long   tcpOutSegs;
    unsigned long   tcpRetransSegs;
    unsigned long   tcpInErrs;
    unsigned long   tcpOutRsts;
    short           tcpInErrsValid;
    short           tcpOutRstsValid;
};


int             linux_read_ip_stat(struct ip_mib *);
int             linux_read_ip6_stat(struct ip6_mib *);
int             linux_read_icmp_stat(struct icmp_mib *);
int             linux_read_icmp6_stat(struct icmp6_mib *);
int             linux_read_udp_stat(struct udp_mib *);
int             linux_read_udp6_stat(struct udp6_mib *);
int             linux_read_tcp_stat(struct tcp_mib *);
int             linux_read_icmp_msg_stat(struct icmp_mib *,
                                         struct icmp4_msg_mib *,
                                         int *flag);
int             linux_read_icmp6_msg_stat(struct icmp6_mib *,
                                          struct icmp6_msg_mib *,
                                          int *support);

#endif                          /* _MIBGROUP_KERNEL_LINUX_H */
