/*
 * Copyright Notice:
 * Copyright Treck Incorporated  1997 - 2004
 * Copyright Elmic Systems Japan 1997 - 2004
 * No portions or the complete contents of this file may be copied or
 * distributed in any form (including but not limited to printed or electronic
 * forms) without the expressed written consent of Treck Incorporated OR
 * Elmic Systems.  Copyright laws and International Treaties protect the
 * contents of this file.  Unauthorized use is prohibited.
 * All rights reserved.
 *
 * Description: Function prototypes for SNMP Agent internal APIs.
 *
 * Filename: trintapi.h
 * Author: Ed Remmell
 * Date Created: 1/17/02
 * $Source: /cvs_tick/treck_stack/snmpd/trintapi.h,v $
 *
 * Modification History
 * $Revision: 1.9.36.1 $
 * $Date: 2006/11/28 15:00:54 $
 * $Author: jrakhval $
 * $ProjectName: /home/mks/proj/snmpdprj $
 * $ProjectRevision: 4.0.2.53 $
 */

/***********************************************************
        Copyright 1988 by Carnegie Mellon University
 
                      All Rights Reserved
 
Permission to use, copy, modify, and distribute this software and its 
documentation for any purpose and without fee is hereby granted, 
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in 
supporting documentation, and that the name of CMU not be
used in advertising or publicity pertaining to distribution of the
software without specific, written prior permission.  
 
CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
******************************************************************/


#ifndef _TRINTAPI_H_
#define _TRINTAPI_H_

#ifdef __cplusplus
extern "C" {
#endif

/* global function prototypes */
#ifdef TM_SNMP_AGENT_V3
TM_PROTO_EXTERN tt8BitPtr tfParseV3ScopedPdu (
    tt8BitPtr, ttPktLenPtr, ttSnmpV3PacketPtr);
TM_PROTO_EXTERN tt8BitPtr tfParseV3Header (
    tt8BitPtr, ttPktLenPtr, ttSnmpV3PacketPtr, tt32BitPtr, tt32BitPtr);
TM_PROTO_EXTERN tt8BitPtr tfBuildScopedHdr (
    tt8BitPtr, ttPktLenPtr, ttConstSnmpV3PacketPtr, ttPktLenPtr);
TM_PROTO_EXTERN int tfAmendV3Hdr (
    tt8BitPtr, tt8BitPtr, ttPktLenPtr, tt8Bit,
    ttConst8BitPtr, ttPktLen, tt8BitPtr, ttPktLen);
TM_PROTO_EXTERN tt8BitPtr tfBuildV3Hdrs (
    tt8BitPtr, ttPktLenPtr, ttConstSnmpPacketInfoPtr,
    ttSnmpV3PacketPtr, ttPktLenPtr, ttPktLenPtr, tt32BitPtr);

TM_PROTO_EXTERN void tfGenerateIV (tt8BitPtr, ttSnmpV3PacketPtr);
TM_PROTO_EXTERN ttPktLen tfEncryptScopedPdu (ttConst8BitPtr, 
    ttConst8BitPtr, ttConst8BitPtr, tt8BitPtr, ttSnmpV3PacketPtr);
TM_PROTO_EXTERN tt8BitPtr tfParseV3Pdu (
    tt8BitPtr, ttPktLenPtr, ttSnmpV3PacketPtr, tt32BitPtr,
    tt32BitPtr, tt8BitPtr, ttPktLen, ttIntPtr, ttIntPtr);
TM_PROTO_EXTERN tt8BitPtr tfWrongIdProcessing (
    ttOidPtr, ttPktLenPtr, tt8BitPtr, ttPktLenPtr,
    ttPktLenPtr, tt8BitPtr, ttIntPtr, int);
TM_PROTO_EXTERN int tfInView (
    ttConstSnmpV3PacketPtr, int, ttConstOidPtr, ttPktLen);
TM_PROTO_EXTERN int tfIsSubOid(ttOidPtr, ttPktLen, ttOidPtr, ttPktLen);
TM_PROTO_EXTERN void tfDesNcbcEncrypt (
    ttConst8BitPtr in, tt8BitPtr out, tt32Bit length,
    des_key_schedule schedule, des_cblock TM_FAR * ivec, int enc);
TM_PROTO_EXTERN int tfDesKeySched (
    des_cblock TM_FAR * key, des_key_schedule schedule);
TM_PROTO_EXTERN int tfInitializeV3 (void);
TM_PROTO_EXTERN void tfGetAuthKeyFromUserName(ttCharPtr, int, tt8BitPtr);
TM_PROTO_EXTERN void tfGetPrivKeyFromUserName(ttCharPtr, int, tt8BitPtr);
TM_PROTO_EXTERN void tfGenerateKeyedHash(ttSnmpUsmUserTablePtr, ttCharPtr);
TM_PROTO_EXTERN void tfGeneratePrivateHash(ttSnmpUsmUserTablePtr, ttCharPtr);

#endif /* TM_SNMP_AGENT_V3 */

TM_PROTO_EXTERN int tfCompare(
    ttConstOidPtr name1, ttPktLen len1, ttConstOidPtr name2, ttPktLen len2);

TM_PROTO_EXTERN tt8BitPtr tfGetStatPtr (
    ttOidPtr, ttPktLenPtr, tt8BitPtr, ttPktLenPtr,
    tt16BitPtr, tt8BitPtr, int,
    int (TM_FAR * TM_CODE_FAR *write_method) (
        int, tt8BitPtr, tt8Bit, int, ttOidPtr, int),
    int (TM_FAR * TM_CODE_FAR *create_method) (ttOidPtr, int, oid),
    int (TM_FAR * TM_CODE_FAR *delete_method) (ttOidPtr, int), ttIntPtr);

TM_PROTO_EXTERN int tfMDsign (
    tt8BitPtr, ttPktLen, tt8BitPtr, ttPktLen, ttConst8BitPtr, ttPktLen);

TM_PROTO_EXTERN void tfFreeBindings (ttSnmpTrapVarBindPtr);
TM_PROTO_EXTERN ttSnmpTrapVarBindPtr tfFillTrapVars (
    ttOidPtr, ttPktLen, int, ttVoidPtr, ttPktLen, ttIntPtr);
TM_PROTO_EXTERN tt32Bit tfGetMibUptime (void);

#ifdef TM_SNMP_AGENT_V3
TM_PROTO_EXTERN int tfBulkVarOpList (
    tt8BitPtr data, ttPktLen length, tt8BitPtr out_data, ttPktLen out_length,
    int non_repeaters, int max_repetitions, tt32BitPtr index,
    ttSnmpPacketInfoPtr pi, int wrong_id,
    ttConstSnmpV3PacketPtr);
#else /* ! TM_SNMP_AGENT_V3 */
TM_PROTO_EXTERN int tfBulkVarOpList (
    tt8BitPtr data, ttPktLen length,
    tt8BitPtr out_data, ttPktLen out_length,
    int non_repeaters, int max_repetitions, tt32BitPtr index,
    ttSnmpPacketInfoPtr pi, int wrong_id, tt32BitPtr);
#endif /* ! TM_SNMP_AGENT_V3 */

TM_PROTO_EXTERN ttSnmpPduPtr tfSnmpPduCreate (int);
TM_PROTO_EXTERN ttSnmpVariableListPtr tfSnmpAddTypedVar (
    ttSnmpPduPtr, ttConstOidPtr, ttPktLen, tt8Bit, ttConstSnmpValuePtr,
    ttPktLen);
TM_PROTO_EXTERN void tfSnmpFreePdu (ttSnmpPduPtr);
TM_PROTO_EXTERN int tfSnmpSend (
    ttConstNgSnmpTrapParmsPtr, ttConstSnmpPduPtr);

TM_PROTO_EXTERN int tfSendTrapsV1 (int, int, ttSnmpTrapVarBindPtr);
TM_PROTO_EXTERN int tfSendTrapV1 (
    ttConstNgSnmpTrapParmsPtr, int, int, ttSnmpTrapVarBindPtr);

#ifdef TM_SNMP_AGENT_V2C
TM_PROTO_EXTERN int tfSendTrapsV2 (ttSnmpTrapVarBindPtr);
TM_PROTO_EXTERN int tfSendTrapV2 (
    ttConstNgSnmpTrapParmsPtr, ttSnmpTrapVarBindPtr);
#endif /* TM_SNMP_AGENT_V2C */

#ifdef TM_SNMP_AGENT_V3
TM_PROTO_EXTERN int tfSendTrapsV3 (ttSnmpTrapVarBindPtr);
TM_PROTO_EXTERN int tfSendTrapV3 (
    ttConstNgSnmpTrapParmsPtr, ttSnmpTrapVarBindPtr);
TM_PROTO_EXTERN int tfSendNotifications(ttCharPtr, ttSnmpTrapVarBindPtr,
                                        oid, tt32Bit, int, int);
TM_PROTO_EXTERN int tfSendNotificationsForEntry(
                                        ttCharPtr, ttSnmpTrapVarBindPtr,
                                        oid, tt32Bit, int, int);
TM_PROTO_EXTERN int tfSetNotificationUserName(const ttCharPtr trap_user_name);
TM_PROTO_EXTERN int tfSetNotificationContextName(const ttCharPtr trap_context_name);

#endif /* TM_SNMP_AGENT_V3 */

TM_PROTO_EXTERN void tfFindDefvals (ttSnmpCollectConceptPtr);

TM_PROTO_EXTERN tt8BitPtr tfBuildPduHeader (
    tt8BitPtr, ttPktLenPtr, ttConstSnmpPacketInfoPtr, ttPktLenPtr,
    ttPktLenPtr);

TM_PROTO_EXTERN ttVoidPtr tfSnmpAllocGlobals(void);
TM_PROTO_EXTERN void tfSnmpFreeGlobals(void);
TM_PROTO_EXTERN int tfAgentInitialize (ttIntPtr);
TM_PROTO_EXTERN void tfSetAddrPort (
    struct ttSockaddrStorage TM_FAR *,
    const struct ttSockaddrStorage TM_FAR *);
TM_PROTO_EXTERN void tfSetTrapAddrPort (
    struct ttSockaddrStorage TM_FAR *, ttConstSnmpTrapParmsPtr);

TM_PROTO_EXTERN int tfProcessObjid (
    tt8BitPtr, ttPktLenPtr, tt8BitPtr, ttOidPtr, ttPktLenPtr);
TM_PROTO_EXTERN int tfProcessString (
    tt8BitPtr, ttPktLenPtr, tt8BitPtr, tt8BitPtr, ttPktLen, ttPktLenPtr, int);
TM_PROTO_EXTERN int tfProcessInt (
    tt8BitPtr, ttPktLenPtr, tt8BitPtr, tt32BitPtr);
TM_PROTO_EXTERN int tfProcess64Bit (
    tt8BitPtr, ttPktLenPtr, tt8BitPtr, tt64BitPtr);
TM_PROTO_EXTERN int tfProcessIpAddr (
    tt8BitPtr, ttPktLenPtr, tt8BitPtr, tt32BitPtr);
TM_PROTO_EXTERN int tfScalarHandler (
    ttConstSnmpVariablePtr, ttOidPtr, ttIntPtr, int, ttIntPtr);

/* stack-specific APIs */
TM_PROTO_EXTERN int tfGetNumberIfs (void);
TM_PROTO_EXTERN tt32BitPtr tfSysGroupInfoGet (tt8Bit what, ttPktLenPtr lenPtr);
TM_PROTO_EXTERN tt32BitPtr tfIfGroupInfoGet (int, tt8Bit, ttPktLenPtr);
TM_PROTO_EXTERN int tfInetIcmpTableGet(int, int, ttOidPtr, ttOidPtr);
TM_PROTO_EXTERN tt32BitPtr tfIpGroupInfoGet(tt8Bit);
TM_PROTO_EXTERN tt32BitPtr tfTcpGroupInfoGet (tt8Bit);
TM_PROTO_EXTERN tt32BitPtr tfUdpGroupInfoGet (tt8Bit);
TM_PROTO_EXTERN int tfN2mTableEntryGet (int, ttMib2IpNetToMediaEntryPtr);
/* NG  MIB2 prototype functions : */
#ifdef TM_USE_NG_MIB2
#ifdef TM_SNMP_CACHE
int tfUdpEndPointEntryGet (int exact, ttMib2UdpEndPointTablePtr udpRowPtr);
#else /* TM_SNMP_CACHE */
int tfUdpEndPointEntryGet (int exact, ttMib2UdpEndPointTablePtr udpRowPtr);
#endif /* TM_SNMP_CACHE */
TM_PROTO_EXTERN int tfTcpTableConnectionEntryGet(
    int, ttMib2TcpConnectionPtr);
TM_PROTO_EXTERN int tfTcpListenerTableGet(int, ttMib2TcpListenerPtr);
TM_PROTO_EXTERN int tfInetIcmpMsgTableGet(
    int, ttOidPtr, int first, ttOidPtr, ttOidPtr);
TM_PROTO_EXTERN int tfIpAddressTableEntryGet(int, ttIpAddressTableEntryPtr);
TM_PROTO_EXTERN int tfInetNetToMediaTableEntryGet(
                            int, ttInetNetToMediaTableEntryPtr);
TM_PROTO_EXTERN int tfWriteInetNetToMediaTableEntry(
                    int, int, int, tt8BitPtr, int, tt8BitPtr, ttPktLen);
#ifdef TM_USE_IPV6
TM_PROTO_EXTERN int tfIpV6ScopeZoneIndexTableEntryGet(
                    int, ttIpV6ScopeZoneIndexTableEntryPtr);
TM_PROTO_EXTERN int tfIpDefaultRouterTableEntryGet(
                    int, ttIpDefaultRouterTableEntryPtr);
TM_PROTO_EXTERN int tfIpV6RouterAdvertTableEntryGet(
                    int, ttIpV6RouterAdvertTableEntryPtr);
TM_PROTO_EXTERN int tfWriteIpV6RouterAdvertTableEntry(
    int, int, tt8BitPtr, ttPktLen);
#endif /* TM_USE_IPV6 */
#if (TM_VERSION > 30)
TM_PROTO_EXTERN int tfIpIfstatsTableEntryGet(int, ttIpIfStatsTableEntryPtr);
#endif /* (TM_VERSION > 30) */
TM_PROTO_EXTERN int tfIpSystemStatsTableEntryGet(
    int, ttIpSystemStatsTableEntryPtr);
#ifdef TM_USE_IPV4
#if (TM_VERSION > 30)
TM_PROTO_EXTERN int tfIpv4InterfaceTableEntryGet(
    int, ttIpv4InterfaceTableEntryPtr);
TM_PROTO_EXTERN int tfWriteIpv4InterfaceTableEntry(
    int, int, tt8BitPtr, ttPktLen);
#endif /* (TM_VERSION > 30) */
#endif /* TM_USE_IPV4 */
#ifdef TM_USE_IPV6
TM_PROTO_EXTERN int tfIpv6InterfaceTableEntryGet(
    int, ttIpv6InterfaceTableEntryPtr);
TM_PROTO_EXTERN int tfWriteIpv6InterfaceTableEntry(
    int, int, tt8BitPtr, ttPktLen);
#endif /* TM_USE_IPV6 */
TM_PROTO_EXTERN int tfInetCidrRouteTableEntryGet(
    int, ttInetCidrRouteTableEntryPtr);
TM_PROTO_EXTERN int tfWriteInetCidrRouteTableEntry(
    int, int, tt8BitPtr, int, int, int,
    tt8BitPtr, int, tt8BitPtr, ttPktLen);
#endif /* TM_USE_NG_MIB2 */

#ifdef TM_USE_RFC1213_MIB2
TM_PROTO_EXTERN tt32BitPtr tfIcmpGroupInfoGet(tt8Bit);
TM_PROTO_EXTERN int tfTcpTableEntryGet(int, ttMib2TcpConnectionPtr);
TM_PROTO_EXTERN int tfWriteTcpState (ttConstMib2TcpConnectionPtr);
TM_PROTO_EXTERN int tfUdpTableEntryGet (int, ttMib2UdpListenerPtr);
#endif /* TM_USE_RFC1213_MIB2 */

TM_PROTO_EXTERN int tfIpAddrTableEntryGet(int, ttMib2IpAddrEntryPtr);
TM_PROTO_EXTERN int tfIpRouteTableEntryGet(int, ttMib2IpRouteEntryPtr);
TM_PROTO_EXTERN int tfWriteIp (int, tt32Bit);
TM_PROTO_EXTERN int tfWriteIpRouteEntry (tt32Bit, int, tt32Bit);
TM_PROTO_EXTERN int tfWriteAdminStat (int, tt32Bit);
TM_PROTO_EXTERN int tfWriteN2mEntry (
    ttConstMib2IpNetToMediaEntryPtr, ttConstMib2IpNetToMediaEntryPtr);

TM_PROTO_EXTERN ttUserS32Bit tfCmpUdpEndPointTableIndexes(
    tt8Bit, ttIpAddressPtr, tt16Bit, ttIpAddressPtr, tt16Bit,
    tt8Bit, ttIpAddressPtr, tt16Bit, ttIpAddressPtr, tt16Bit);
TM_PROTO_EXTERN ttUserS32Bit tfCmpTcpConnTableIndexes(
    tt8Bit, ttIpAddressPtr, tt16Bit, ttIpAddressPtr, tt16Bit,
    tt8Bit, ttIpAddressPtr, tt16Bit, ttIpAddressPtr, tt16Bit);
TM_PROTO_EXTERN ttUserS32Bit tfCmpInetCidrRouteTableIndexes(
    int, ttIpAddressPtr, int, int, ttIpAddressPtr,
    int, ttIpAddressPtr, int, int, ttIpAddressPtr);
#ifdef __cplusplus
}
#endif

#endif /* #ifndef _TRINTAPI_H_ */

/* Processed by Treck Shipping Tool v2.48 
 * 2005/11/16 15:13:14      For: Digi
 * File Name: trintapi.h    File Revision: 4.0.2.7 
 * Project Name: snmpdprj   Project Release: 4.0.2.53
 * Input checksum: 65333    Output checksum: 30873
 */
