summaryrefslogtreecommitdiff
path: root/addons/snmp/nxd_snmp.h
blob: 06822b9d34e82dfd7fcd2e66d3ee2691c7ca6bce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
/***************************************************************************
 * Copyright (c) 2024 Microsoft Corporation
 * Copyright (c) 2025-present Eclipse ThreadX Contributors
 *
 * This program and the accompanying materials are made available under the
 * terms of the MIT License which is available at
 * https://opensource.org/licenses/MIT.
 *
 * SPDX-License-Identifier: MIT
 **************************************************************************/


/**************************************************************************/
/**************************************************************************/
/**                                                                       */ 
/** NetX Duo Component                                                    */
/**                                                                       */
/**   Simple Network Management Protocol (SNMP)                           */ 
/**                                                                       */
/**************************************************************************/
/**************************************************************************/


/**************************************************************************/ 
/*                                                                        */ 
/*  APPLICATION INTERFACE DEFINITION                       RELEASE        */ 
/*                                                                        */ 
/*    nxd_snmp.h                                          PORTABLE C      */ 
/*                                                           6.4.3        */
/*  AUTHOR                                                                */
/*                                                                        */
/*    Yuxin Zhou, Microsoft Corporation                                   */
/*                                                                        */
/*  DESCRIPTION                                                           */ 
/*                                                                        */ 
/*    This file defines the NetX Simple Network Management Protocol       */ 
/*    (SNMP) component, including all data types and external references. */ 
/*    It is assumed that nx_api.h and nx_port.h have already been         */ 
/*    included.                                                           */
/*                                                                        */ 
/**************************************************************************/

#ifndef NXD_SNMP_H
#define NXD_SNMP_H

/* Determine if a C++ compiler is being used.  If so, ensure that standard
   C is used to process the API information.  */

#ifdef   __cplusplus

/* Yes, C++ compiler is present.  Use standard C.  */
extern   "C" {

#endif

/* Include necessary digest and encryption files.  */

#include "nx_api.h"
#ifndef NX_SNMP_DISABLE_V3
#include "nx_md5.h"
#include "nx_sha1.h"
#include "nx_des.h"
#endif


/* Disable SNMP V1 message processing.
#define NX_SNMP_DISABLE_V1
*/

/* Disable SNMP V2 message processing.
#define NX_SNMP_DISABLE_V2
*/

/* Disable SNMP V3 message processing.
#define NX_SNMP_DISABLE_V3
*/

/* Default support of SNMP V2 to only V2C.
#define NX_SNMP_V2C_ONLY
*/

/* By default support for security (authentication and encryption) is enabled. To disable
   it define this option.
#define NX_SNMP_NO_SECURITY
*/


/* Define the SNMP ID.  */

#define NX_SNMP_ID                          0x534E4D50UL


/* Define SNMP UDP socket create options.  */

#ifndef NX_SNMP_TYPE_OF_SERVICE
#define NX_SNMP_TYPE_OF_SERVICE             NX_IP_NORMAL
#endif

#ifndef NX_SNMP_FRAGMENT_OPTION
#define NX_SNMP_FRAGMENT_OPTION             NX_DONT_FRAGMENT
#endif  

#ifndef NX_SNMP_TIME_TO_LIVE
#define NX_SNMP_TIME_TO_LIVE                0x80
#endif

#ifndef NX_SNMP_AGENT_PRIORITY
#define NX_SNMP_AGENT_PRIORITY              16
#endif

#ifndef NX_SNMP_AGENT_TIMEOUT
#define NX_SNMP_AGENT_TIMEOUT               (1 * NX_IP_PERIODIC_RATE)
#endif

#ifndef NX_SNMP_MAX_OCTET_STRING
#define NX_SNMP_MAX_OCTET_STRING            255
#else
#if NX_SNMP_MAX_OCTET_STRING < 23
#error "NX_SNMP_MAX_OCTET_STRING should not be smaller than 23."
#endif
#endif

#ifndef NX_SNMP_MAX_CONTEXT_STRING
#define NX_SNMP_MAX_CONTEXT_STRING          32
#endif

#ifndef NX_SNMP_MAX_USER_NAME
#define NX_SNMP_MAX_USER_NAME               64
#endif

#ifndef NX_SNMP_MAX_TRAP_NAME
#define NX_SNMP_MAX_TRAP_NAME               64  
#endif


#ifndef NX_SNMP_MAX_SECURITY_KEY
#define NX_SNMP_MAX_SECURITY_KEY            64
#else
#if NX_SNMP_MAX_SECURITY_KEY < 20
#error "NX_SNMP_MAX_SECURITY_KEY should not be smaller than 20."
#endif
#endif

#ifndef NX_SNMP_MAX_TRAP_KEY
#define NX_SNMP_MAX_TRAP_KEY                64    
#endif

#ifndef NX_SNMP_PACKET_SIZE
#define NX_SNMP_PACKET_SIZE                 560                      
#endif


/* Define the maximum number of packets that can be queued on the SNMP Agent's UDP Port.  */

#define NX_SNMP_QUEUE_DEPTH                 5

/* Define a symbol for indicating trap contains proprietary data (instead of just standard cold start, warm start etc. */
#define NX_SNMP_TRAP_CUSTOM    0xFFFFFFFF


/* Define the SNMP versions supported.  */

#define NX_SNMP_VERSION_1                   0
#define NX_SNMP_VERSION_2C                  1
#define NX_SNMP_VERSION_2                   2                       
#define NX_SNMP_VERSION_3                   3

/* Define constants for ASN1 BER encoding   */

#define NX_SNMP_ASN_TAG_CONSTRUCTED_MASK    0x20                    /* If bit 6 is set, it is a constructed type. */
#define NX_SNMP_ASN_TAG_MULTIBYTE_MASK      0x1F                    /* Some ASN1 tags are multi-byte.       */
#define NX_SNMP_ASN_TAG_CLASS_MASK          0xC0                    /* Top 2 bits of tag are the "class".   */
#define NX_SNMP_ASN_TAG_MASK                0x1F                    /* Bottom 6 bits are the tag itself.    */

/* Tag classes. Bits refer to bit locations in the tag octet.
 * Note that "Application" and "Private" are not recommended for use and
 * should probably never be encountered in SNMP.
 * Class            |    Bit 7    |    Bit 8   |
 * ---------------------------------------------
 * Universal        |      0      |      0     |
 * Application      |      0      |      1     |
 * Context-specific |      1      |      0     |
 * Private          |      1      |      1     |
 */
#define NX_SNMP_ASN_TAG_CLASS_UNIVERSAL                         0x00 /* ASN.1 standard tag values. */
#define NX_SNMP_ASN_TAG_CLASS_APPLICATION                       0x01 /* (UNUSED) Application-specific tag values. */
#define NX_SNMP_ASN_TAG_CLASS_CONTEXT                           0x02 /* Context-specific tag values. */
#define NX_SNMP_ASN_TAG_CLASS_PRIVATE                           0x03 /* (UNUSED) Private tag values. */

/* Define the SNMP/ANS1 control characters.  */

#define NX_SNMP_ANS1_SEQUENCE               0x30                    /* ANS1 Code for SEQUENCE               */
#define NX_SNMP_ANS1_INTEGER                0x02                    /* ANS1 Code for INTEGER                */ 
#define NX_SNMP_ANS1_BIT_STRING             0x03                    /* ANS1 Code for BIT STRING             */ 
#define NX_SNMP_ANS1_OCTET_STRING           0x04                    /* ANS1 Code for OCTET STRING           */ 
#define NX_SNMP_ANS1_NULL                   0x05                    /* ANS1 Code for NULL                   */ 
#define NX_SNMP_ANS1_OBJECT_ID              0x06                    /* ANS1 Code for OBJECT ID              */ 
#define NX_SNMP_ANS1_IP_ADDRESS             0x40                    /* ANS1 Code for IP ADDRESS             */ 
#define NX_SNMP_ANS1_COUNTER                0x41                    /* ANS1 Code for COUNTER                */ 
#define NX_SNMP_ANS1_GAUGE                  0x42                    /* ANS1 Code for GAUGE                  */ 
#define NX_SNMP_ANS1_TIME_TICS              0x43                    /* ANS1 Code for TIME TICS              */ 
#define NX_SNMP_ANS1_OPAQUE                 0x44                    /* ANS1 Code for OPAQUE                 */ 
#define NX_SNMP_ANS1_NSAP_ADDRESS           0x45                    /* ANS1 Code for NSAP ADDRESS           */ 
#define NX_SNMP_ANS1_COUNTER64              0x46                    /* ANS1 Code for COUNTER64              */ 
#define NX_SNMP_ANS1_UINTEGER32             0x47                    /* ANS1 Code for UINTEGER32             */ 
#define NX_SNMP_ANS1_NO_SUCH_OBJECT         0x80                    /* ANS1 Code for No Such Object         */ 
#define NX_SNMP_ANS1_NO_SUCH_INSTANCE       0x81                    /* ANS1 Code for No Such Instance       */
#define NX_SNMP_ANS1_END_OF_MIB_VIEW        0x82                    /* ANS1 Code for End of MIB view        */ 
#define NX_SNMP_ANS1_GET_REQUEST            0xA0                    /* ANS1 Code for SNMP GET               */
#define NX_SNMP_ANS1_GET_NEXT_REQUEST       0xA1                    /* ANS1 Code for SNMP GET NEXT          */
#define NX_SNMP_ANS1_GET_RESPONSE           0xA2                    /* ANS1 Code for SNMP GET RESPONSE      */
#define NX_SNMP_ANS1_SET_REQUEST            0xA3                    /* ANS1 Code for SNMP SET               */
#define NX_SNMP_ANS1_TRAP_REQUEST           0xA4                    /* ANS1 Code for SNMP TRAP              */
#define NX_SNMP_ANS1_GET_BULK_REQUEST       0xA5                    /* ANS1 Code for SNMP GET BULK (v2)     */
#define NX_SNMP_ANS1_INFORM_REQUEST         0xA6                    /* ANS1 Code for SNMP INFORM (v2)       */
#define NX_SNMP_ANS1_TRAP2_REQUEST          0xA7                    /* ANS1 Code for SNMP TRAP (v2)         */
#define NX_SNMP_ANS1_REPORT_REQUEST         0xA8                    /* ANS1 Code for SNMP REPORT (v3)       */ 
#define NX_SNMP_ANS1_MULTI_BYTES            0x80                    /* ANS1 Bit for Multiple Bytes          */ 
#ifdef  FEATURE_NX_IPV6
#define NX_SNMP_ANS1_IPV6_ADDRESS           NX_SNMP_ANS1_OCTET_STRING /* ANS1 Code for OCTET string         */ 
#endif
/* Define the SNMP application GET/GETNEXT/SET callback return error codes.  */

#define NX_SNMP_SUCCESS                     0                       /* Everything is okay                   */ 
#define NX_SNMP_ERROR_TOOBIG                1                       /* Can't fit reply in outgoing message  */ 
#define NX_SNMP_ERROR_NOSUCHNAME            2                       /* Object could not be found            */ 
#define NX_SNMP_ERROR_BADVALUE              3                       /* Invalid value of set operation       */
#define NX_SNMP_ERROR_READONLY              4                       /* Object is read only and cannot be set*/ 
#define NX_SNMP_ERROR_GENERAL               5                       /* General error                        */ 
#define NX_SNMP_ERROR_NOACCESS              6
#define NX_SNMP_ERROR_WRONGTYPE             7
#define NX_SNMP_ERROR_WRONGLENGTH           8
#define NX_SNMP_ERROR_WRONGENCODING         9
#define NX_SNMP_ERROR_WRONGVALUE            10
#define NX_SNMP_ERROR_NOCREATION            11
#define NX_SNMP_ERROR_INCONSISTENTVALUE     12
#define NX_SNMP_ERROR_RESOURCEUNAVAILABLE   13
#define NX_SNMP_ERROR_COMMITFAILED          14
#define NX_SNMP_ERROR_UNDOFAILED            15
#define NX_SNMP_ERROR_AUTHORIZATION         16
#define NX_SNMP_ERROR_NOTWRITABLE           17
#define NX_SNMP_ERROR_INCONSISTENTNAME      18
#define NX_SNMP_UNKNOWN_USERNAME            19 
#define NX_SNMP_UNSUPPORTED_AUTHENTICATION  20
#define NX_SNMP_INVALID_PDU_ENCRYPTION      21
#define NX_SNMP_INVALID_ENCRYPT_LENGTH      22
#define NX_SNMP_MULTIBYTE_TAG_UNSUPPORTED   23
#define NX_SNMP_INVALID_TAG_CLASS           24
#define NX_SNMP_ASN1_LENGTH_TOO_LONG        25

/* Define SNMP Traps.  */

#define NX_SNMP_TRAP_COLDSTART              0
#define NX_SNMP_TRAP_WARMSTART              1
#define NX_SNMP_TRAP_LINKDOWN               2
#define NX_SNMP_TRAP_LINKUP                 3
#define NX_SNMP_TRAP_AUTHENTICATE_FAILURE   4
#define NX_SNMP_TRAP_EGPNEIGHBORLOSS        5
#define NX_SNMP_TRAP_ENTERPRISESPECIFIC     6


/* Define SNMP requests for use by the agent request processing callback routine.  */

#define NX_SNMP_GET_REQUEST                 NX_SNMP_ANS1_GET_REQUEST        
#define NX_SNMP_GET_NEXT_REQUEST            NX_SNMP_ANS1_GET_NEXT_REQUEST   
#define NX_SNMP_SET_REQUEST                 NX_SNMP_ANS1_SET_REQUEST        
#define NX_SNMP_GET_BULK_REQUEST            NX_SNMP_ANS1_GET_BULK_REQUEST   


/* Define SNMP object type definitions.  These will be mapped to the internal ANS1 equivalents.  */

#define NX_SNMP_INTEGER                     NX_SNMP_ANS1_INTEGER             
#define NX_SNMP_BIT_STRING                  NX_SNMP_ANS1_BIT_STRING          
#define NX_SNMP_OCTET_STRING                NX_SNMP_ANS1_OCTET_STRING  
#define NX_SNMP_NULL                        NX_SNMP_ANS1_NULL          
#define NX_SNMP_OBJECT_ID                   NX_SNMP_ANS1_OBJECT_ID
#define NX_SNMP_IP_ADDRESS                  NX_SNMP_ANS1_IP_ADDRESS         
#define NX_SNMP_COUNTER                     NX_SNMP_ANS1_COUNTER            
#define NX_SNMP_GAUGE                       NX_SNMP_ANS1_GAUGE              
#define NX_SNMP_TIME_TICS                   NX_SNMP_ANS1_TIME_TICS          
#define NX_SNMP_OPAQUE                      NX_SNMP_ANS1_OPAQUE             
#define NX_SNMP_NSAP_ADDRESS                NX_SNMP_ANS1_NSAP_ADDRESS      
#define NX_SNMP_COUNTER64                   NX_SNMP_ANS1_COUNTER64          
#define NX_SNMP_UINTEGER32                  NX_SNMP_ANS1_UINTEGER32         
#define NX_SNMP_NO_SUCH_OBJECT              NX_SNMP_ANS1_NO_SUCH_OBJECT
#define NX_SNMP_NO_SUCH_INSTANCE            NX_SNMP_ANS1_NO_SUCH_INSTANCE
#define NX_SNMP_END_OF_MIB_VIEW             NX_SNMP_ANS1_END_OF_MIB_VIEW 


/* Define return code constants.  */

#define NX_SNMP_ERROR                       0x100                   /* SNMP internal error                  */ 
#define NX_SNMP_NEXT_ENTRY                  0x101                   /* SNMP found next entry                */ 
#define NX_SNMP_ENTRY_END                   0x102                   /* SNMP end of entry                    */ 
#define NX_SNMP_TIMEOUT                     0x101                   /* SNMP timeout occurred                */ 
#define NX_SNMP_FAILED                      0x102                   /* SNMP error                           */ 
#define NX_SNMP_POOL_ERROR                  0x103                   /* SNMP packet pool size error          */ 
#define NX_SNMP_INVALID_IP_PROTOCOL_ERROR   0x104                   /* Invalid packet IP version            */

/* Define the SNMP Agent UDP port number */

#ifndef NX_SNMP_AGENT_PORT
#define NX_SNMP_AGENT_PORT                  161                     /* Port for SNMP Agent                  */
#endif

#ifndef NX_SNMP_MANAGER_TRAP_PORT
#define NX_SNMP_MANAGER_TRAP_PORT           162                     /* Trap Port for SNMP Manager           */ 
#endif


/* Define SNMP v3 constants.  */

#define NX_SNMP_USM_SECURITY_MODEL          3                       /* Value for USM Security model         */
#define NX_SNMP_SECURITY_AUTHORIZE          0x1                     /* Authorization required bit           */ 
#define NX_SNMP_SECURITY_PRIVACY            0x2                     /* Privacy (encryption) required bit    */ 
#define NX_SNMP_SECURITY_REPORTABLE         0x4                     /* Reportable bit                       */ 


/* Define SNMP authentication/encryption key types.  */

#define NX_SNMP_MD5_KEY                     1
#define NX_SNMP_SHA_KEY                     2
#define NX_SNMP_DES_DEY                     3
#define NX_SNMP_AES_KEY                     4                       /* Future expansion                     */ 


/* Define SNMP USM digest size.  */

#define NX_SNMP_DIGEST_SIZE                 12                      /* Size of SNMP authentication digest   */ 
#define NX_SNMP_MD5_DIGEST_SIZE             16                      /* Size of pure MD5 digest              */ 
#define NX_SNMP_SHA_DIGEST_SIZE             20                      /* Size of pure SHA digest              */ 
#define NX_SNMP_DIGEST_WORKING_SIZE         64                      /* Size of keys for the digest routines */ 

#define NX_SNMP_TCP_TIMER_RATE              NX_IP_PERIODIC_RATE/NX_TCP_TRANSMIT_TIMER_RATE


/* Define the key data types that will be used by the digest and/or encryption routines.  */

typedef struct NX_SNMP_SECURITY_KEY_STRUCT
{

    UINT    nx_snmp_security_key_size;
    UINT    nx_snmp_security_key_type;
    UCHAR   nx_snmp_security_key[NX_SNMP_MAX_SECURITY_KEY];

} NX_SNMP_SECURITY_KEY;



/* Define the SNMP Agent object data structure.  This structure is used for holding a single
   variable's value.  It is passed between the SNMP Agent and the application callback functions
   in order to get/set variables.  */

typedef struct NX_SNMP_OBJECT_DATA_STRUCT
{

    UINT            nx_snmp_object_data_type;                       /* Type of SNMP data contained         */
    LONG            nx_snmp_object_data_msw;                        /* Most significant 32 bits            */ 
    LONG            nx_snmp_object_data_lsw;                        /* Least significant 32 bits           */ 
    UINT            nx_snmp_object_octet_string_size;               /* Size of OCTET string                */ 
    UCHAR           nx_snmp_object_octet_string[NX_SNMP_MAX_OCTET_STRING + 1];

} NX_SNMP_OBJECT_DATA;


/* Define the SNMP Agent object list type that defines application objects to be included in the
   trap calls.  */

typedef struct NX_SNMP_TRAP_OBJECT_STRUCT
{

    UCHAR               *nx_snmp_object_string_ptr;
    NX_SNMP_OBJECT_DATA *nx_snmp_object_data;
} NX_SNMP_TRAP_OBJECT;


/* Define the SNMP Agent data structure.  */

typedef struct NX_SNMP_AGENT_STRUCT 
{
    ULONG           nx_snmp_agent_id;                               /* SNMP Agent ID                        */
    CHAR           *nx_snmp_agent_name;                             /* Name of this SNMP Agent              */
    NX_IP          *nx_snmp_agent_ip_ptr;                           /* Pointer to associated IP structure   */ 
    NX_PACKET_POOL *nx_snmp_agent_packet_pool_ptr;                  /* Pointer to SNMP agent packet pool    */ 
    UINT            nx_snmp_agent_current_version;                  /* Current SNMP Version                 */ 
    UINT            nx_snmp_agent_request_get_type;                 /* Indicate if last request received is Get or Set type*/
    UINT            nx_snmp_agent_interface_index;                  /* SNMP network interface index         */
    UINT            nx_snmp_agent_v1_enabled;                       /* SNMP agent enabled for V1 status     */
    UINT            nx_snmp_agent_v2_enabled;                       /* SNMP agent enabled for V2/V2C status */
    UINT            nx_snmp_agent_v3_enabled;                       /* SNMP agent enabled for V3 status     */
#ifndef NX_SNMP_DISABLE_V3
    ULONG           nx_snmp_agent_v3_message_id;                    /* SNMP v3 message id                   */ 
    ULONG           nx_snmp_agent_v3_message_size;                  /* SNMP v3 message size                 */ 
    ULONG           nx_snmp_agent_v3_message_security_type;         /* SNMP v3 message security type        */ 
    UCHAR           nx_snmp_agent_v3_message_security_options;      /* SNMP v3 message security flags       */ 
    UCHAR           nx_snmp_agent_v3_security_context_engine[NX_SNMP_MAX_CONTEXT_STRING]; /* Context engine */
    UINT            nx_snmp_agent_v3_security_context_engine_size;  /* SNMP v3 security context engine size */
    ULONG           nx_snmp_agent_v3_security_engine_boots;         /* SNMP v3 security engine boot count   */ 
    ULONG           nx_snmp_agent_v3_security_engine_boot_time;     /* SNMP v3 security engine boot time    */ 
    UCHAR           nx_snmp_agent_v3_security_user_name[NX_SNMP_MAX_USER_NAME]; /* SNMPv3 security username */
    UINT            nx_snmp_agent_v3_security_user_name_size;       /* SNMP v3 security user name size      */
    UCHAR           nx_snmp_agent_v3_security_trap_name[NX_SNMP_MAX_TRAP_NAME]; /* SNMPv3 username to send trap messages */
    UINT            nx_snmp_agent_v3_security_trap_name_size;       /* SNMP v3 security username size for trap messages  */
    UINT            nx_snmp_agent_unsupported_sec_count;            /* Count of reports with no security    */
    UINT            nx_snmp_agent_unknown_engineid_count;           /* Count of unknown engine ID reports   */
    UINT            nx_snmp_agent_unknown_username_count;           /* Count of no username  reports        */
    UINT            nx_snmp_agent_mismatched_time_count;            /* Count of time out of synch  reports  */
    UCHAR           nx_snmp_agent_v3_security_authentication[NX_SNMP_MAX_SECURITY_KEY]; /* security authentication */ 
    UINT            nx_snmp_agent_v3_security_authentication_size;  /* SNMP v3 security authentication size */
    UCHAR           nx_snmp_agent_v3_security_privacy[NX_SNMP_MAX_SECURITY_KEY];/* SNMP v3 security privacy */
    UINT            nx_snmp_agent_v3_security_privacy_size;         /* SNMP v3 security privacy size        */
    UCHAR           nx_snmp_agent_v3_trap_authentication[NX_SNMP_MAX_TRAP_KEY]; /* security authentication  */ 
    UINT            nx_snmp_agent_v3_trap_authentication_size;      /* SNMPv3 trap message authentication size     */
    UCHAR           nx_snmp_agent_v3_trap_privacy[NX_SNMP_MAX_TRAP_KEY];/* SNMP v3 trap message privacy     */
    UINT            nx_snmp_agent_v3_trap_privacy_size;             /* SNMP v3 trap message privacy size    */
    UCHAR           nx_snmp_agent_v3_context_engine[NX_SNMP_MAX_CONTEXT_STRING];  /* SNMP v3 context name   */
    UINT            nx_snmp_agent_v3_context_engine_size;           /* SNMP v3 context engine size          */ 
    UCHAR           nx_snmp_agent_v3_context_name[NX_SNMP_MAX_CONTEXT_STRING]; /* SNMPv3 context name       */
    UINT            nx_snmp_agent_v3_context_name_size;             /* SNMP v3 context engine size          */ 
    UINT            nx_snmp_agent_v3_context_engine_boots;          /* SNMP v3 context engine boots         */ 
    UINT            nx_snmp_agent_v3_context_engine_boot_time;      /* SNMP v3 context engine boot time     */ 
    UINT            nx_snmp_agent_v3_context_salt_counter;          /* SNMP v3 context salt counter         */ 
    NX_SNMP_SECURITY_KEY *nx_snmp_agent_v3_authentication_key;      /* SNMP v3 authentication key           */ 
    NX_SNMP_SECURITY_KEY *nx_snmp_agent_v3_auth_trap_key;           /* SNMP v3 authentication key for traps */ 
    NX_SNMP_SECURITY_KEY *nx_snmp_agent_v3_privacy_key;             /* SNMP v3 privacy key                  */ 
    NX_SNMP_SECURITY_KEY *nx_snmp_agent_v3_priv_trap_key;           /* SNMP v3 privacy key for traps        */ 
    NX_MD5          nx_snmp_agent_v3_md5_data;                      /* SNMP v3 MD5 authentication data      */ 
    NX_SHA1         nx_snmp_agent_v3_sha_data;                      /* SNMP v3 SHA authentication data      */ 
    NX_DES          nx_snmp_agent_v3_des_data;                      /* SNMP v3 DES encryption data          */ 
#endif  /* NX_SNMP_DISABLE_V3 */
    UCHAR           nx_snmp_agent_current_community_string[NX_SNMP_MAX_USER_NAME + 1]; /* Received Community string            */
    UCHAR           nx_snmp_agent_private_community_string[NX_SNMP_MAX_USER_NAME + 1]; /* Agent's private community string     */
    UCHAR           nx_snmp_agent_public_community_string[NX_SNMP_MAX_USER_NAME + 1];  /* Agent's public community string      */  
    UCHAR           nx_snmp_agent_current_octet_string[NX_SNMP_MAX_OCTET_STRING + 1];  /* Current SNMP Object ID*/
    NX_SNMP_OBJECT_DATA nx_snmp_agent_current_object_data;          /* Current SNMP Object information      */
    NXD_ADDRESS     nx_snmp_agent_current_manager_ip;               /* Current SNMP Manager IPv6/IPv4 address*/ 
    UINT            nx_snmp_agent_current_manager_port;             /* Current SNMP Manager UDP port        */ 
    ULONG           nx_snmp_agent_packets_received;                 /* Number of SNMP packets received      */ 
    ULONG           nx_snmp_agent_packets_sent;                     /* Number of SNMP packets sent          */ 
    ULONG           nx_snmp_agent_invalid_version;                  /* Number of invalid SNMP versions      */ 
    ULONG           nx_snmp_agent_total_get_variables;              /* Number of variables to get           */ 
    ULONG           nx_snmp_agent_total_set_variables;              /* Number of variables to set           */ 
    ULONG           nx_snmp_agent_too_big_errors;                   /* Number of too big errors sent        */ 
    ULONG           nx_snmp_agent_no_such_name_errors;              /* Number of no such name errors sent   */ 
    ULONG           nx_snmp_agent_bad_value_errors;                 /* Number of bad value errors sent      */ 
    ULONG           nx_snmp_agent_general_errors;                   /* Number of general errors sent        */ 
    ULONG           nx_snmp_agent_request_errors;                   /* Number of errors on SNMP requests    */ 
    ULONG           nx_snmp_agent_get_requests;                     /* Number of GET requests               */ 
    ULONG           nx_snmp_agent_getnext_requests;                 /* Number of GETNEXT requests           */ 
    ULONG           nx_snmp_agent_getbulk_requests;                 /* Number of GETBULK requests           */ 
    ULONG           nx_snmp_agent_set_requests;                     /* Number of SET requests               */ 
    ULONG           nx_snmp_agent_reports_sent;                     /* Number of DISCOVERY requests         */ 
    ULONG           nx_snmp_agent_internal_errors;                  /* Number of internal errors detected   */  
    ULONG           nx_snmp_agent_traps_sent;                       /* Number of traps sent                 */ 
    ULONG           nx_snmp_agent_total_bytes_sent;                 /* Number of total bytes sent           */ 
    ULONG           nx_snmp_agent_total_bytes_received;             /* Number of total bytes received       */ 
    ULONG           nx_snmp_agent_unknown_requests;                 /* Number of unknown commands received  */ 
    ULONG           nx_snmp_agent_invalid_packets;                  /* Number of invalid SNMP packets       */ 
    ULONG           nx_snmp_agent_allocation_errors;                /* Number of allocation errors          */ 
    ULONG           nx_snmp_agent_username_errors;                  /* Number of community/username errors  */ 
    ULONG           nx_snmp_agent_authentication_errors;            /* Number of authentication errors      */ 
    ULONG           nx_snmp_agent_privacy_errors;                   /* Number of privacy errors             */ 
    ULONG           nx_snmp_agent_getresponse_sent;                 /* Number of getresponse sent           */ 
    NX_UDP_SOCKET   nx_snmp_agent_socket;                           /* SNMP Server UDP socket               */ 
    TX_THREAD       nx_snmp_agent_thread;                           /* SNMP agent thread                    */ 
    UINT (*nx_snmp_agent_get_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data);
    UINT (*nx_snmp_agent_getnext_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data);
    UINT (*nx_snmp_agent_set_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data);
    UINT (*nx_snmp_agent_username_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *username);

} NX_SNMP_AGENT;



#ifndef NX_SNMP_SOURCE_CODE

/* Application caller is present, perform API mapping.  */

/* Determine if error checking is desired.  If so, map API functions
   to the appropriate error checking front-ends.  Otherwise, map API
   functions to the core functions that actually perform the work.
   Note: error checking is enabled by default.  */

#ifdef NX_DISABLE_ERROR_CHECKING

/* Services without error checking.  */

#define nx_snmp_agent_authenticate_key_use  _nx_snmp_agent_authenticate_key_use
#define nx_snmp_agent_auth_trap_key_use     _nx_snmp_agent_auth_trap_key_use  
#define nx_snmp_agent_community_get         _nx_snmp_agent_community_get
#define nx_snmp_agent_context_engine_set    _nx_snmp_agent_context_engine_set
#define nx_snmp_agent_context_name_set      _nx_snmp_agent_context_name_set
#define nx_snmp_agent_v3_context_boots_set  _nx_snmp_agent_v3_context_boots_set
#define nx_snmp_agent_create                _nx_snmp_agent_create
#define nx_snmp_agent_delete                _nx_snmp_agent_delete
#define nx_snmp_agent_request_get_type_test _nx_snmp_agent_request_get_type_test
#define nx_snmp_agent_current_version_get   _nx_snmp_agent_current_version_get
#define nx_snmp_agent_version_set           _nx_snmp_agent_version_set
#define nx_snmp_agent_set_interface         _nx_snmp_agent_set_interface
#ifndef NX_SNMP_DISABLE_V3
#define nx_snmp_agent_md5_key_create        _nx_snmp_agent_md5_key_create
#define nx_snmp_agent_md5_key_create_extended _nx_snmp_agent_md5_key_create_extended
#define nx_snmp_agent_privacy_key_use       _nx_snmp_agent_privacy_key_use  
#define nx_snmp_agent_sha_key_create        _nx_snmp_agent_sha_key_create
#define nx_snmp_agent_sha_key_create_extended _nx_snmp_agent_sha_key_create_extended
#endif
#define nx_snmp_agent_priv_trap_key_use     _nx_snmp_agent_priv_trap_key_use
#define nx_snmp_agent_private_string_set    _nx_snmp_agent_private_string_set
#define nx_snmp_agent_public_string_set     _nx_snmp_agent_public_string_set
#define nx_snmp_agent_public_string_test    _nx_snmp_agent_public_string_test
#define nx_snmp_agent_private_string_test   _nx_snmp_agent_private_string_test
#define nx_snmp_agent_start                 _nx_snmp_agent_start
#define nx_snmp_agent_stop                  _nx_snmp_agent_stop
#define nx_snmp_agent_trap_send             _nx_snmp_agent_trap_send
#define nx_snmp_agent_trapv2_send           _nx_snmp_agent_trapv2_send
#define nx_snmp_agent_trapv3_send           _nx_snmp_agent_trapv3_send
#define nxd_snmp_agent_trap_send            _nxd_snmp_agent_trap_send
#define nxd_snmp_agent_trapv2_send          _nxd_snmp_agent_trapv2_send
#define nxd_snmp_agent_trapv3_send          _nxd_snmp_agent_trapv3_send
#define nx_snmp_object_compare              _nx_snmp_object_compare
#define nx_snmp_object_compare_extended     _nx_snmp_object_compare_extended
#define nx_snmp_object_copy                 _nx_snmp_object_copy
#define nx_snmp_object_copy_extended        _nx_snmp_object_copy_extended
#define nx_snmp_object_counter_get          _nx_snmp_object_counter_get
#define nx_snmp_object_counter_set          _nx_snmp_object_counter_set
#define nx_snmp_object_counter64_get        _nx_snmp_object_counter64_get
#define nx_snmp_object_counter64_set        _nx_snmp_object_counter64_set
#define nx_snmp_object_end_of_mib           _nx_snmp_object_end_of_mib
#define nx_snmp_object_gauge_get            _nx_snmp_object_gauge_get
#define nx_snmp_object_gauge_set            _nx_snmp_object_gauge_set
#define nx_snmp_object_id_get               _nx_snmp_object_id_get
#define nx_snmp_object_id_set               _nx_snmp_object_id_set
#define nx_snmp_object_integer_get          _nx_snmp_object_integer_get
#define nx_snmp_object_integer_set          _nx_snmp_object_integer_set
#define nx_snmp_object_ip_address_get       _nx_snmp_object_ip_address_get
#define nx_snmp_object_ip_address_set       _nx_snmp_object_ip_address_set
#ifdef FEATURE_NX_IPV6
#define nx_snmp_object_ipv6_address_get     _nx_snmp_object_ipv6_address_get
#define nx_snmp_object_ipv6_address_set     _nx_snmp_object_ipv6_address_set
#endif
#define nx_snmp_object_no_instance          _nx_snmp_object_no_instance
#define nx_snmp_object_not_found            _nx_snmp_object_not_found
#define nx_snmp_object_octet_string_get     _nx_snmp_object_octet_string_get
#define nx_snmp_object_octet_string_set     _nx_snmp_object_octet_string_set
#define nx_snmp_object_string_get           _nx_snmp_object_string_get
#define nx_snmp_object_string_set           _nx_snmp_object_string_set
#define nx_snmp_object_timetics_get         _nx_snmp_object_timetics_get
#define nx_snmp_object_timetics_set         _nx_snmp_object_timetics_set
#define nx_snmp_agent_trapv2_oid_send       _nx_snmp_agent_trapv2_oid_send
#define nx_snmp_agent_trapv3_oid_send       _nx_snmp_agent_trapv3_oid_send
      

#else

/* Services with error checking.  */

#define nx_snmp_agent_authenticate_key_use  _nxe_snmp_agent_authenticate_key_use
#define nx_snmp_agent_auth_trap_key_use     _nxe_snmp_agent_auth_trap_key_use  
#define nx_snmp_agent_community_get         _nxe_snmp_agent_community_get
#define nx_snmp_agent_context_engine_set    _nxe_snmp_agent_context_engine_set
#define nx_snmp_agent_context_name_set      _nxe_snmp_agent_context_name_set
#define nx_snmp_agent_v3_context_boots_set  _nxe_snmp_agent_v3_context_boots_set
#define nx_snmp_agent_create                _nxe_snmp_agent_create
#define nx_snmp_agent_delete                _nxe_snmp_agent_delete
#define nx_snmp_agent_request_get_type_test _nxe_snmp_agent_request_get_type_test
#define nx_snmp_agent_current_version_get   _nxe_snmp_agent_current_version_get
#define nx_snmp_agent_version_set           _nxe_snmp_agent_version_set
#define nx_snmp_agent_set_interface         _nxe_snmp_agent_set_interface
#ifndef NX_SNMP_DISABLE_V3
#define nx_snmp_agent_md5_key_create        _nxe_snmp_agent_md5_key_create
#define nx_snmp_agent_md5_key_create_extended _nxe_snmp_agent_md5_key_create_extended
#define nx_snmp_agent_sha_key_create        _nxe_snmp_agent_sha_key_create
#define nx_snmp_agent_sha_key_create_extended _nxe_snmp_agent_sha_key_create_extended
#define nx_snmp_agent_privacy_key_use       _nxe_snmp_agent_privacy_key_use
#define nx_snmp_agent_priv_trap_key_use     _nxe_snmp_agent_priv_trap_key_use 
#endif
#define nx_snmp_agent_private_string_set    _nxe_snmp_agent_private_string_set
#define nx_snmp_agent_public_string_set     _nxe_snmp_agent_public_string_set
#define nx_snmp_agent_private_string_test   _nxe_snmp_agent_private_string_test
#define nx_snmp_agent_public_string_test    _nxe_snmp_agent_public_string_test
#define nx_snmp_agent_start                 _nxe_snmp_agent_start
#define nx_snmp_agent_stop                  _nxe_snmp_agent_stop
#define nx_snmp_agent_trap_send             _nxe_snmp_agent_trap_send
#define nx_snmp_agent_trapv2_send           _nxe_snmp_agent_trapv2_send
#define nx_snmp_agent_trapv3_send           _nxe_snmp_agent_trapv3_send
#define nxd_snmp_agent_trap_send            _nxde_snmp_agent_trap_send
#define nxd_snmp_agent_trapv2_send          _nxde_snmp_agent_trapv2_send
#define nxd_snmp_agent_trapv3_send          _nxde_snmp_agent_trapv3_send
#define nx_snmp_object_compare              _nxe_snmp_object_compare
#define nx_snmp_object_compare_extended     _nxe_snmp_object_compare_extended
#define nx_snmp_object_copy                 _nxe_snmp_object_copy
#define nx_snmp_object_copy_extended        _nxe_snmp_object_copy_extended
#define nx_snmp_object_counter_get          _nxe_snmp_object_counter_get
#define nx_snmp_object_counter_set          _nxe_snmp_object_counter_set
#define nx_snmp_object_counter64_get        _nxe_snmp_object_counter64_get
#define nx_snmp_object_counter64_set        _nxe_snmp_object_counter64_set
#define nx_snmp_object_end_of_mib           _nxe_snmp_object_end_of_mib
#define nx_snmp_object_gauge_get            _nxe_snmp_object_gauge_get
#define nx_snmp_object_gauge_set            _nxe_snmp_object_gauge_set
#define nx_snmp_object_id_get               _nxe_snmp_object_id_get
#define nx_snmp_object_id_set               _nxe_snmp_object_id_set
#define nx_snmp_object_integer_get          _nxe_snmp_object_integer_get
#define nx_snmp_object_integer_set          _nxe_snmp_object_integer_set
#define nx_snmp_object_ip_address_get       _nxe_snmp_object_ip_address_get
#define nx_snmp_object_ip_address_set       _nxe_snmp_object_ip_address_set
#ifdef FEATURE_NX_IPV6
#define nx_snmp_object_ipv6_address_get     _nxe_snmp_object_ipv6_address_get
#define nx_snmp_object_ipv6_address_set     _nxe_snmp_object_ipv6_address_set
#endif
#define nx_snmp_object_no_instance          _nxe_snmp_object_no_instance
#define nx_snmp_object_not_found            _nxe_snmp_object_not_found
#define nx_snmp_object_octet_string_get     _nxe_snmp_object_octet_string_get
#define nx_snmp_object_octet_string_set     _nxe_snmp_object_octet_string_set
#define nx_snmp_object_string_get           _nxe_snmp_object_string_get
#define nx_snmp_object_string_set           _nxe_snmp_object_string_set
#define nx_snmp_object_timetics_get         _nxe_snmp_object_timetics_get
#define nx_snmp_object_timetics_set         _nxe_snmp_object_timetics_set
#define nx_snmp_agent_trapv2_oid_send       _nxe_snmp_agent_trapv2_oid_send
#define nx_snmp_agent_trapv3_oid_send       _nxe_snmp_agent_trapv3_oid_send
       

#endif  /* NX_DISABLE_ERROR_CHECKING */

/* Define the prototypes accessible to the application software.  */

UINT    nx_snmp_agent_authenticate_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    nx_snmp_agent_auth_trap_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    nx_snmp_agent_md5_key_create(NX_SNMP_AGENT *agent_ptr, UCHAR *password, NX_SNMP_SECURITY_KEY *destination_key);
UINT    nx_snmp_agent_md5_key_create_extended(NX_SNMP_AGENT *agent_ptr, UCHAR *password, UINT password_length, NX_SNMP_SECURITY_KEY *destination_key);
UINT    nx_snmp_agent_privacy_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    nx_snmp_agent_priv_trap_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    nx_snmp_agent_sha_key_create(NX_SNMP_AGENT *agent_ptr, UCHAR *password, NX_SNMP_SECURITY_KEY *destination_key);
UINT    nx_snmp_agent_sha_key_create_extended(NX_SNMP_AGENT *agent_ptr, UCHAR *password, UINT password_length, NX_SNMP_SECURITY_KEY *destination_key);
UINT    nx_snmp_agent_community_get(NX_SNMP_AGENT *agent_ptr, UCHAR **community_string_ptr);
UINT    nx_snmp_agent_context_engine_set(NX_SNMP_AGENT *agent_ptr, UCHAR *context_engine, UINT context_engine_size);
UINT    nx_snmp_agent_context_name_set(NX_SNMP_AGENT *agent_ptr, UCHAR *context_name, UINT context_name_size);
UINT    nx_snmp_agent_v3_context_boots_set(NX_SNMP_AGENT *agent_ptr, UINT boots); 
UINT    nx_snmp_agent_create(NX_SNMP_AGENT *agent_ptr, CHAR *snmp_agent_name, NX_IP *ip_ptr, VOID *stack_ptr, ULONG stack_size, NX_PACKET_POOL *pool_ptr,
                UINT (*snmp_agent_username_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *username),
                UINT (*snmp_agent_get_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data),
                UINT (*snmp_agent_getnext_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data),
                UINT (*snmp_agent_set_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data));
UINT    nx_snmp_agent_delete(NX_SNMP_AGENT *agent_ptr);
UINT    nx_snmp_agent_request_get_type_test(NX_SNMP_AGENT *agent_ptr, UINT *is_get_type);
UINT    nx_snmp_agent_current_version_get(NX_SNMP_AGENT *agent_ptr, UINT *version);
UINT    nx_snmp_agent_version_set(NX_SNMP_AGENT *agent_ptr, UINT enabled_v1, UINT enable_v2, UINT enable_v3);
UINT    nx_snmp_agent_set_interface(NX_SNMP_AGENT *agent_ptr, UINT if_index);
UINT    nx_snmp_agent_private_string_set(NX_SNMP_AGENT *agent_ptr, UCHAR *private_string);
UINT    nx_snmp_agent_public_string_set(NX_SNMP_AGENT *agent_ptr, UCHAR *public_string);
UINT    nx_snmp_agent_private_string_test(NX_SNMP_AGENT *agent_ptr, UCHAR *community_string, UINT *is_private);
UINT    nx_snmp_agent_public_string_test(NX_SNMP_AGENT *agent_ptr, UCHAR *community_string, UINT *is_public);
UINT    nx_snmp_agent_start(NX_SNMP_AGENT *agent_ptr);
UINT    nx_snmp_agent_stop(NX_SNMP_AGENT *agent_ptr);
UINT    nx_snmp_agent_trap_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *community, UCHAR *enterprise, UINT trap_type, UINT trap_code, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    nx_snmp_agent_trapv2_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *community, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    nx_snmp_agent_trapv3_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *username, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    nx_snmp_agent_trapv2_oid_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *username, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    nx_snmp_agent_trapv3_oid_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *community, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    nxd_snmp_agent_trap_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ip_address, UCHAR *community, UCHAR *enterprise, UINT trap_type, UINT trap_code, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    nxd_snmp_agent_trapv2_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ip_address, UCHAR *community, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    nxd_snmp_agent_trapv3_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ip_address, UCHAR *username, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    nxd_snmp_agent_trapv2_oid_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ipduo_address, UCHAR *community, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    nxd_snmp_agent_trapv3_oid_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ipduo_address, UCHAR *community, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    nx_snmp_object_compare(UCHAR *requested_object, UCHAR *reference_object);
UINT    nx_snmp_object_compare_extended(UCHAR *requested_object, UINT requested_object_length, UCHAR *actual_object, UINT actual_object_length);
UINT    nx_snmp_object_copy(UCHAR *source_object_name, UCHAR *destination_object_name);
UINT    nx_snmp_object_copy_extended(UCHAR *source_object_name, UINT source_object_name_length, UCHAR *destination_object_name_buffer, UINT destination_object_name_buffer_size);
UINT    nx_snmp_object_counter_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_counter_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_counter64_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_counter64_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_end_of_mib(VOID *not_used_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_gauge_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_gauge_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_id_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_id_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_integer_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_integer_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_ip_address_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_ip_address_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
#ifdef FEATURE_NX_IPV6
UINT    nx_snmp_object_ipv6_address_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_ipv6_address_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
#endif
UINT    nx_snmp_object_no_instance(VOID *not_used_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_not_found(VOID *not_used_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_octet_string_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data, UINT length);
UINT    nx_snmp_object_octet_string_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_string_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_string_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_timetics_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    nx_snmp_object_timetics_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);



#else

/* SNMP source code is being compiled, do not perform any API mapping.  */

UINT    _nx_snmp_agent_authenticate_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    _nxe_snmp_agent_authenticate_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    _nx_snmp_agent_auth_trap_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    _nxe_snmp_agent_auth_trap_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
#ifndef NX_SNMP_DISABLE_V3
UINT    _nx_snmp_agent_md5_key_create(NX_SNMP_AGENT *agent_ptr, UCHAR *password, NX_SNMP_SECURITY_KEY *destination_key);
UINT    _nxe_snmp_agent_md5_key_create(NX_SNMP_AGENT *agent_ptr, UCHAR *password, NX_SNMP_SECURITY_KEY *destination_key);
UINT    _nx_snmp_agent_md5_key_create_extended(NX_SNMP_AGENT *agent_ptr, UCHAR *password, UINT password_length, NX_SNMP_SECURITY_KEY *destination_key);
UINT    _nxe_snmp_agent_md5_key_create_extended(NX_SNMP_AGENT *agent_ptr, UCHAR *password, UINT password_length, NX_SNMP_SECURITY_KEY *destination_key);
UINT    _nx_snmp_agent_privacy_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    _nxe_snmp_agent_privacy_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    _nx_snmp_agent_priv_trap_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    _nxe_snmp_agent_priv_trap_key_use(NX_SNMP_AGENT *agent_ptr, NX_SNMP_SECURITY_KEY *key);
UINT    _nx_snmp_agent_sha_key_create(NX_SNMP_AGENT *agent_ptr, UCHAR *password, NX_SNMP_SECURITY_KEY *destination_key);
UINT    _nxe_snmp_agent_sha_key_create(NX_SNMP_AGENT *agent_ptr, UCHAR *password, NX_SNMP_SECURITY_KEY *destination_key);
UINT    _nx_snmp_agent_sha_key_create_extended(NX_SNMP_AGENT *agent_ptr, UCHAR *password, UINT password_length, NX_SNMP_SECURITY_KEY *destination_key);
UINT    _nxe_snmp_agent_sha_key_create_extended(NX_SNMP_AGENT *agent_ptr, UCHAR *password, UINT password_length, NX_SNMP_SECURITY_KEY *destination_key);
#endif
UINT    _nx_snmp_agent_community_get(NX_SNMP_AGENT *agent_ptr, UCHAR **community_string_ptr);
UINT    _nxe_snmp_agent_community_get(NX_SNMP_AGENT *agent_ptr, UCHAR **community_string_ptr);
UINT    _nx_snmp_agent_context_engine_set(NX_SNMP_AGENT *agent_ptr, UCHAR *context_engine, UINT context_engine_size);
UINT    _nxe_snmp_agent_context_engine_set(NX_SNMP_AGENT *agent_ptr, UCHAR *context_engine, UINT context_engine_size);
UINT    _nx_snmp_agent_context_name_set(NX_SNMP_AGENT *agent_ptr, UCHAR *context_name, UINT context_name_size);
UINT    _nxe_snmp_agent_context_name_set(NX_SNMP_AGENT *agent_ptr, UCHAR *context_name, UINT context_name_size);
UINT    _nx_snmp_agent_v3_context_boots_set(NX_SNMP_AGENT *agent_ptr, UINT boots); 
UINT    _nxe_snmp_agent_v3_context_boots_set(NX_SNMP_AGENT *agent_ptr, UINT boots); 
UINT    _nx_snmp_agent_create(NX_SNMP_AGENT *agent_ptr, CHAR *snmp_agent_name, NX_IP *ip_ptr, VOID *stack_ptr, ULONG stack_size, NX_PACKET_POOL *pool_ptr,
                UINT (*snmp_agent_username_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *username),
                UINT (*snmp_agent_get_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data),
                UINT (*snmp_agent_getnext_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data),
                UINT (*snmp_agent_set_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data));
UINT    _nxe_snmp_agent_create(NX_SNMP_AGENT *agent_ptr, CHAR *snmp_agent_name, NX_IP *ip_ptr, VOID *stack_ptr, ULONG stack_size, NX_PACKET_POOL *pool_ptr,
                UINT (*snmp_agent_username_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *username),
                UINT (*snmp_agent_get_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data),
                UINT (*snmp_agent_getnext_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data),
                UINT (*snmp_agent_set_process)(struct NX_SNMP_AGENT_STRUCT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data));
UINT    _nx_snmp_agent_delete(NX_SNMP_AGENT *agent_ptr);
UINT    _nxe_snmp_agent_delete(NX_SNMP_AGENT *agent_ptr);
UINT    _nx_snmp_agent_request_get_type_test(NX_SNMP_AGENT *agent_ptr, UINT *is_get_type);
UINT    _nxe_snmp_agent_request_get_type_test(NX_SNMP_AGENT *agent_ptr, UINT *is_get_type);
UINT    _nx_snmp_agent_current_version_get(NX_SNMP_AGENT *agent_ptr, UINT *version);
UINT    _nxe_snmp_agent_current_version_get(NX_SNMP_AGENT *agent_ptr, UINT *version);
UINT    _nxe_snmp_agent_version_set(NX_SNMP_AGENT *agent_ptr, UINT enabled_v1, UINT enable_v2, UINT enable_v3);
UINT    _nx_snmp_agent_version_set(NX_SNMP_AGENT *agent_ptr, UINT enabled_v1, UINT enable_v2, UINT enable_v3);
UINT    _nx_snmp_agent_private_string_test(NX_SNMP_AGENT *agent_ptr, UCHAR *community_string, UINT *is_private);
UINT    _nxe_snmp_agent_private_string_test(NX_SNMP_AGENT *agent_ptr, UCHAR *community_string, UINT *is_private);
UINT    _nx_snmp_agent_public_string_test(NX_SNMP_AGENT *agent_ptr, UCHAR *community_string, UINT *is_public);
UINT    _nxe_snmp_agent_public_string_test(NX_SNMP_AGENT *agent_ptr, UCHAR *community_string, UINT *is_public);
UINT    _nxe_snmp_agent_set_interface(NX_SNMP_AGENT *agent_ptr, UINT if_index);
UINT    _nx_snmp_agent_set_interface(NX_SNMP_AGENT *agent_ptr, UINT if_index);
UINT    _nx_snmp_agent_private_string_set(NX_SNMP_AGENT *agent_ptr, UCHAR *private_string);
UINT    _nxe_snmp_agent_private_string_set(NX_SNMP_AGENT *agent_ptr, UCHAR *private_string);
UINT    _nx_snmp_agent_public_string_set(NX_SNMP_AGENT *agent_ptr, UCHAR *public_string);
UINT    _nxe_snmp_agent_public_string_set(NX_SNMP_AGENT *agent_ptr, UCHAR *public_string);
UINT    _nx_snmp_agent_start(NX_SNMP_AGENT *agent_ptr);
UINT    _nxe_snmp_agent_start(NX_SNMP_AGENT *agent_ptr);
UINT    _nx_snmp_agent_stop(NX_SNMP_AGENT *agent_ptr);
UINT    _nxe_snmp_agent_stop(NX_SNMP_AGENT *agent_ptr);
UINT    _nxe_snmp_agent_trap_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *community, UCHAR *enterprise, UINT trap_type, UINT trap_code, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nx_snmp_agent_trap_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *community, UCHAR *enterprise, UINT trap_type, UINT trap_code, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nx_snmp_agent_trapv2_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *community, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxe_snmp_agent_trapv2_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *community, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nx_snmp_agent_trapv3_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *username, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxe_snmp_agent_trapv3_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *username, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nx_snmp_agent_trapv2_oid_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *community, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxe_snmp_agent_trapv2_oid_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *community, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nx_snmp_agent_trapv3_oid_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *username, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxe_snmp_agent_trapv3_oid_send(NX_SNMP_AGENT *agent_ptr, ULONG ip_address, UCHAR *username, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxd_snmp_agent_trap_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ip_address, UCHAR *community, UCHAR *enterprise, UINT trap_type, UINT trap_code, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxde_snmp_agent_trap_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ip_address, UCHAR *community, UCHAR *enterprise, UINT trap_type, UINT trap_code, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxd_snmp_agent_trapv2_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ip_address, UCHAR *community, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxde_snmp_agent_trapv2_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ip_address, UCHAR *community, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxd_snmp_agent_trapv3_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ip_address, UCHAR *username, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxde_snmp_agent_trapv3_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ip_address, UCHAR *username, UINT trap_type, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxd_snmp_agent_trapv2_oid_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ipduo_address, UCHAR *community, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxde_snmp_agent_trapv2_oid_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ipduo_address, UCHAR *community, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxd_snmp_agent_trapv3_oid_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ipduo_address, UCHAR *community, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nxde_snmp_agent_trapv3_oid_send(NX_SNMP_AGENT *agent_ptr, NXD_ADDRESS *ipduo_address, UCHAR *community, UCHAR *oid, ULONG elapsed_time, NX_SNMP_TRAP_OBJECT *object_list_ptr);
UINT    _nx_snmp_object_compare(UCHAR *requested_object, UCHAR *reference_object);
UINT    _nxe_snmp_object_compare(UCHAR *requested_object, UCHAR *reference_object);
UINT    _nx_snmp_object_compare_extended(UCHAR *requested_object, UINT requested_object_length, UCHAR *actual_object, UINT actual_object_length);
UINT    _nxe_snmp_object_compare_extended(UCHAR *requested_object, UINT requested_object_length, UCHAR *actual_object, UINT actual_object_length);
UINT    _nx_snmp_object_copy(UCHAR *source_object_name, UCHAR *destination_object_name);
UINT    _nxe_snmp_object_copy(UCHAR *source_object_name, UCHAR *destination_object_name);
UINT    _nx_snmp_object_copy_extended(UCHAR *source_object_name, UINT source_object_name_length, UCHAR *destination_object_name_buffer, UINT destination_object_name_buffer_size);
UINT    _nxe_snmp_object_copy_extended(UCHAR *source_object_name, UINT source_object_name_length, UCHAR *destination_object_name_buffer, UINT destination_object_name_buffer_size);
UINT    _nx_snmp_object_counter_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_counter_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_counter_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_counter_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_counter64_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_counter64_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_counter64_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_counter64_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_end_of_mib(VOID *not_used_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_end_of_mib(VOID *not_used_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_gauge_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_gauge_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_gauge_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_gauge_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_id_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_id_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_id_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_id_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_integer_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_integer_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_integer_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_integer_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_ip_address_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_ip_address_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_ip_address_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_ip_address_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
#ifdef FEATURE_NX_IPV6
UINT    _nx_snmp_object_ipv6_address_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_ipv6_address_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_ipv6_address_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_ipv6_address_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
#endif
UINT    _nx_snmp_object_no_instance(VOID *not_used_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_no_instance(VOID *not_used_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_not_found(VOID *not_used_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_not_found(VOID *not_used_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_octet_string_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data, UINT length);
UINT    _nxe_snmp_object_octet_string_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data, UINT length);
UINT    _nx_snmp_object_octet_string_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_octet_string_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_string_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_string_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_string_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_string_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_timetics_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_timetics_get(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nx_snmp_object_timetics_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
UINT    _nxe_snmp_object_timetics_set(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);


/* Define internal SNMP routines.  */

VOID    _nx_snmp_agent_thread_entry(ULONG snmp_agent_address);
UINT    _nx_snmp_utility_community_get(UCHAR *buffer_ptr, UCHAR *community_string, INT buffer_length);
UINT    _nx_snmp_utility_community_set(UCHAR *buffer_ptr, UCHAR *community_string, UCHAR *buffer_end);
UINT    _nx_snmp_utility_error_info_get(UCHAR *buffer_ptr, UINT *error_code, UINT *error_index, INT buffer_length);
UINT    _nx_snmp_utility_error_info_set(UCHAR *buffer_ptr, UINT error_code, UINT error_index, UCHAR *buffer_end);
UINT    _nx_snmp_utility_object_id_get(UCHAR *buffer_ptr, UCHAR *object_string, INT buffer_length);
UINT    _nx_snmp_utility_object_id_set(UCHAR *buffer_ptr, UCHAR *object_string, UCHAR *buffer_end);
UINT    _nx_snmp_utility_object_id_set_1byte(UCHAR *buffer_ptr, UCHAR *object_string, UCHAR *buffer_end);
UINT    _nx_snmp_utility_object_data_get(UCHAR *buffer_ptr, NX_SNMP_OBJECT_DATA *object_data, INT buffer_length);
UINT    _nx_snmp_utility_object_data_set(UCHAR *buffer_ptr, NX_SNMP_OBJECT_DATA *object_data, UCHAR *buffer_end);
UINT    _nx_snmp_utility_octet_get(UCHAR *buffer_ptr, UCHAR *octet_string, UINT max_octet_length, UINT *octet_length, INT buffer_length);
UINT    _nx_snmp_utility_octet_set(UCHAR *buffer_ptr, UCHAR *octet_string, UINT octet_length, UCHAR *buffer_end);
UINT    _nx_snmp_utility_sequence_get(UCHAR *buffer_ptr, UINT *sequence_value, INT buffer_length);
UINT    _nx_snmp_utility_sequence_set(UCHAR *buffer_ptr, UINT sequence_value, UCHAR *buffer_end);
UINT    _nx_snmp_utility_sequence_set_1byte(UCHAR *buffer_ptr, UINT sequence_value, UCHAR *buffer_end);
UINT    _nx_snmp_utility_request_id_get(UCHAR *buffer_ptr, ULONG *request_id, INT buffer_length);
UINT    _nx_snmp_utility_request_id_set(UCHAR *buffer_ptr, ULONG request_id, UCHAR *buffer_end);
UINT    _nx_snmp_utility_request_type_get(UCHAR *buffer_ptr, UINT *request_type, UINT *request_length, INT buffer_length);
UINT    _nx_snmp_utility_request_type_set_1byte(UCHAR *buffer_ptr, UINT request_type, UINT request_length, UCHAR *buffer_end);
UINT    _nx_snmp_utility_request_type_set_multibyte(UCHAR *buffer_ptr, UINT request_type, UINT request_length, UCHAR *buffer_end);
UINT    _nx_snmp_utility_version_get(UCHAR *buffer_ptr, UINT *snmp_version, INT buffer_length);
UINT    _nx_snmp_utility_version_set(UCHAR *buffer_ptr, UINT snmp_version, UCHAR *buffer_end);
UINT    _nx_snmp_utility_tlv_block_parse(UCHAR *buffer, INT buffer_length, USHORT *tlv_type, USHORT *tlv_tag_class, ULONG *tlv_length, UCHAR **tlv_data, ULONG *header_length);
VOID    _nx_snmp_version_error_response(NX_SNMP_AGENT *agent_ptr, NX_PACKET *packet_ptr, UCHAR *request_type_ptr, UCHAR *error_string_ptr, UINT status, UINT objects);
VOID    _nx_snmp_version_1_and_2_process(NX_SNMP_AGENT *agent_ptr, NX_PACKET *packet_ptr);
VOID    _nx_snmp_version_3_report_send(NX_SNMP_AGENT *agent_ptr, UCHAR *buffer_ptr, UINT discovery_response, INT buffer_length);
VOID    _nx_snmp_version_3_process(NX_SNMP_AGENT *agent_ptr, NX_PACKET *packet_ptr);
UINT    _nx_snmp_agent_encrypt_pdu(NX_SNMP_AGENT *agent_ptr, UINT *response_pdu_length, UINT *response_sequence_length, UCHAR *response_encryption_size_ptr,
                                   UCHAR **response_sequence_ptr, UCHAR *response_sequence_buffer_end, UCHAR **response_buffer_ptr,UCHAR *response_privacy_ptr);
UINT    _nx_snmp_agent_add_auth_parameter(NX_SNMP_AGENT *agent_ptr, NX_PACKET *response_packet_ptr, UCHAR *response_authentication_ptr);
UINT    _nx_snmp_agent_decrypt_pdu(NX_SNMP_AGENT *agent_ptr, UCHAR **buffer_ptr, UCHAR *response_buffer_ptr,  UCHAR **response_encryption_size_ptr, UINT *response_length, INT *buffer_length);
VOID    _nx_snmp_agent_security_response_status(NX_SNMP_AGENT *agent_ptr, UINT *authenticate, UINT *encryption, UINT *send_reply);


#endif  /* NX_SNMP_SOURCE_CODE */

/* Determine if a C++ compiler is being used.  If so, complete the standard
   C conditional started above.  */
#ifdef   __cplusplus
        }
#endif

#endif /* NXD_SNMP_H */