Hi,
  You can definitely have more than 255 custom OIDs, the trick is you only
have 255 values for magic. I'm surprised hacking the magic value didn't
crash it before.

There's probably a few options; the good, the bad and the ugly.

Good
Rebuild the MIB and functions so each type of variable uses a different
accessor function, so testboard_var becomes testboard_load,
testboard_temperature etc.
As long as you don't have 256 temperature sensors or load sensors or same
things this works. If you have different ways of getting values, it also
means the
functions are simpler/smaller because the temperature getter has no code
for working out system load and vice-versa. It also means you're not
bothering to fetch the
temperature when you want to get the load too.

Bad
Keep the mib as it is, but have several accessor functions which have a
different magic which you add to the parameters passed to the real accessor.
Your testboard_var() will need a new parameter, say mymagic which is
something larger than u_char

testboard_var1(vp, other variables)
  return (testboard_var(vp->magic, vp, other variables)
testboard_var2(vp, other_variables)
  return (testboard_var(vp->magic+256, vp, other_variables)
testboard_var3(vp, other_variables)
  return (testboard_var(vp->magic+512, vp, other_variables)
In your variables array the ones that use 1-255 use testboard_var1, 256-511
use testboard_var2 (but use magic-256) etc.

Ugly
Overload or ignore the magic and match on the OID directly, which is called
vp->name. There's a reason why this is the ugly option.

 - Craig


On Sat, 21 Sept 2024 at 05:24, Neeraj Bansal <neerajbansal54...@gmail.com>
wrote:

> That makes sense Craig. Thank you for your input.
>
> To summarize the issue, we are unable to use more than 255 OID entries and
> would love to get any help on this issue.
>
> Is there another way to use more than 255 custom OID's?
>
> Thank You to anyone looking into this matter.
>
> - Neeraj
>
> On Mon, 29 Jul 2024 at 14:26, Craig Small <csm...@dropbear.xyz> wrote:
>
>> On Fri, 12 Jul 2024 at 08:31, Neeraj Bansal <neerajbansal54...@gmail.com>
>> wrote:
>> > 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
>> I think it is a red herring, that error is from the -u option.
>>
>> # /usr/sbin/snmpd -u blah
>> Bad user id: blah
>>
>> I know that is not solving your main issue, but its got rid of one thing.
>>
>>  - Craig
>>
>>
>>
>> > [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
>>
>
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to