1 /* This is an include file for the NetX SNMP demo programs for setting up the MIB for
2    user callback functions. It is not part of the official release of NetX SNMP Agent. */
3 
4 #ifndef SNMP_HELPER_H
5 #define SNMP_HELPER_H
6 
7 /* Determine if a C++ compiler is being used.  If so, ensure that standard
8    C is used to process the API information.  */
9 
10 #ifdef   __cplusplus
11 
12 /* Yes, C++ compiler is present.  Use standard C.  */
13 extern   "C" {
14 #endif
15 
16 #include "tx_api.h"
17 #include "nx_api.h"
18 #include "nxd_snmp.h"
19 
20 /* Define application MIB data structure. Actual application structures would certainly vary.  */
21 
22 typedef struct MIB_ENTRY_STRUCT
23 {
24 
25     UCHAR       *object_name;
26     void        *object_value_ptr;
27     UINT        (*object_get_callback)(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data);
28     UINT        (*object_get_octet_callback)(VOID *source_ptr, NX_SNMP_OBJECT_DATA *object_data, UINT length);
29     UINT        (*object_set_callback)(VOID *destination_ptr, NX_SNMP_OBJECT_DATA *object_data);
30     UINT        length;
31 } MIB_ENTRY;
32 
33 /* Define the MIB-2 "system" group.  */
34 
35 UCHAR   sysDescr[] =                "NetX SNMP Agent";              /* sysDescr:OctetString                 RO */
36 UCHAR   sysObjectID[] =             "1.3.6.1.2.1.1";                /* sysObjectID:ObjectID                 RO */
37 ULONG   sysUpTime =                  0;                             /* sysUpTime:TimeTicks                  RO */
38 UCHAR   sysContact[128] =           "NetX sysContact Name";         /* sysContact:OctetString               RW */
39 UCHAR   sysName[128] =              "NetX sysName";                 /* sysName:OctetString                  RW */
40 UCHAR   sysLocation[128] =          "NetX sysLocation";             /* sysLocation:OctetString              RW */
41 ULONG   sysServices =               1;                              /* sysServices:Integer                  RW */
42 ULONG   ipForwarding =              0;                              /* ipForwarding:Integer                 RW */
43 ULONG   ipDefaultTTL =              NX_IP_TIME_TO_LIVE;             /* ipDefaultTTL:Integer                 RW */
44 
45 /* Define the MIB-2 "interfaces" group, assuming one interface. Update of these variables could be added to the
46    underlying application driver, but for now simple defaults are used.  */
47 ULONG   ifLastChange =              2048;                           /* ifLastChange:TimeTicks               RO */
48 ULONG   ifInOctets =                155;                            /* ifInOctets:Counter                   RO */
49 ULONG64 ifInUcastPkts =             0;                              /* ifInUcastPkts:Counter                RO */
50 UCHAR   ifDescr[] =                 "NetX Physical Interface";      /* ifDescr:OctetString                  RO */
51 
52 /* Define the MIB-2 "address translation" group, assuming one address translation.  */
53 
54 UCHAR   atPhysAddress[] =           {0x00,0x04,0xac,0xe3,0x1d,0xc5};/* atPhysAddress:OctetString            RW */
55 ULONG   atNetworkAddress =          0;                              /* atNetworkAddress:NetworkAddr         RW */
56 UCHAR   atIPv6NetworkAddress[16];                                   /* atNetworkAddress:NetworkAddr IPv6    RW */
57 
58 
59 /* Define the actual MIB-2.  */
60 
61 MIB_ENTRY   mib2_mib[] = {
62 
63     /*    OBJECT ID                OBJECT VARIABLE                    GET ROUTINE/ GET_OCTET_ROUTINE            SET ROUTINE      LENGTH */
64 
65     {(UCHAR *) "1.3.6.1.2.1.1.1.0",       sysDescr,                   nx_snmp_object_string_get, NX_NULL,      nx_snmp_object_string_set, sizeof(sysDescr)},
66     {(UCHAR *) "1.3.6.1.2.1.1.2.0",       sysObjectID,                nx_snmp_object_id_get, NX_NULL,          NX_NULL, sizeof(sysObjectID)},
67     {(UCHAR *) "1.3.6.1.2.1.1.3.0",       &sysUpTime,                 nx_snmp_object_timetics_get, NX_NULL,    NX_NULL, sizeof(sysUpTime)},
68     {(UCHAR *) "1.3.6.1.2.1.1.4.0",       sysContact,                 nx_snmp_object_string_get, NX_NULL,      nx_snmp_object_string_set, sizeof(sysContact)},
69     {(UCHAR *) "1.3.6.1.2.1.1.5.0",       sysName,                    nx_snmp_object_string_get, NX_NULL,      nx_snmp_object_string_set, sizeof(sysName)},
70     {(UCHAR *) "1.3.6.1.2.1.1.6.0",       sysLocation,                nx_snmp_object_string_get, NX_NULL,      nx_snmp_object_string_set, sizeof(sysLocation)},
71     {(UCHAR *) "1.3.6.1.2.1.1.7.0",       &sysServices,               nx_snmp_object_integer_get, NX_NULL,     NX_NULL,  sizeof(sysServices)},
72 
73     {(UCHAR *) "1.3.6.1.2.1.3.1.1.3.0",   &atNetworkAddress,          nx_snmp_object_ip_address_get, NX_NULL,  nx_snmp_object_ip_address_set, sizeof(atNetworkAddress)},
74 #ifdef FEATURE_NX_IPV6
75      /* Either GET method should work. IPv6 addresses are handled as octet strings and accept any IPv6 address format e.g. addresses with '::'s are accepted as is. */
76     {(UCHAR *) "1.3.6.1.2.1.3.1.1.3.1",   &atIPv6NetworkAddress,      nx_snmp_object_ipv6_address_get, NX_NULL, nx_snmp_object_ipv6_address_set, sizeof(atIPv6NetworkAddress)},
77     {(UCHAR *) "1.3.6.1.2.1.3.1.1.3.2",   &atIPv6NetworkAddress,      NX_NULL, nx_snmp_object_octet_string_get, nx_snmp_object_octet_string_set, sizeof(atIPv6NetworkAddress)},
78 #endif
79 
80     {(UCHAR *) "1.3.6.1.2.1.2.2.1.2.0",   ifDescr,                    nx_snmp_object_string_get, NX_NULL,      NX_NULL,  sizeof(ifDescr)},
81     {(UCHAR *) "1.3.6.1.2.1.3.1.1.2.0",   &atPhysAddress,             NX_NULL, nx_snmp_object_octet_string_get, nx_snmp_object_octet_string_set, sizeof(atPhysAddress)},
82     {(UCHAR *) "1.3.6.1.2.1.2.2.1.9.0",   &ifLastChange,              nx_snmp_object_timetics_get, NX_NULL,    nx_snmp_object_timetics_set,  sizeof(ifLastChange)},
83     {(UCHAR *) "1.3.6.1.2.1.2.2.1.10.0",  &ifInOctets,                nx_snmp_object_counter_get, NX_NULL,     nx_snmp_object_counter_set,  sizeof(ifInOctets)},
84     {(UCHAR *) "1.3.6.1.2.1.2.2.1.11.0",  &ifInUcastPkts,             nx_snmp_object_counter64_get, NX_NULL,   nx_snmp_object_counter64_set,  sizeof(ifInUcastPkts)},
85 
86     {(UCHAR *) "1.3.6.1.2.1.4.1.0",       &ipForwarding,              nx_snmp_object_integer_get, NX_NULL,     nx_snmp_object_integer_set,  sizeof(ipForwarding)},
87     {(UCHAR *) "1.3.6.1.2.1.4.2.0",       &ipDefaultTTL,              nx_snmp_object_integer_get, NX_NULL,     NX_NULL,  sizeof(ipDefaultTTL)},
88 
89     {(UCHAR *) "1.3.6.1.7",               (UCHAR *) "1.3.6.1.7",      nx_snmp_object_end_of_mib,  NX_NULL,     NX_NULL, sizeof("1.3.6.1.7") - 1},
90     {NX_NULL, NX_NULL, NX_NULL, NX_NULL, NX_NULL, 0}
91 
92 };
93 
94 
95 #endif /* SNMP_HELPER_H */
96