/*++

Copyright (c) 1998  Microsoft Corporation

Module Name:

    routing\ip\mcastmib\defs.h

Abstract:

    IP Multicast MIB instrumentation callbacks

Revision history:

    Dave Thaler         4/17/98  Created

--*/

#ifndef _MIBFUNCS_H_
#define _MIBFUNCS_H_

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// global group                                                              //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

UINT
get_global(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

UINT
set_global(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

typedef struct _buf_global {
    AsnAny ipMRouteEnable;        
} buf_global;

#define gf_ipMRouteEnable                 get_global
#define gb_ipMRouteEnable                 buf_global

UINT
get_ipMRouteEntry(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

typedef struct _buf_ipMRouteEntry {
    AsnAny ipMRouteGroup;
    AsnAny ipMRouteSource;
    AsnAny ipMRouteSourceMask;
    AsnAny ipMRouteUpstreamNeighbor;                         
    AsnAny ipMRouteInIfIndex;                         
    AsnAny ipMRouteUpTime;                  
    AsnAny ipMRouteExpiryTime;
    AsnAny ipMRoutePkts;
    AsnAny ipMRouteDifferentInIfPackets;
    AsnAny ipMRouteOctets;
    AsnAny ipMRouteProtocol;
    AsnAny ipMRouteRtProto;
    AsnAny ipMRouteRtAddress;
    AsnAny ipMRouteRtMask;

    // Buffers for IP address objects above
    DWORD  dwIpMRouteGroupInfo;
    DWORD  dwIpMRouteSourceInfo;
    DWORD  dwIpMRouteSourceMaskInfo;
    DWORD  dwIpMRouteUpstreamNeighborInfo;
    DWORD  dwIpMRouteRtAddressInfo;
    DWORD  dwIpMRouteRtMaskInfo;
} buf_ipMRouteEntry;

#define gf_ipMRouteUpstreamNeighbor                 get_ipMRouteEntry
#define gf_ipMRouteInIfIndex                        get_ipMRouteEntry
#define gf_ipMRouteUpTime                           get_ipMRouteEntry
#define gf_ipMRouteExpiryTime                       get_ipMRouteEntry
#define gf_ipMRoutePkts                             get_ipMRouteEntry
#define gf_ipMRouteDifferentInIfPackets             get_ipMRouteEntry
#define gf_ipMRouteOctets                           get_ipMRouteEntry
#define gf_ipMRouteProtocol                         get_ipMRouteEntry
#define gf_ipMRouteRtProto                          get_ipMRouteEntry
#define gf_ipMRouteRtAddress                        get_ipMRouteEntry
#define gf_ipMRouteRtMask                           get_ipMRouteEntry

#define gb_ipMRouteGroup                            buf_ipMRouteEntry
#define gb_ipMRouteSource                           buf_ipMRouteEntry
#define gb_ipMRouteSourceMask                       buf_ipMRouteEntry
#define gb_ipMRouteUpstreamNeighbor                 buf_ipMRouteEntry
#define gb_ipMRouteInIfIndex                        buf_ipMRouteEntry
#define gb_ipMRouteUpTime                           buf_ipMRouteEntry
#define gb_ipMRouteExpiryTime                       buf_ipMRouteEntry
#define gb_ipMRoutePkts                             buf_ipMRouteEntry
#define gb_ipMRouteDifferentInIfPackets             buf_ipMRouteEntry
#define gb_ipMRouteOctets                           buf_ipMRouteEntry
#define gb_ipMRouteProtocol                         buf_ipMRouteEntry
#define gb_ipMRouteRtProto                          buf_ipMRouteEntry
#define gb_ipMRouteRtAddress                        buf_ipMRouteEntry
#define gb_ipMRouteRtMask                           buf_ipMRouteEntry

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// ipMRouteNextHopEntry table                                                //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

UINT
get_ipMRouteNextHopEntry(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

UINT
set_ipMRouteNextHopEntry(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

typedef struct _buf_ipMRouteNextHopEntry {
    AsnAny ipMRouteNextHopGroup;
    AsnAny ipMRouteNextHopSource;
    AsnAny ipMRouteNextHopSourceMask;
    AsnAny ipMRouteNextHopIfIndex;
    AsnAny ipMRouteNextHopAddress;

    AsnAny ipMRouteNextHopState;                  
    AsnAny ipMRouteNextHopUpTime;                 
    AsnAny ipMRouteNextHopExpiryTime;             
#ifdef CLOSEST_MEMBER_HOPS
    AsnAny ipMRouteNextHopClosestMemberHops;             
#endif
    AsnAny ipMRouteNextHopProtocol;             
    AsnAny ipMRouteNextHopPkts;             

    // Buffers for IP Address objects above
    DWORD  dwIpMRouteNextHopGroupInfo;
    DWORD  dwIpMRouteNextHopSourceInfo;
    DWORD  dwIpMRouteNextHopSourceMaskInfo;
    DWORD  dwIpMRouteNextHopAddressInfo;
} buf_ipMRouteNextHopEntry;

typedef struct _sav_ipMRouteNextHopEntry {
    AsnAny ipMRouteNextHopState;                  
    AsnAny ipMRouteNextHopUpTime;                 
    AsnAny ipMRouteNextHopExpiryTime;             
#ifdef CLOSEST_MEMBER_HOPS
    AsnAny ipMRouteNextHopClosestMemberHops;             
#endif
    AsnAny ipMRouteNextHopProtocol;             
    AsnAny ipMRouteNextHopPkts;             
} sav_ipMRouteNextHopEntry;

#define gf_ipMRouteNextHopState                 get_ipMRouteNextHopEntry
#define gf_ipMRouteNextHopUpTime                get_ipMRouteNextHopEntry
#define gf_ipMRouteNextHopExpiryTime            get_ipMRouteNextHopEntry
#ifdef CLOSEST_MEMBER_HOPS
#define gf_ipMRouteNextHopClosestMemberHops     get_ipMRouteNextHopEntry
#endif
#define gf_ipMRouteNextHopProtocol              get_ipMRouteNextHopEntry
#define gf_ipMRouteNextHopPkts                  get_ipMRouteNextHopEntry

#define gb_ipMRouteNextHopGroup                 buf_ipMRouteNextHopEntry
#define gb_ipMRouteNextHopSource                buf_ipMRouteNextHopEntry
#define gb_ipMRouteNextHopSourceMask            buf_ipMRouteNextHopEntry
#define gb_ipMRouteNextHopIfIndex               buf_ipMRouteNextHopEntry
#define gb_ipMRouteNextHopAddress               buf_ipMRouteNextHopEntry
#define gb_ipMRouteNextHopState                 buf_ipMRouteNextHopEntry
#define gb_ipMRouteNextHopUpTime                buf_ipMRouteNextHopEntry
#define gb_ipMRouteNextHopExpiryTime            buf_ipMRouteNextHopEntry
#ifdef CLOSEST_MEMBER_HOPS
#define gb_ipMRouteNextHopClosestMemberHops     buf_ipMRouteNextHopEntry
#endif
#define gb_ipMRouteNextHopProtocol              buf_ipMRouteNextHopEntry
#define gb_ipMRouteNextHopPkts                  buf_ipMRouteNextHopEntry

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// ipMRouteInterfaceEntry table                                              //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

UINT
get_ipMRouteInterfaceEntry(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

UINT
set_ipMRouteInterfaceEntry(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

typedef struct _buf_ipMRouteInterfaceEntry {
    AsnAny ipMRouteInterfaceIfIndex;
    AsnAny ipMRouteInterfaceTtl;
    AsnAny ipMRouteInterfaceProtocol;
    AsnAny ipMRouteInterfaceRateLimit;
    AsnAny ipMRouteInterfaceInMcastOctets;
    AsnAny ipMRouteInterfaceOutMcastOctets;
} buf_ipMRouteInterfaceEntry;

typedef struct _sav_ipMRouteInterfaceEntry {
    AsnAny ipMRouteInterfaceIfIndex;
    AsnAny ipMRouteInterfaceTtl;
    AsnAny ipMRouteInterfaceProtocol;
    AsnAny ipMRouteInterfaceRateLimit;
} sav_ipMRouteInterfaceEntry;
                        
#define gf_ipMRouteInterfaceIfIndex         get_ipMRouteInterfaceEntry
#define gf_ipMRouteInterfaceTtl             get_ipMRouteInterfaceEntry
#define gf_ipMRouteInterfaceProtocol        get_ipMRouteInterfaceEntry
#define gf_ipMRouteInterfaceRateLimit       get_ipMRouteInterfaceEntry
#define gf_ipMRouteInterfaceInMcastOctets   get_ipMRouteInterfaceEntry
#define gf_ipMRouteInterfaceOutMcastOctets  get_ipMRouteInterfaceEntry

#define gb_ipMRouteInterfaceIfIndex         buf_ipMRouteInterfaceEntry
#define gb_ipMRouteInterfaceTtl             buf_ipMRouteInterfaceEntry
#define gb_ipMRouteInterfaceProtocol        buf_ipMRouteInterfaceEntry
#define gb_ipMRouteInterfaceRateLimit       buf_ipMRouteInterfaceEntry
#define gb_ipMRouteInterfaceInMcastOctets   buf_ipMRouteInterfaceEntry
#define gb_ipMRouteInterfaceOutMcastOctets  buf_ipMRouteInterfaceEntry

#define sf_ipMRouteInterfaceIfIndex         set_ipMRouteInterfaceEntry
#define sf_ipMRouteInterfaceTtl             set_ipMRouteInterfaceEntry
#define sf_ipMRouteInterfaceProtocol        set_ipMRouteInterfaceEntry
#define sf_ipMRouteInterfaceRateLimit       set_ipMRouteInterfaceEntry

#define sb_ipMRouteInterfaceIfIndex         sav_ipMRouteInterfaceEntry
#define sb_ipMRouteInterfaceTtl             sav_ipMRouteInterfaceEntry
#define sb_ipMRouteInterfaceProtocol        sav_ipMRouteInterfaceEntry
#define sb_ipMRouteInterfaceRateLimit       sav_ipMRouteInterfaceEntry

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// ipMRouteBoundaryEntry table                                               //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

UINT
get_ipMRouteBoundaryEntry(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

UINT
set_ipMRouteBoundaryEntry(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

typedef struct _buf_ipMRouteBoundaryEntry {
    AsnAny ipMRouteBoundaryIfIndex;
    AsnAny ipMRouteBoundaryAddress;
    AsnAny ipMRouteBoundaryAddressMask;
    AsnAny ipMRouteBoundaryStatus;

    // Buffers for IP address objects above
    DWORD  dwIpMRouteBoundaryAddressInfo;
    DWORD  dwIpMRouteBoundaryAddressMaskInfo;
} buf_ipMRouteBoundaryEntry;

typedef struct _sav_ipMRouteBoundaryEntry {
    // Index terms
    AsnAny ipMRouteBoundaryIfIndex;
    AsnAny ipMRouteBoundaryAddress;
    AsnAny ipMRouteBoundaryAddressMask;

    // Writable objects
    AsnAny ipMRouteBoundaryStatus;
} sav_ipMRouteBoundaryEntry;

#define gf_ipMRouteBoundaryStatus               get_ipMRouteBoundaryEntry

#define gb_ipMRouteBoundaryIfIndex              buf_ipMRouteBoundaryEntry
#define gb_ipMRouteBoundaryAddress              buf_ipMRouteBoundaryEntry
#define gb_ipMRouteBoundaryAddressMask          buf_ipMRouteBoundaryEntry
#define gb_ipMRouteBoundaryStatus               buf_ipMRouteBoundaryEntry

#define sf_ipMRouteBoundaryStatus               set_ipMRouteBoundaryEntry

#define sb_ipMRouteBoundaryIfIndex              sav_ipMRouteBoundaryEntry
#define sb_ipMRouteBoundaryAddress              sav_ipMRouteBoundaryEntry
#define sb_ipMRouteBoundaryAddressMask          sav_ipMRouteBoundaryEntry
#define sb_ipMRouteBoundaryStatus               sav_ipMRouteBoundaryEntry

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// ipMRouteScopeEntry table                                                  //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

UINT
get_ipMRouteScopeEntry(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

UINT
set_ipMRouteScopeEntry(
    UINT     actionId,
    AsnAny * objectArray,
    UINT *   errorIndex
    );

typedef struct _buf_ipMRouteScopeEntry {
    AsnAny ipMRouteScopeAddress;
    AsnAny ipMRouteScopeAddressMask;
    AsnAny ipMRouteScopeName;
    AsnAny ipMRouteScopeStatus;

    // Buffers for IP address and string objects above
    DWORD  dwIpMRouteScopeAddressInfo;
    DWORD  dwIpMRouteScopeAddressMaskInfo;
    BYTE   rgbyScopeNameInfo[MAX_SCOPE_NAME_LEN+1];
} buf_ipMRouteScopeEntry;

typedef struct _sav_ipMRouteScopeEntry {
    // Index terms
    AsnAny ipMRouteScopeAddress;
    AsnAny ipMRouteScopeAddressMask;

    // Writable objects
    AsnAny ipMRouteScopeName;
    AsnAny ipMRouteScopeStatus;

    // Buffers
    BYTE   rgbyScopeNameInfo[MAX_SCOPE_NAME_LEN+1];
} sav_ipMRouteScopeEntry;

#define gf_ipMRouteScopeName                 get_ipMRouteScopeEntry
#define gf_ipMRouteScopeStatus               get_ipMRouteScopeEntry

#define gb_ipMRouteScopeAddress              buf_ipMRouteScopeEntry
#define gb_ipMRouteScopeAddressMask          buf_ipMRouteScopeEntry
#define gb_ipMRouteScopeName                 buf_ipMRouteScopeEntry
#define gb_ipMRouteScopeStatus               buf_ipMRouteScopeEntry

#define sf_ipMRouteScopeName                 set_ipMRouteScopeEntry
#define sf_ipMRouteScopeStatus               set_ipMRouteScopeEntry

#define sb_ipMRouteScopeAddress              sav_ipMRouteScopeEntry
#define sb_ipMRouteScopeAddressMask          sav_ipMRouteScopeEntry
#define sb_ipMRouteScopeName                 sav_ipMRouteScopeEntry
#define sb_ipMRouteScopeStatus               sav_ipMRouteScopeEntry

#endif // _MIBFUNCS_H_