Hello, Net-SNMP version: 5.9.3 OS: Plain Vanilla Linux (kernel 6.6.23) Hardware: custom ARM board with many sensors
Back in the net-snmp 5.4 days we created a custom mib in c using the example found at: netsnmp/agent/mibgroup/example.c This has worked great with one minor patch that we add to be able to go beyhond the 255 custom oid limitation set by a u_char magic. We would change that to u_short magic in the two files below, and then when calling an oid that has a magic number beyhond 255 it does not wrap to zero and start returning wrong vales. Change all u_char magic; to u_short magic; in the two files below. netsnmp/include/netsnmp/agent/snmp_vars.h netsnmp/include/netsnmp/agent/var_struct.h As mentioned our custom patch has worked for many years and many newer versions than net-snmp 5.4. Now fast forward to today. We want to upgrade our net-snmp to a newer version that supports newer openssl. So we install 5.9.3, test our custom mib, and all works as expected including the 255 limitation. When walking the tree we can observe that when the 255 limit is reached it wraps around and outputs from the beginning. So, no problem. We just have to add our patches to increase the size of the magic variable from u_char (8-bit) to u_short (16-bit) in two files mentioned above. We recompile everything and install no problem, but instead of fixing our problem it caused net-snmp-5.9.3 to not be able to start. The error it gives is: Bad user id, which could be a red herring. example below: [root@testboard: /root# /etc/init.d/S59netsnmp restart Stopping SNMP daemon: [OK] Starting SNMP daemon: Bad user id: snmp [root@testboard: /root# So, we take our patches out and recompile and install, and it works again but still has the 255 custom oid limitation. A snippet from our header file. Too big to paste it all. #define TEMPC 1 #define TEMPF 2 #define UPTIME_STR 3 #define SERIALNUMBER 4 #define ALLOFIT 5 #define ROOTFSBUILD 6 #define KERNELBUILD 7 #define OSINFO 8 ...... #define PRODUCT_ID 250 #define RUNSCRIPT 251 #define TIMER1 252 #define TIMER2 253 #define TIMER3 254 #define TIMER4 255 #define TIMER5 256 <- This outpts an error because it wraps around and 0 is not defined. #define TIMER6 257 <- This outputs TEMPC value instead of TIMER6. #define TIMER7 258 #define TIMER8 259 #define TIMER9 260 #define TIMER10 261 #define EXAMPLETIMETICKS 3333 #define EXAMPLEIPADDRESS 4444 #define EXAMPLECOUNTER 7777 #define EXAMPLEGAUGE 8888 #define EXAMPLETRIGGERTRAP 9999 #define EXAMPLETRIGGERTRAP2 1000 Notice the example defines above that were provided in the example C header file, those magic numbers would have never worked because of the u_char (8-bit) magic variable limitation. This is a code snippet from our custom mib C file. struct variable4 testboard_variables[] = { {ROOTFSBUILD, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY, testboard_var, 2, {7, 1}}, {KERNELBUILD, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY, testboard_var, 2, {7, 2}}, {OSINFO, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY, testboard_var, 2, {7, 3}}, {PRODUCT_ID, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY, etestboard_var, 2, {7, 4}}, {UPTIME_STR, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY, testboard_var, 2, {5, 1}}, {SERIALNUMBER, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY, testboard_var, 2, {5, 2}}, {TEMPC, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY, testboard_var, 2, {6,1}}, {TEMPF, ASN_OCTET_STR, NETSNMP_OLDAPI_RONLY, testboard_var, 2, {6,2}}, We have poured over the souce code looking for any other instance of u_char magic that we may have missed, but they are only defined in the two files mentioned above. We need some help with this. What else do we need to do in the 5.9 versions to make the magic number not wrap around to zero after 255 and not crash when we do that? Thanks, Neeraj Bansal
_______________________________________________ Net-snmp-coders mailing list Net-snmp-coders@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/net-snmp-coders