//*****************************************************************************
//
// Name:	snmpinfo.h
//
// Description:	
//
// History:
//  01/13/94  JayPh	Created.
//
//*****************************************************************************

//*****************************************************************************
//
// Copyright (c) 1994 by Microsoft Corp.  All rights reserved.
//
//*****************************************************************************


//
// Include Files
//

#include "ipexport.h"
#include "ipinfo.h"
#include "llinfo.h"
#include "tcpinfo.h"


//
// Definitions
//

#define MAX_ID_LENGTH		50

// Table Types

#define TYPE_IF             0
#define TYPE_IP             1
#define TYPE_IPADDR         2
#define TYPE_ROUTE          3
#define TYPE_ARP            4
#define TYPE_ICMP           5
#define TYPE_TCP            6
#define TYPE_TCPCONN        7
#define TYPE_UDP            8
#define TYPE_UDPCONN        9
#define TYPE_IP6           10
#define TYPE_TCP6          11
#define TYPE_TCP6CONN      12
#define TYPE_UDP6          13
#define TYPE_UDP6LISTENER  14
#define TYPE_ICMP6         15
#define TYPE_MAX           TYPE_ICMP6


//
// Structure Definitions
//

typedef struct _GenericTable {
    LIST_ENTRY  ListEntry;
} GenericTable;

typedef struct _IfEntry {
    LIST_ENTRY  ListEntry;
    IFEntry     Info;
} IfEntry;

typedef struct _IpEntry {
    LIST_ENTRY  ListEntry;
    IPSNMPInfo  Info;
} IpEntry;

typedef struct _IpAddrEntry {
    LIST_ENTRY   ListEntry;
    IPAddrEntry  Info;
} IpAddrEntry;

typedef struct _RouteEntry {
    LIST_ENTRY    ListEntry;
    IPRouteEntry  Info;
} RouteEntry;

typedef struct _ArpEntry {
    LIST_ENTRY         ListEntry;
    IPNetToMediaEntry  Info;
} ArpEntry;

typedef struct _IcmpEntry {
    LIST_ENTRY  ListEntry;
    ICMPStats   InInfo;
    ICMPStats   OutInfo;
} IcmpEntry;

typedef struct _Icmp6Entry {
    LIST_ENTRY    ListEntry;
    ICMPv6Stats   InInfo;
    ICMPv6Stats   OutInfo;
} Icmp6Entry;

typedef struct _TcpEntry {
    LIST_ENTRY  ListEntry;
    TCPStats    Info;
} TcpEntry;

typedef struct _TcpConnEntry {
    LIST_ENTRY         ListEntry;
    TCPConnTableEntry  Info;
} TcpConnEntry;

typedef struct _Tcp6ConnEntry {
    LIST_ENTRY         ListEntry;
    TCP6ConnTableEntry Info;
} Tcp6ConnEntry;

typedef struct _UdpEntry {
    LIST_ENTRY  ListEntry;
    UDPStats    Info;
} UdpEntry;

typedef struct _UdpConnEntry {
    LIST_ENTRY  ListEntry;
    UDPEntry    Info;
} UdpConnEntry;

typedef struct _Udp6ListenerEntry {
    LIST_ENTRY        ListEntry;
    UDP6ListenerEntry Info;
} Udp6ListenerEntry;


//
// Function Prototypes
//

ulong InitSnmp( void );
void *GetTable( ulong Type, ulong *pResult );
void FreeTable( GenericTable *pList );
ulong MapSnmpErrorToNt( ulong ErrCode );
ulong InetEqual( uchar *Inet1, uchar *Inet2 );
ulong PutMsg(ulong Handle, ulong MsgNum, ... );
uchar *LoadMsg( ulong MsgNum, ... );