Re: Getting listening port number while processing request

Bart Van Assche <[email protected]> Wed, 27 Mar 2024 16:13:23 -0700
Newsgroups gmane.network.net-snmp.devel
Message-ID <[email protected]>
On 3/27/24 00:15, Teus Benschop wrote:
> On Wed, 27 Mar 2024 at 00:58, Bart Van Assche <[email protected]> wrote:
>
>     Please explain why you want to obtain that information and also
>     how you plan to use it. Which APIs to modify will depend on the
>     answer to that question.
>
>
>
> Hello Bert,
>
> Thank you for asking this question.
>
> The background to this is that we are building software to control 
> traffic signs above the highways. These signs are controlled through 
> one of the NTCIP protocols (https://www.ntcip.org). And this protocol 
> again is based on the SNMP protocol. Each traffic sign contains one 
> SNMP agent that listens on a given port number.
>
> We are building a simulator to simulate all of those traffic signs. 
> Currently one simulator simulates one traffic sign. The traffic sign 
> has many and large SNMP tables registered with Net-SNMP. Due to the 
> sheer size and amount of objects in the SNMP tables, plus many other 
> registered objects, one simulator now allocates about 350 Mbytes of 
> memory.
>
> If we simulate, say, 20 traffic signs, then the allocated memory 
> becomes about 7 Gbytes. If we simulate 100 traffic signs, then the 
> allocated memory becomes around 35 Gigabytes.
>
> We now have the idea to only run one SNMP agent, and hence allocate 
> only 350 Megabytes of memory, but then let this SNMP agent listen on 
> multiple ports, through the Net-SNMP library.
>
> The traffic signs listen on the TCP protocol, hence the simulator uses 
> TCP too.
>
> If the simulator listens on, say, port 2001, 2002, 2003, and so on, 
> then this would simulate traffic sign #1 on port 2001, traffic sign #2 
> on port 2002, and traffic sign #3 on port 2003. If the traffic control 
> software sends a SNMP get request to, say, port 2002, then the traffic 
> sign simulator knows that it should respond with data about traffic 
> sign #2.
>
> Hence if the Net-SNMP library would expose the TCP port number that a 
> given request was sent to, the simulator would make a call to the 
> Net-SNMP library to find the port number, and give an appropriate 
> response.
>
> This is the reason why I want to obtain the port number, and this 
> would be the intended usage of it.

Hi Teus,

Thanks for the background information. I'm not sure the Net-SNMP API 
needs to be modified to realize this. How about the following approach:

  * Use netsnmp_register_handler() in MIB implementations to associate
    OIDs with callback functions.
  * In the handler callback function, use the
    reqinfo->asp->session->local_port information.
  * Make sure that session->local_port is set correctly. This may
    require a code change in Net-SNMP.

Best regards,

Bart.

_______________________________________________
Net-snmp-coders mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders