Files
m241Neelima/vxworks-6.9/target/h/wrn/wm/snmp/engine/agentx.h
T
2026-07-30 11:19:44 +05:30

600 lines
20 KiB
C

/* $Header: /usr/cvsroot/target/h/wrn/wm/snmp/engine/agentx.h,v 1.9 2002/05/30 17:24:54 andre Exp $ */
/*
* Copyright (C) 1999-2005 Wind River Systems, Inc.
* All rights reserved. Provided under license only.
* Distribution or other use of this software is only
* permitted pursuant to the terms of a license agreement
* from Wind River Systems (and is otherwise prohibited).
* Refer to that license agreement for terms of use.
*/
/****************************************************************************
* Copyright 1994-1997 Epilogue Technology Corporation.
* Copyright 1998 Integrated Systems, Inc.
* All rights reserved.
****************************************************************************/
/*
* $Log: agentx.h,v $
* Revision 1.9 2002/05/30 17:24:54 andre
* Add placeholder definition for AX_RESPONSE_PREPROCESS
*
* Revision 1.8 2002/04/09 14:18:35 tneale
* REGLIST changes to handle list-based registration
*
* Revision 1.7 2002/03/28 14:37:07 tneale
* Removed externs of old mib variables
*
* Revision 1.6 2002/03/20 20:20:41 tneale
* Fixed multiple definition of ENVOY_AX_PARSE_ERROR
*
* Revision 1.5 2002/03/19 21:47:01 tneale
* Changed Agentx protocol error codes per RFC2741
*
* Revision 1.4 2002/03/18 16:05:43 tneale
* Added cmonnect_id member to Session structure
*
* Revision 1.3 2002/03/12 15:54:39 tneale
* Added structure definition for the registration list
*
* Revision 1.2 2001/11/06 21:35:00 josh
* new revised path structure, first pass. Also removing useless
* shell include files.
*
* Revision 1.1.1.1 2001/11/05 17:47:22 tneale
* Tornado shuffle
*
* Revision 9.6.4.1 2001/08/17 20:38:43 meister
* Added prototypes for some agentx helper functions which were previously
* declared statically. Added prototypes for agentx and v3 dynamic config init
* functions.
*
* Revision 9.6 2001/01/19 22:22:02 paul
* Update copyright.
*
* Revision 9.5 2000/03/17 19:48:27 meister
* Update copyright notice
*
* Revision 9.4 2000/03/09 20:58:32 tneale
* All structure definitions are now bracketted with a test that
* potentially sets an alignment pragma. This is to maintain compatibility
* with the code base that had been distributed by Wind River.
*
* Revision 9.3 2000/03/09 16:53:16 tneale
* Added #ifdef for C++ to declare extern C if needed
*
* Revision 9.2 1999/12/23 14:47:26 josh
* cleaning up code per Shawn's comments -- removing extraneous
* comments and doing proxy check before notify check
*
* Revision 9.1 1999/03/30 15:20:13 josh
* feature to allow customer-driven context conversion into AgentX
*
* Revision 9.0 1998/10/16 22:10:03 sar
* Update version stamp to match release
*
* Revision 8.2 1998/08/12 04:52:15 sar
* revamp the initialization routines to limit the amount of
* code that might get pulled in.
*
* Revision 8.1 1998/02/25 04:50:19 sra
* Update copyrights.
*
* Revision 8.0 1997/11/18 00:56:19 sar
* Updated revision to 8.0
*
* Revision 7.4 1997/10/30 04:23:16 sar
* Update type information mostly convert bits16_ts to ALENGTH_Ts
* also add MAX_ALENGTH
*
* Revision 7.3 1997/10/29 04:11:40 sar
* Cleaned up some type mismatches to keep compilers happy
*
* Revision 7.2 1997/10/21 02:53:37 sar
* Added defines for transport types and index allocate and deallocate macros
* and removed leaf decrement function
*
* Revision 7.1 1997/10/16 00:25:16 sar
* Primarily this set of modifications is for the agentx protocol.
* Most of the work was in the agentx.h and ax_mth.h files. Most
* other files (snmpdefs.h, vbdefs.h and mib.h) received updates
* to their structures and snmp got some new lock macros.
*
* One other change of note was the modification of continue
* processing. Previously we called a specific continue routine
* directly, now we store a pointer to the corret continue
* function in the snmp packet structure and call that. We include
* macros for backwards compatibility.
*
*/
/* [clearcase]
modification history
-------------------
01b,19apr05,job update copyright notices
01a,04aug04,job dropped connection handling
*/
#if (!defined(envoy_agentx_inc))
#define envoy_agentx_inc
#ifdef __cplusplus
extern"C" {
#endif
#include <wrn/wm/snmp/engine/asn1conf.h>
#include <wrn/wm/snmp/engine/asn1.h>
#include <wrn/wm/snmp/engine/buffer.h>
#include <wrn/wm/snmp/engine/vbdefs.h>
#include <wrn/wm/snmp/engine/etimer.h>
#include <wrn/wm/snmp/engine/tree.h>
/*extern struct ENVOY_AX_PKT_S;
extern struct SNMP_PKT_S;*/
typedef void ENVOY_AX_ADMIN_T (ptr_t, ptr_t);
typedef int ENVOY_AX_SEND_T (ptr_t, ptr_t, ptr_t, ALENGTH_T);
typedef void ENVOY_AX_ERROR_T (ptr_t, int);
typedef void ENVOY_AX_ADD_T (ptr_t);
#define ENVOY_AX_MASTER_PORT 705
#ifdef WINDNET_STRUCT_ALIGN
#pragma align 1
#endif
/* Define a chunk block for agentx, this is used by the byte_handler
code to save and build a packet when it arrives in chunks rather
than all at once */
typedef struct ENVOY_AX_CHUNK_S
{
EBUFFER_T chunk;
} ENVOY_AX_CHUNK_T;
/* Define a state block for the sub agent, primarily this will
be useful if you want to have multiple sub agents in the same
process space */
typedef struct ENVOY_AX_SA_SB_S
{
struct ENVOY_AX_PKT_S *set_list; /* list of outstanding set requests */
struct ENVOY_AX_PKT_S *gnb_list; /* list of deferred gnb requests */
bits32_t readers; /* number of outstanding gnb reqs */
ENVOY_TIMER_T ager; /* timer block for aging pkts */
ENVOY_TIMER_T defer; /* timer block for deferring pkts */
bits32_t flags; /* currently only if the timer has
been set */
#if INSTALL_ENVOY_SNMP_LOCK
ENVOY_LOCK_T list_lock; /* lock for manipulating this struct
and the structs on the two lists */
ENVOY_LOCK_T coarse_lock; /* lock for manipulating the mib db */
#endif
} ENVOY_AX_SA_SB_T;
/* Define the agentx structure */
typedef struct ENVOY_AX_PKT_S
{
bits8_t version; /* The agentx protocol version */
bits8_t type; /* The agentx pdu type, see below */
bits8_t flags; /* Agentx flags, also see below */
bits32_t session_id; /* session id between mast & sub */
bits32_t transaction_id; /* groups agentx pkts to snmp pkts */
bits32_t packet_id; /* associates response pkts to reqs */
EBUFFER_T context; /* context, optional, see flags */
ENVOY_AX_SEND_T *send; /* io completion routine */
ENVOY_AX_ERROR_T *error; /* error completion routine */
ptr_t cookie; /* cookie for comp routines */
struct SNMP_PKT_S *pktp; /* snmp packet we've turned this agentx
request into for processing */
ENVOY_AX_SA_SB_T *sasb; /* pointer to the state block for
this sub agent */
struct ENVOY_AX_PKT_S *next; /* next pointer for lists */
bits32_t ts; /* timestamp for aging pkts */
bits32_t sysuptime; /* these 3 are only used in */
bits16_t error_stat; /* responses */
bits16_t error_index;
union { /* pdu data, one of the following */
bits8_t reason; /* enum for reason for closing */
struct { /* used for opens, add caps and */
bits8_t timeout; /* remove caps */
bits8_t prefix;
OBJ_ID_T sub_id;
EBUFFER_T descr;
} open_data;
struct { /* used for (un)registers */
bits8_t timeout;
bits8_t priority;
bits8_t range;
OBJ_ID_T region;
OIDC_T bound;
} reg_data;
struct { /* gets, nexts, bulks, test sets, */
bits16_t non_reps; /* responses, notifies and index */
bits16_t max_reps; /* (de)allocates */
VBL_T vbl_str;
bits8_t cur_phase; /* current phase of set processing */
/* same as vb flags */
bits32_t next_pid; /* info for the next phase */
bits8_t next_phase; /* of set processing, what */
ENVOY_AX_SEND_T *next_send; /* to do, and any comp info */
ENVOY_AX_ERROR_T *next_error;
ptr_t *next_cookie;
} proc_data;
} data;
} ENVOY_AX_PKT_T;
/* AgentX pdu types */
#define ENVOY_AX_OPEN 1
#define ENVOY_AX_CLOSE 2
#define ENVOY_AX_REGISTER 3
#define ENVOY_AX_UNREGISTER 4
#define ENVOY_AX_GET 5
#define ENVOY_AX_NEXT 6
#define ENVOY_AX_BULK 7
#define ENVOY_AX_TEST 8
#define ENVOY_AX_COMMIT 9
#define ENVOY_AX_UNDO 10
#define ENVOY_AX_CLEANUP 11
#define ENVOY_AX_NOTIFY 12
#define ENVOY_AX_PING 13
#define ENVOY_AX_INDEX_ALLOCATE 14
#define ENVOY_AX_INDEX_DEALLOCATE 15
#define ENVOY_AX_ADD_AC 16
#define ENVOY_AX_REMOVE_AC 17
#define ENVOY_AX_RESPONSE 18
/* AgentX flag bits */
#define ENVOY_AX_BIT_INSTANCE 1
#define ENVOY_AX_BIT_NEW_INDEX 2
#define ENVOY_AX_BIT_ANY_INDEX 4
#define ENVOY_AX_BIT_NDC 8 /* non-default context bit, when set
optional context field is used */
#define ENVOY_AX_BIT_BYTE_ORDER 16 /* when set, network byte order used */
/* reasons for closing a connection */
#define ENVOY_AX_CLOSE_OTHER 1
#define ENVOY_AX_CLOSE_PARSE 2
#define ENVOY_AX_CLOSE_PROTO 3
#define ENVOY_AX_CLOSE_TIMEOUTS 4
#define ENVOY_AX_CLOSE_SHUTDOWN 5
#define ENVOY_AX_CLOSE_MANAGER 6
/* AgentX codes for the next phase of sets */
#define ENVOY_AX_NEXT_CLEANUP_START 1
#define ENVOY_AX_NEXT_UNDO_START 2
/* AgentX Protocol error codes */
#define ENVOY_AX_OPEN_FAILED 256
#define ENVOY_AX_NOT_OPEN 257
#define ENVOY_AX_INDEX_WRONG_TYPE 258
#define ENVOY_AX_INDEX_ALREADY_ALLOCATED 259
#define ENVOY_AX_INDEX_NONE_AVAILABLE 260
#define ENVOY_AX_INDEX_NOT_ALLOCATED 261
#define ENVOY_AX_UNSUPPORTED_CONTEXT 262
#define ENVOY_AX_DUPLICATE_REGISTRATION 263
#define ENVOY_AX_UNKNOWN_REGISTRATION 264
#define ENVOY_AX_UNKNOWN_AGENT_CAPS 265
#define ENVOY_AX_PROTOCOL_PARSE_ERROR 266
#define ENVOY_AX_REQUEST_DENIED 267
#define ENVOY_AX_PROCESSING_ERROR 268
#define ENVOY_AX_OTHER 0xffff
/* AgentX error codes */
#define ENVOY_AX_ALLOCATION_FAILURE 1
#define ENVOY_AX_BAD_VALUE 2
#define ENVOY_AX_TOO_SMALL 3
#define ENVOY_AX_BAD_SIZE 4
#define ENVOY_AX_WRONG_VERSION 5
#define ENVOY_AX_PARSE_ERROR 6
#define ENVOY_AX_BAD_OPERATION 7
#define ENVOY_AX_SESS_LOSS 8
#define ENVOY_AX_TOO_BIG 9
/* AgentX packet access macros */
#define ax_pkt_get_context(PKTP) (&(PKTP)->context)
/* AgentX version stamps */
#define ENVOY_AX_VERSION_1 1
#define ENVOY_AX_VERSION_MAXIMUM 1
/* AgentX session admin status codes */
#define ENVOY_AX_SESSION_UP 1
#define ENVOY_AX_SESSION_DOWN 2
/* globals variables for subagents */
#ifndef ENVOY_AX_SA_TIMEOUT
#define ENVOY_AX_SA_TIMEOUT 1000
#endif
extern bits32_t envoy_ax_sa_timeout;
extern void envoy_ax_sa_init (void);
extern void envoy_ax_pkt_init (ENVOY_AX_PKT_T *);
extern ENVOY_AX_PKT_T *envoy_ax_pkt_allocate (void);
extern ALENGTH_T envoy_ax_pkt_size (ENVOY_AX_PKT_T *, VB_T *);
extern void envoy_ax_pkt_clean (ENVOY_AX_PKT_T *);
extern void envoy_ax_pkt_free (ENVOY_AX_PKT_T *);
extern int envoy_ax_pkt_encode (ENVOY_AX_PKT_T *, VB_T *,
EBUFFER_T *, ALENGTH_T);
extern ENVOY_AX_PKT_T *envoy_ax_pkt_decode (bits8_t *, ALENGTH_T, int *);
extern ENVOY_AX_PKT_T *envoy_ax_pkt_create_all(int *, bits8_t, bits8_t,
bits8_t, bits32_t, bits32_t,
bits8_t, bits32_t, bits8_t *,
int, OBJ_ID_T *, bits8_t,
bits8_t, bits8_t, OIDC_T,
bits32_t, bits8_t *, int,
bits8_t);
extern int envoy_ax_pkt_create_open (EBUFFER_T *, bits8_t, bits8_t,
bits32_t, bits8_t, bits32_t,
bits8_t *, OBJ_ID_T *);
extern int envoy_ax_pkt_create_close (EBUFFER_T *, bits8_t, bits8_t,
bits32_t, bits32_t, bits8_t);
extern int envoy_ax_pkt_create_registrations(EBUFFER_T *, bits8_t, bits8_t,
bits8_t, bits32_t, bits32_t,
bits8_t, bits8_t, bits8_t,
OBJ_ID_T *, OIDC_T, bits32_t,
bits8_t *);
extern int envoy_ax_pkt_create_ping (EBUFFER_T *, bits8_t, bits8_t,
bits32_t, bits32_t, bits32_t,
bits8_t *);
extern int envoy_ax_pkt_create_agent_caps(EBUFFER_T *, bits8_t, bits8_t,
bits8_t, bits32_t, bits32_t,
bits32_t, bits8_t *, bits32_t,
bits8_t *, OBJ_ID_T *);
extern ENVOY_AX_PKT_T *envoy_ax_pkt_create_variables(int *, bits8_t,
bits8_t, bits8_t,
bits32_t, bits32_t,
bits32_t, bits8_t *,
int, int);
extern int envoy_ax_bind_integer (ENVOY_AX_PKT_T *, int, int, OIDC_T *,
sbits32_t);
extern int envoy_ax_bind_ip_address(ENVOY_AX_PKT_T *, int, int, OIDC_T *,
bits8_t *);
extern int envoy_ax_bind_null (ENVOY_AX_PKT_T *, int, int, OIDC_T *);
extern int envoy_ax_bind_object_id (ENVOY_AX_PKT_T *, int, int, OIDC_T *,
int, OIDC_T *);
extern int envoy_ax_bind_string (ENVOY_AX_PKT_T *, int, int, OIDC_T *,
bits8_t, int, bits8_t *, int);
extern int envoy_ax_bind_uint_64 (ENVOY_AX_PKT_T *, int, int, OIDC_T *,
bits8_t, bits32_t, bits32_t);
extern int envoy_ax_bind_uint (ENVOY_AX_PKT_T *, int, int, OIDC_T *,
bits8_t, bits32_t);
extern void envoy_ax_sa_handler(bits8_t *, ALENGTH_T, ENVOY_AX_SA_SB_T *,
ENVOY_AX_ADMIN_T *, ENVOY_AX_SEND_T *,
ENVOY_AX_ERROR_T *, ptr_t);
extern int _snmp_find_next_helper_ax(MIBNODE_T *, int,
OIDC_T*, OBJ_ID_T *, int, VB_T *,
SNMP_PKT_T *, int);
extern int _snmp_find_next_bound(MIBNODE_T *, VB_T *);
#if INSTALL_COMMON_DYNAMIC_COMP_CONFIG
extern void ax_dyncfg_init(void);
#endif
extern ENVOY_AX_SA_SB_T *envoy_ax_sa_state_create(void);
extern void envoy_ax_sa_state_init (ENVOY_AX_SA_SB_T *);
extern int envoy_ax_sa_session_loss(ENVOY_AX_SA_SB_T *, ptr_t,
int, bits32_t);
typedef struct ENVOY_AX_SESSION_S
{
struct ENVOY_AX_SESSION_S *next;/* next session in the list */
bits32_t session_id; /* id for this session */
bits32_t connection_id; /* id for this connection */
bits8_t version; /* protocol version for this session */
bits8_t timeout; /* default timeout period */
bits8_t flags; /* flags, currently byte order */
ENVOY_AX_SEND_T *send; /* routine to send to sub agent */
ENVOY_AX_ERROR_T *error; /* routine to free the cookie */
ptr_t cookie; /* cookie for use with send rtn */
OBJ_ID_T sub_id; /* tag for sub agent */
EBUFFER_T descr; /* string for sub agent */
bits32_t timestamp; /* when this session started */
bits32_t timeout_count; /* number of consecutive timeouts */
} ENVOY_AX_SESSION_T;
typedef struct ENVOY_AX_MA_REG_S
{
bits32_t reg_index; /* index for use in agentx mib */
bits32_t context_id; /* index of context for this object */
bits8_t priority; /* priority for this object */
MIBLEAF_T *leaf; /* leaf for use in the mib tree
also contains session, priority
and timeout information */
struct ENVOY_AX_MA_REG_S *next;
struct ENVOY_AX_MA_REG_S *mib_next;
} ENVOY_AX_MA_REG_T;
typedef struct ENVOY_AX_MA_REGLIST_S
{
struct ENVOY_AX_MA_REGLIST_S *next; /* next registration in the list */
bits32_t reg_index; /* index for use in agentx mib */
bits32_t session_id; /* id for this session */
bits32_t connection_id; /* id for this connection */
bits8_t range_id; /* subid which has range, if any */
OIDC_T bound; /* upper bound of range, if any */
bits8_t flags; /* non-zero if this is an instance */
MIBLEAF_T *mibleaf; /* MIB leaf that has more info on this reg. */
struct ENVOY_AX_MA_REGLIST_S *match; /* For list of registrations w/same OID */
bits32_t context_id; /* id for this context */
bits8_t priority; /* priority of this registration */
OBJ_ID_T start_oid; /* registered subtree, or start if range */
} ENVOY_AX_MA_REGLIST_T;
typedef struct ENVOY_AX_CONTEXT_S
{
bits32_t id; /* this context's index in the list */
struct ENVOY_AX_CONTEXT_S *next; /* ptr to next element in list */
EBUFFER_T context; /* string for the context */
MIBNODE_T *mibroot; /* mib root node the user gave us */
TREENODE_T *indexroot; /* root for possible indexes */
} ENVOY_AX_CONTEXT_T;
/* control structure for outstanding agentx requests */
typedef struct AX_CB_S
{
struct AX_CB_S *next;
bits32_t reqid;
SNMP_PKT_T *pktp;
VB_T *vbp;
int count;
} AX_CB_T;
/* global variables used by an agentx master to keep state */
#ifndef ENVOY_AX_DEFAULT_TIMEOUT
#define ENVOY_AX_DEFAULT_TIMEOUT 1
#endif
#ifndef SNMP_AX_TIMEOUT_COUNT
#define SNMP_AX_TIMEOUT_COUNT 3
#endif
/* General sub-agent response packet pre-processing. */
#ifndef AX_RESPONSE_PREPROCESS
#define AX_RESPONSE_PREPROCESS(PKT)
#endif
extern bits32_t agentxDefaultTimeout;
extern AX_CB_T *first_axcb;
extern bits32_t ax_reqid;
extern bits32_t ax_registration_id;
extern TREENODE_T *registration_root;
extern bits32_t agentxRegisterDuplicate;
extern bits32_t envoy_ax_session_id;
extern ENVOY_AX_SESSION_T *envoy_ax_session_list;
extern ENVOY_AX_MA_REGLIST_T *envoy_ax_registration_list;
extern bits32_t context_list_id;
extern ENVOY_AX_CONTEXT_T *context_list;
extern sbits32_t agentxMasterAgentXVer;
extern void envoy_ax_ma_init (void);
extern void envoy_ax_ma_handler(bits8_t *, ALENGTH_T, ENVOY_AX_SA_SB_T *,
ENVOY_AX_ADMIN_T *, ENVOY_AX_SEND_T *,
ENVOY_AX_ERROR_T *, ptr_t);
extern int envoy_ax_ma_cleanup_sessions(ptr_t, bits8_t);
typedef void ENVOY_AX_HANDLER_T (bits8_t *, ALENGTH_T, ENVOY_AX_SA_SB_T *,
ENVOY_AX_ADMIN_T *, ENVOY_AX_SEND_T *,
ENVOY_AX_ERROR_T *, ptr_t);
extern void envoy_ax_chunk_init (ENVOY_AX_CHUNK_T *);
extern int envoy_ax_chunk_clean (ENVOY_AX_CHUNK_T *);
extern int envoy_ax_chunk_handler(bits8_t *, ALENGTH_T, ENVOY_AX_HANDLER_T *,
ENVOY_AX_CHUNK_T *, ENVOY_AX_SA_SB_T *,
ENVOY_AX_ADMIN_T *, ENVOY_AX_SEND_T *,
ENVOY_AX_ERROR_T *, ENVOY_AX_ADD_T *,
ptr_t);
#if (!defined(ENVOY_AX_COOKIE_CMP))
#define ENVOY_AX_COOKIE_CMP(HAND, COOKIE) (HAND == COOKIE)
#endif
typedef struct ENVOY_AX_INDEX_STR_S
{
ALENGTH_T length;
bits8_t *buffer;
} ENVOY_AX_INDEX_STR_T;
typedef struct ENVOY_AX_INDEX_DATA_S
{
struct ENVOY_AX_INDEX_DATA_S *next;
bits32_t session_id; /* 0 for no session */
union {
OBJ_ID_T objid;
bits32_t bits32;
ENVOY_AX_INDEX_STR_T string;
bits8_t ipaddr[4];
} data;
} ENVOY_AX_INDEX_DATA_T;
typedef struct ENVOY_AX_INDEX_HDR_S
{
bits8_t type;
ENVOY_AX_INDEX_DATA_T *data;
} ENVOY_AX_INDEX_HDR_T;
#ifdef WINDNET_STRUCT_ALIGN
#pragma align 0
#endif
extern ENVOY_AX_SESSION_T *ax_session_find_index(bits32_t, int *);
extern void ax_session_release (ENVOY_AX_SESSION_T *);
extern ENVOY_AX_SESSION_T *ax_session_next (bits32_t, int *);
extern int envoy_ax_ma_cleanup_session_mth(bits32_t, bits8_t);
extern ENVOY_AX_CONTEXT_T *ax_context_index(bits32_t);
extern ENVOY_AX_CONTEXT_T *ax_context_next (ENVOY_AX_CONTEXT_T *);
extern ENVOY_AX_MA_REG_T *find_reg_leaf(OBJ_ID_T *, bits8_t, bits32_t);
extern sbits32_t Find_Leaf_From_Root(MIBNODE_T *, OBJ_ID_T *, MIBLEAF_T **);
extern int AX_Add_Leaf_From_Root(MIBNODE_T *, OBJ_ID_T *, MIBLEAF_T *,
MIBLEAF_T **);
extern MIBLEAF_T * AX_Remove_Leaf_From_Root(MIBNODE_T *, OBJ_ID_T *);
#define ENVOY_AX_TRANSPORT_TYPE_UNIX 1
#define ENVOY_AX_TRANSPORT_TYPE_TCP 2
#define ENVOY_AX_TRANSPORT_TYPE_UDP 3
#define ENVOY_AX_TRANSPORT_TYPE_MEM 4
#define ENVOY_AX_TRANSPORT_TYPE_OTHER 5
extern void ax_ma_index_allocate (ENVOY_AX_PKT_T *, ENVOY_AX_PKT_T *,
ENVOY_AX_CONTEXT_T *);
extern void ax_ma_index_deallocate(ENVOY_AX_PKT_T *, ENVOY_AX_PKT_T *,
ENVOY_AX_CONTEXT_T *);
extern void ax_ma_cleanup_indexes (bits32_t);
#if INSTALL_ENVOY_AGENTX_INDEX
#define AX_MA_RTN_IND_ALLOC(AX, RP, CON) ax_ma_index_allocate(AX, RP, CON)
#define AX_MA_RTN_IND_DEALLOC(AX, RP, CON) ax_ma_index_deallocate(AX, RP, CON)
#else
#define AX_MA_RTN_IND_ALLOC(AX, RP, CON) ((RP)->error_stat = GEN_ERR)
#define AX_MA_RTN_IND_DEALLOC(AX, RP, CON) ((RP)->error_stat = GEN_ERR)
#endif
#ifdef __cplusplus
}
#endif
#endif /* envoy_agentx_inc */