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
|
/***************************************************************************/
/* Copyright (c) 2024 Microsoft Corporation */
/* Copyright (c) 2026 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 */
/***************************************************************************/
/* 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 "small_mib_helper.h"
/* Define function prototypes. */
UINT mib2_get_processing(NX_SNMP_AGENT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data);
UINT mib2_getnext_processing(NX_SNMP_AGENT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data);
UINT mib2_set_processing(NX_SNMP_AGENT *agent_ptr, UCHAR *object_requested, NX_SNMP_OBJECT_DATA *object_data);
UINT mib2_username_processing(NX_SNMP_AGENT *agent_ptr, UCHAR *username);
//UINT mib2_username_processing_public(NX_SNMP_AGENT *agent_ptr, UCHAR *username);
//UINT mib2_username_processing_admin(NX_SNMP_AGENT *agent_ptr, UCHAR *username);
//UINT mib2_username_processing_view(NX_SNMP_AGENT *agent_ptr, UCHAR *username);
//VOID mib2_variable_update(NX_IP *ip_ptr, NX_SNMP_AGENT *agent_ptr);
//VOID mib2_variable_update_public(NX_IP *ip_ptr, NX_SNMP_AGENT *agent_ptr);
//VOID mib2_variable_update_view(NX_IP *ip_ptr, NX_SNMP_AGENT *agent_ptr) ;
//VOID mib2_variable_update_admin(NX_IP *ip_ptr, NX_SNMP_AGENT *agent_ptr) ;
/* Define the MIB-2 "system" group. */
UCHAR sysDescr[] = "NetX SNMP Agent"; /* sysDescr:OctetString RO */
UCHAR sysObjectID[] = "1.3.6.1.2.1.1"; /* sysObjectID:ObjectID RO */
ULONG sysUpTime = 0; /* sysUpTime:TimeTicks RO */
UCHAR sysContact[128] = "NetX sysContact Name"; /* sysContact:OctetString RW */
UCHAR sysName[128] = "NetX sysName"; /* sysName:OctetString RW */
UCHAR sysLocation[128] = "NetX sysLocation"; /* sysLocation:OctetString RW */
ULONG sysServices = 1; /* sysServices:Integer RW */
ULONG ipForwarding = 0; /* ipForwarding:Integer RW */
ULONG ipDefaultTTL = NX_IP_TIME_TO_LIVE; /* ipDefaultTTL:Integer RW */
/* Define the MIB-2 "interfaces" group, assuming one interface. Update of these variables could be added to the
underlying application driver, but for now simple defaults are used. */
ULONG ifLastChange = 2048; /* ifLastChange:TimeTicks RO */
ULONG ifInOctets = 155; /* ifInOctets:Counter RO */
ULONG64 ifInUcastPkts = 0; /* ifInUcastPkts:Counter RO */
UCHAR ifDescr[] = "NetX Physical Interface"; /* ifDescr:OctetString RO */
#if 0
ULONG ifNumber = 1; /* ifNumber:Integer RO */
ULONG ifIndex = 1; /* ifIndex:Integer RO */
ULONG ifType = 1; /* ifType:Integer RO */
ULONG ifMtu = 2048; /* ifMTU:Integer RO */
ULONG ifSpeed = 1000000; /* ifSpeed:Guage RO */
UCHAR ifPhysAddress[] = {0x00,0x04,0xac,0xe3,0x1d,0xc5};/* ifPhysAddress:OctetString RO */
ULONG ifAdminStatus = IFADMINSTATUS_UP; /* ifAdminStatus:Integer RW */
ULONG ifOperStatus = 1; /* ifOperStatus:Integer RO */
ULONG ifInNUcastPkts = 0; /* ifInNUcastPkts:Counter RO */
ULONG ifInDiscards = 0; /* ifInDiscards:Counter RO */
ULONG ifInErrors = 0; /* ifInErrors:Counter RO */
ULONG ifInUnknownProtos = 0; /* ifInUnknownProtos:Counter RO */
ULONG ifOutOctets = 0; /* ifOutOctets:Counter RO */
ULONG ifOutUcastPkts = 0; /* ifOutUcastPkts:Counter RO */
ULONG ifOutNUcastPkts = 0; /* ifOutNUcastPkts:Counter RO */
ULONG ifOutDiscards = 0; /* ifOutDiscards:Counter RO */
ULONG ifOutErrors = 0; /* ifOutErrors:Counter RO */
ULONG ifOutQLen = 0; /* ifOutQLen:Guage RO */
UCHAR ifSpecific[] = "1.3.6.1.2.1.1"; /* ifSpecific:ObjectID RO */
#endif
/* Define the MIB-2 "address translation" group, assuming one address translation. */
//ULONG atIfIndex = 1; /* atIfIndex:Integer RW */
UCHAR atPhysAddress[] = {0x00,0x04,0xac,0xe3,0x1d,0xc5};/* atPhysAddress:OctetString RW */
ULONG atNetworkAddress = 0; /* atNetworkAddress:NetworkAddr RW */
UCHAR atIPv6NetworkAddress[16]; /* atNetworkAddress:NetworkAddr IPv6 RW */
/* Define the MIB-2 "ip" group. */
//ULONG ipForwarding = 0; /* ipForwarding:Integer RW */
ULONG oid_var = 1234U;
/* Define the actual MIB-2. */
MIB_ENTRY mib2_mib[] = {
/* OBJECT ID OBJECT VARIABLE LENGTH OF OBJECT VARIABLE GET ROUTINE/ GET_OCTET_ROUTINE SET ROUTINE LENGTH */
#if 1
{(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)},
{(UCHAR *) "1.3.6.1.2.1.1.2.0", sysObjectID, nx_snmp_object_id_get, NX_NULL, NX_NULL, sizeof(sysObjectID)},
{(UCHAR *) "1.3.6.1.2.1.1.3.0", &sysUpTime, nx_snmp_object_timetics_get, NX_NULL, NX_NULL, sizeof(sysUpTime)},
{(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)},
{(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)},
{(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)},
{(UCHAR *) "1.3.6.1.2.1.1.7.0", &sysServices, nx_snmp_object_integer_get, NX_NULL, NX_NULL, sizeof(sysServices)},
#endif
{(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)},
#ifdef FEATURE_NX_IPV6
/* 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. */
{(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)},
{(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)},
#endif
{(UCHAR *) "1.3.6.1.2.1.2.2.1.2.0", ifDescr, nx_snmp_object_string_get, NX_NULL, NX_NULL, sizeof(ifDescr)},
{(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)},
{(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)},
{(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)},
{(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)},
{(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)},
{(UCHAR *) "1.3.6.1.2.1.4.2.0", &ipDefaultTTL, nx_snmp_object_integer_get, NX_NULL, NX_NULL, sizeof(ipDefaultTTL)},
{(UCHAR *) "1.3.6.1.4.1.51000.1.4.0", &oid_var, nx_snmp_object_integer_get, NX_NULL, NX_NULL, sizeof(oid_var)},
{(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},
{NX_NULL, NX_NULL, NX_NULL, NX_NULL, NX_NULL, 0}
};
|