/*
 * 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:  SNMP v3 specific definitions and structs
 * Filename:     trsnmpv3.h
 * Author:       Leonard
 * Date Created: 12/04/01
 * $Source: /cvs_tick/treck_stack/snmpd/trsnmpv3.h,v $
 *
 * Modification History
 * $Revision: 1.11.4.2 $
 * $Date: 2006/11/28 15:00:56 $
 * $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 _TRSNMPV3_H_
#define _TRSNMPV3_H_

#ifdef __cplusplus
extern "C" {
#endif

#ifdef TM_SNMP_AGENT_V3
#define TM_SNMP_MSG_USERNAME_LEN        32
#define TM_SNMP_MSG_ENGINEID_LEN_MAX    32
#define TM_SNMP_MSG_ENGINEID_LEN_MIN    5
#define TM_SNMP_MSG_CONTEXTNAME_LEN     255
#define TM_SNMP_COMTABLE_MAX_NAME_LEN   32

#define TM_SNMP_MAX_USER_AUTH_PSWD_LEN      24
#define TM_SNMP_MAX_USER_PRIVACY_PSWD_LEN   24

typedef struct tsSnmpMsgGlobalData
{
    tt32Bit smgdMsgId;
    tt32Bit smgdMsgMaxSize;
    tt32Bit smgdMsgSecurityModel;
    tt8Bit  smgdMsgFlags;
    char    smgdPad[3];
} ttSnmpMsgGlobalData;
typedef ttSnmpMsgGlobalData     TM_FAR * ttSnmpMsgGlobalDataPtr;
typedef const ttSnmpMsgGlobalData TM_FAR * ttConstSnmpMsgGlobalDataPtr;

typedef struct tsSnmpUsmSecurityParams
{
    tt32Bit suspAuthEngineBoots;
    tt32Bit suspAuthEngineTime;
    int suspAuthEngineIdLen;
    int suspMsgUserNameLen;
    int suspMsgAuthParsLen;
    int suspMsgPrivParsLen;
    tt8Bit suspMsgAuthPars[32];
    tt8Bit suspMsgPrivPars[32];
    tt8Bit suspAuthEngineId[
        ((TM_SNMP_MSG_ENGINEID_LEN_MAX + 3) / 4) * 4];
    tt8Bit suspMsgUserName[((TM_SNMP_MSG_USERNAME_LEN + 3) / 4) * 4];
} ttSnmpUsmSecurityParams;
typedef ttSnmpUsmSecurityParams     TM_FAR * ttSnmpUsmSecurityParamsPtr;
typedef const ttSnmpUsmSecurityParams TM_FAR * ttConstSnmpUsmSecurityParamsPtr;

typedef struct tsSnmpMsgData
{
    int smdContextEngineIdLen;
    int smdContextNameLen;
    tt8Bit smdContextName[32];
    tt8Bit smdContextEngineId[
        ((TM_SNMP_MSG_ENGINEID_LEN_MAX + 3) / 4) * 4];
} ttSnmpMsgData;
typedef ttSnmpMsgData     TM_FAR * ttSnmpMsgDataPtr;
typedef const ttSnmpMsgData TM_FAR * ttConstSnmpMsgDataPtr;

typedef struct tsSnmpV3Packet
{
    ttSnmpMsgGlobalData sv3pGlobalData;
    ttSnmpUsmSecurityParams sv3pSecurityParams;
    ttSnmpMsgData sv3pMsgData;
} ttSnmpV3Packet;
typedef ttSnmpV3Packet     TM_FAR * ttSnmpV3PacketPtr;
typedef const ttSnmpV3Packet TM_FAR * ttConstSnmpV3PacketPtr;

#ifdef TM_USE_IPV6
#define TM_SNMP_ENGINEID_LEN   21
#else /* TM_USE_IPV6 */
#define TM_SNMP_ENGINEID_LEN    9
#endif /*  TM_USE_IPV6 */
typedef struct tsSnmpEngineData
{
    tt32Bit sedBoots;
    tt32Bit sedTime;
    tt32Bit sedMaxMsgSize;
    tt8Bit sedId[((TM_SNMP_ENGINEID_LEN + 3) / 4) * 4];
} ttSnmpEngineData;
typedef ttSnmpEngineData     TM_FAR * ttSnmpEngineDataPtr;
typedef const ttSnmpEngineData TM_FAR * ttConstSnmpEngineDataPtr;

typedef struct tsSnmpMpdStats
{
    tt32Bit smsUnkSecModels;
    tt32Bit smsInvMessages;
    tt32Bit smsUnkPduHandlers;
}ttSnmpMpdStats;
typedef ttSnmpMpdStats     TM_FAR * ttSnmpMpdStatsPtr;
typedef const ttSnmpMpdStats TM_FAR * ttConstSnmpMpdStatsPtr;

typedef struct tsSnmpUsmStats
{
    tt32Bit susUnsuppSecLevels;
    tt32Bit susNotInTimeWin;
    tt32Bit susUnknUserNames;
    tt32Bit susUnknEngineIds;
    tt32Bit susWrongDigests;
    tt32Bit susDecryptErrs;
} ttSnmpUsmStats;
typedef ttSnmpUsmStats     TM_FAR * ttSnmpUsmStatsPtr;
typedef const ttSnmpUsmStats TM_FAR * ttConstSnmpUsmStatsPtr;

typedef struct tsSnmpUsmUserTable
{
    struct tsSnmpUsmUserTable TM_FAR *suutNext;
    oid suutCloneFrom[TM_SNMP_MAX_NAME_LEN];
    oid suutAuthProtocol[TM_SNMP_MAX_NAME_LEN];
    oid suutPrivProtocol[TM_SNMP_MAX_NAME_LEN];
    int suutSecurityNameLen;
    int suutCloneFromLen;
    int suutAuthProtocolLen;
    int suutAuthKeyChangeLen;
    int suutOwnAuthKeyChangeLen;
    int suutPrivProtocolLen;
    int suutPrivKeyChangeLen;
    int suutOwnPrivKeyChangeLen;
    int suutPublicLen;
    int suutStorageType;
    int suutStatus;
    char suutSecurityName[32];
    char suutAuthKeyChange[32];
    char suutOwnAuthKeyChange[32];
    char suutPrivKeyChange[32];
    char suutOwnPrivKeyChange[32];
    char suutUuPublic[32];
    char suutName[32];
/* this is actually where tha authentication and privacy keys are stored,
   the data stored in those two fields must never been disclosed */
    char suutAuthKey[((TM_SNMP_MAX_USER_AUTH_PSWD_LEN+3)/4)*4];
    char suutPrivKey[((TM_SNMP_MAX_USER_PRIVACY_PSWD_LEN+3)/4)*4];
    tt8Bit suutEngineId[21];
    tt8Bit suutEngineIdLen;
    tt8Bit suutNameLen;
    char suutPad;
} ttSnmpUsmUserTable;
typedef ttSnmpUsmUserTable     TM_FAR * ttSnmpUsmUserTablePtr;
typedef const ttSnmpUsmUserTable TM_FAR * ttConstSnmpUsmUserTablePtr;

typedef struct tsSnmpTargetStats
{
    tt32Bit unavailCtxts;
    tt32Bit unknownCtxts;
} ttSnmpTargetStats;
typedef ttSnmpTargetStats     TM_FAR * ttSnmpTargetStatsPtr;
typedef const ttSnmpTargetStats TM_FAR * ttConstSnmpTargetStatsPtr;

typedef struct tsSnmpVacmContextTable
{
    struct tsSnmpVacmContextTable TM_FAR *svctNext;
    int svctNameLen;
    char svctName[32];
} ttSnmpVacmContextTable;
typedef ttSnmpVacmContextTable     TM_FAR * ttSnmpVacmContextTablePtr;
typedef const ttSnmpVacmContextTable TM_FAR * ttConstSnmpVacmContextTablePtr;
#define VACM_CONTEXT_ENTRIES    3

typedef struct tsSnmpVacmSec2GroupTable
{
    struct tsSnmpVacmSec2GroupTable TM_FAR *svgtNext;
    int svgtModel;
    int svgtNameLen;
    int svgtGroupNameLen;
    int svgtStorageType;
    int svgtStatus;
    char svgtName[32];
    char svgtGroupName[32];
} ttSnmpVacmSec2GroupTable;
typedef ttSnmpVacmSec2GroupTable     TM_FAR * ttSnmpVacmSec2GroupTablePtr;
typedef const ttSnmpVacmSec2GroupTable TM_FAR * ttConstSnmpVacmSec2GroupTablePtr;

typedef struct tsSnmpVacmAccessTable
{
    struct tsSnmpVacmAccessTable TM_FAR *svatNext;
    int svatGroupNameLen;
    int svatPrefixLen;
    int svatModel;
    int svatLevel;
    int svatMatch;
    int svatReadNameLen;
    int svatWriteNameLen;
    int svatNotifyNameLen;
    int svatStorageType;
    int svatStatus;
    char svatGroupName[32];
    char svatPrefix[32];
    char svatReadName[32];
    char svatWriteName[32];
    char svatNotifyName[32];
} ttSnmpVacmAccessTable;
typedef ttSnmpVacmAccessTable     TM_FAR * ttSnmpVacmAccessTablePtr;
typedef const ttSnmpVacmAccessTable TM_FAR * ttConstSnmpVacmAccessTablePtr;

typedef struct tsSnmpSetSerialNo 
{
    tt32Bit snmpSetSerialNo;
} ttSnmpSetSerialNo;
typedef ttSnmpSetSerialNo      TM_FAR * ttSnmpSetSerialNoPtr;
typedef const ttSnmpSetSerialNo  TM_FAR * ttConstSnmpSetSerialNoPtr;

typedef struct tsSnmpSpinLock
{
    tt32Bit svslViewSpinLock;
    tt32Bit susUserSpinLock;
    tt32Bit stTargetSpinLock;
} ttSnmpSpinLock;
typedef ttSnmpSpinLock     TM_FAR * ttSnmpSpinLockPtr;
typedef const ttSnmpSpinLock TM_FAR * ttConstSnmpSpinLockPtr;

typedef struct tsSnmpVacmViewTreeFamilyTable
{
    struct tsSnmpVacmViewTreeFamilyTable TM_FAR *svvtNext;
    oid         svvtSubtree[TM_SNMP_MAX_NAME_LEN];
    ttS32Bit    svvtCombination[TM_SNMP_MAX_NAME_LEN];
    int         svvtNameLen;
    int         svvtSubtreeLen;
    int         svvtMaskLen;
    int         svvtType;
    int         svvtStorageType;
    int         svvtStatus;
    char        svvtName[32];
    tt8Bit      svvtMask[16];
} ttSnmpVacmViewTreeFamilyTable;
typedef ttSnmpVacmViewTreeFamilyTable     TM_FAR * ttSnmpVacmViewTreeFamilyTablePtr;
typedef const ttSnmpVacmViewTreeFamilyTable TM_FAR * ttConstSnmpVacmViewTreeFamilyTablePtr;

typedef struct tsSnmpCommunityTable
{
    struct tsSnmpCommunityTable TM_FAR *next;
    tt8Bit      snmpCommunityIndex[TM_SNMP_COMTABLE_MAX_NAME_LEN];
    tt8Bit      snmpCommunityName[TM_SNMP_COMTABLE_MAX_NAME_LEN];
    tt8Bit      snmpCommunitySecurityName[TM_SNMP_COMTABLE_MAX_NAME_LEN];
    tt8Bit      snmpCommunityContextEngineID[TM_SNMP_COMTABLE_MAX_NAME_LEN];
    tt8Bit      snmpCommunityContextName[TM_SNMP_COMTABLE_MAX_NAME_LEN];
    tt8Bit      snmpCommunityTransportTag[TM_SNMP_COMTABLE_MAX_NAME_LEN];
    tt8Bit      snmpCommunityIndexLen;
    tt8Bit      snmpCommunityNameLen;
    tt8Bit      snmpCommunitySecurityNameLen;
    tt8Bit      snmpCommunityContextEngineIDLen;
    tt8Bit      snmpCommunityContextNameLen;
    tt8Bit      snmpCommunityTransportTagLen;
    tt8Bit      snmpCommunityStorageType;
    tt8Bit      snmpCommunityStatus;
} ttSnmpCommunityTable;
typedef ttSnmpCommunityTable     TM_FAR * ttSnmpCommunityTablePtr;
typedef const ttSnmpCommunityTable TM_FAR * ttConstSnmpCommunityTablePtr;

#ifdef NET_OS_SPECIFIC
typedef struct tsSnmpTargetAddrTableInit
{
    char    snmpTargetAddrName[32];
    tt32Bit snmpTargetAddrNameLen;
    tt32Bit snmpTargetAddrTDomain;
    char    snmpTargetAddr[64];
    tt32Bit snmpTargetAddrPort;
    tt32Bit snmpTargetAddrTimeout;
    tt32Bit snmpTargetRetryCount;
    char    snmpTargetTagList[32];
    tt32Bit snmpTargetTagListLen;
    char    snmpTargetAddrParams[32];
    tt32Bit snmpTargetAddrParamsLen;
    int     snmpTargetAddrStorageType;
    int     snmpTargetAddrRowStatus;
} ttSnmpTargetAddrTableInit;
#endif

typedef struct tsSnmpTargetAddrTableEntry
{
    tt8Bit          snmpTargetAddrName[MAX_STRING_LEN];
    tt8Bit          snmpTargetAddrNameLen;
    oid             snmpTargetAddrTDomain[32];
    tt16Bit         snmpTargetAddrTDomainLen;
    tt16Bit	    snmpTargetAddrPad0;	    /* TAddress needs to be on 32-bit boundary. */
#ifdef TM_USE_IPV6
    tt8Bit          snmpTargetAddrTAddress[20];
#else /* TM_USE_IPV6 */
    tt8Bit          snmpTargetAddrTAddress[8];
#endif /* !TM_USE_IPV6 */
    tt8Bit          snmpTargetAddrTAddressLen;
    tt32Bit         snmpTargetAddrTimeout;
    tt32Bit         snmpTargetAddrRetryCount;
    tt8Bit          snmpTargetAddrTaglist[MAX_STRING_LEN];
    tt8Bit          snmpTargetAddrParams[MAX_STRING_LEN];
    tt8Bit          snmpTargetAddrTaglistLen;
    tt8Bit          snmpTargetAddrParamsLen;
    tt8Bit          snmpTargetAddrStorageType;
    tt8Bit          snmpTargetAddrRowStatus;
    struct tsSnmpTargetAddrTableEntry *nextPtr;
} ttSnmpTargetAddrTableEntry;
typedef ttSnmpTargetAddrTableEntry     TM_FAR * ttSnmpTargetAddrTableEntryPtr;
typedef const ttSnmpTargetAddrTableEntry TM_FAR * ttConstSnmpTargetAddrTableEntryPtr;

typedef struct tsSnmpTargetParamsTableEntry
{
    tt8Bit  snmpTargetParamsName[MAX_STRING_LEN];
    tt16Bit snmpTargetParamsNameLen;
    tt8Bit  snmpTargetParamsMPModel;
    tt8Bit  snmpTargetParamsSecurityModel;
    tt8Bit  snmpTargetParamsSecurityName[MAX_STRING_LEN];
    tt8Bit  snmpTargetParamsSecurityNameLen;
    tt8Bit  snmpTargetParamsSecurityLevel;
    tt8Bit  snmpTargetParamsStorageType;
    tt8Bit  snmpTargetParamsRowStatus;
    struct tsSnmpTargetParamsTableEntry *nextPtr;
} ttSnmpTargetParamsTableEntry;
typedef ttSnmpTargetParamsTableEntry     TM_FAR * ttSnmpTargetParamsTableEntryPtr;
typedef const ttSnmpTargetParamsTableEntry TM_FAR * ttConstSnmpTargetParamsTableEntryPtr;

typedef struct tsSnmpNotifyTableEntry
{
    tt8Bit      snmpNotifyName[MAX_STRING_LEN];
    tt8Bit      snmpNotifyTag[MAX_STRING_LEN];
    tt16Bit     snmpNotifyNameLen;
    tt16Bit     snmpNotifyTagLen;
    tt8Bit      snmpNotifyType;
    tt8Bit      snmpNotifyStorageType;
    tt8Bit      snmpNotifyRowStatus;
    tt8Bit      pad;
    struct tsSnmpNotifyTableEntry TM_FAR *nextPtr;
} ttSnmpNotifyTableEntry;
typedef ttSnmpNotifyTableEntry     TM_FAR * ttSnmpNotifyTableEntryPtr;
typedef const ttSnmpNotifyTableEntry TM_FAR * ttConstSnmpNotifyTableEntryPtr;

typedef struct tsSnmpNotifyFilterProfileTableEntry
{
    tt8Bit      snmpNotifyFilterProfileName[MAX_STRING_LEN];
    tt8Bit      snmpTargetParamsName[MAX_STRING_LEN];
    tt16Bit     snmpNotifyFilterProfileNameLen;
    tt16Bit     snmpTargetParamsNameLen;
    tt8Bit      snmpNotifyFilterProfileStorageType;
    tt8Bit      snmpNotifyFilterProfileRowStatus;
    tt8Bit      pad[2];
    struct tsSnmpNotifyFilterProfileTableEntry TM_FAR *nextPtr;
} ttSnmpNotifyFilterProfileTableEntry;
typedef ttSnmpNotifyFilterProfileTableEntry     TM_FAR * ttSnmpNotifyFilterProfileTableEntryPtr;
typedef const ttSnmpNotifyFilterProfileTableEntry TM_FAR * ttConstSnmpNotifyFilterProfileTableEntryPtr;

typedef struct tsSnmpNotifyFilterTableEntry
{
    oid         snmpNotifyFilterSubtree[32];
    tt8Bit      snmpNotifyFilterProfileName[MAX_STRING_LEN];
    tt8Bit      snmpNotifyFilterMask[MAX_STRING_LEN];
    tt16Bit     snmpNotifyFilterProfileNameLen;
    tt16Bit     snmpNotifyFilterMaskLen;
    tt8Bit      snmpNotifyFilterSubtreeLen;
    tt8Bit      snmpNotifyFilterType;
    tt8Bit      snmpNotifyFilterStorageType;
    tt8Bit      snmpNotifyFilterRowStatus;
    struct tsSnmpNotifyFilterTableEntry TM_FAR *nextPtr;
} ttSnmpNotifyFilterTableEntry;
typedef ttSnmpNotifyFilterTableEntry     TM_FAR * ttSnmpNotifyFilterTableEntryPtr;
typedef const ttSnmpNotifyFilterTableEntry TM_FAR * ttConstSnmpNotifyFilterTableEntryPtr;

#ifdef NET_OS_SPECIFIC

typedef struct tsSnmpEngineInfo
{
	tt32Bit   seiEngineBoots;
    tt32Bit   seiEngineTime;
    tt8Bit    seiEngineId[((TM_SNMP_MSG_ENGINEID_LEN_MAX + 3) / 4) * 4];
} ttSnmpEngineInfo;
typedef ttSnmpEngineInfo       TM_FAR * ttSnmpEngineInfoPtr;
#endif


#define TM_SNMP_HMACMD5_LEN_MIN     0
#define TM_SNMP_HMACMD5_LEN_MAX     32
#define TM_SNMP_HMACSHA_LEN_MIN     0
#define TM_SNMP_HMACSHA_LEN_MAX     40

#define TM_SNMP_TRANS_AUTHLEN_HMACMD5   128
#define TM_SNMP_BYTESIZE(bitsize)       ((bitsize+7)>>3)
#define TM_SNMP_HMACMD5_PROPER_LEN \
    TM_SNMP_BYTESIZE(TM_SNMP_TRANS_AUTHLEN_HMACMD5)
#define TM_SNMP_HMACMD5_DIGEST_LEN  12

#define TM_SNMP_HMACSHA1_PROPER_LEN 20
#define TM_SNMP_HMACSHA1_DIGEST_LEN 12

#define TM_SNMP_DES_PROPER_LEN      8

#define TM_SNMP_V3_AUTH_FLAG        1
#define TM_SNMP_V3_PRIV_FLAG        2
#define TM_SNMP_V3_REPT_FLAG        4

#define TM_SNMP_MD5_PROTOCOL        1
#define TM_SNMP_SHA1_PROTOCOL       2

#define TM_SNMP_SECMODEL_V1         1
#define TM_SNMP_SECMODEL_V2C        2
#define TM_SNMP_SECMODEL_USM        3

#define TM_SNMP_MPMODEL_V1          1
#define TM_SNMP_MPMODEL_V2C         2
#define TM_SNMP_MPMODEL_V3          3

#define TM_SNMP_SECLEVEL_NOAUTHNOPRIV   1
#define TM_SNMP_SECLEVEL_AUTHNOPRIV     2
#define TM_SNMP_SECLEVEL_AUTHPRIV       3

#define TM_SNMP_USM_ABSOLUTE(a)     ((a)<0?-(a):(a))
#define TM_SNMP_USM_TIME_WINDOW     150

/* extern unsigned int salt_integer; */

#define TM_SNMP_USM_NOAUTH_PROTOCOL     TM_SNMP_AUTH_PROTOCOLS, TM_OID(1)
#define TM_SNMP_USM_MD5AUTH_PROTOCOL    TM_SNMP_AUTH_PROTOCOLS, TM_OID(2)
#define TM_SNMP_USM_SHAAUTH_PROTOCOL    TM_SNMP_AUTH_PROTOCOLS, TM_OID(3)

#define TM_SNMP_USM_NOPRIV_PROTOCOL     TM_SNMP_PRIV_PROTOCOLS, TM_OID(1)
#define TM_SNMP_USM_DESPRIV_PROTOCOL    TM_SNMP_PRIV_PROTOCOLS, TM_OID(2)

#define TM_SNMP_USM_PROTOCOLS_LEN       10

#define TM_SNMP_UU_ENTRY_USERNAME_FLAG  1
#define TM_SNMP_UU_ENTRY_AUTHPROT_FLAG  2
#define TM_SNMP_UU_ENTRY_PRIVPROT_FLAG  3

#define TM_SNMP_VACM_VIEW_INCLUDED 1
#define TM_SNMP_VACM_VIEW_EXCLUDED 2

/* snmpV2.snmpDomains.snmpUDPDomain OID: */
#define TM_SNMP_SNMPUDPDOMAIN_OID       1,3,6,1,6,1,1
#define TM_SNMP_SNMPUDPDOMAIN_OID_LEN   7

#ifdef TM_USE_IPV6
/* mib2.transportAddressMIB.transportDomains.transportDomainUdpIpv6 OID: */
#define TM_SNMP_SNMPUDPIPV6DOMAIN_OID       1,3,6,1,2,1,100,1,2
#define TM_SNMP_SNMPUDPIPV6DOMAIN_OID_LEN   9
#endif /* TM_USE_IPV6 */

#define tm_is_tag_delimiter(c) ((c) == 0x09 || (c) == 0x0B || \
                                (c) == 0x20 || (c) == 0x0D)

#endif  /** SNMP_AGENT_V3   **/

void tfInitializeEngine (void);

#ifdef __cplusplus
}
#endif

#endif /* #ifndef _TRSNMPV3_H_ */

/* Processed by Treck Shipping Tool v2.48 
 * 2005/11/16 15:13:15      For: Digi
 * File Name: trsnmpv3.h    File Revision: 4.0.2.4 
 * Project Name: snmpdprj   Project Release: 4.0.2.53
 * Input checksum: 24870    Output checksum: 53427
 */
