On 5/13/15, Bart Van Assche <bvanass...@acm.org> wrote:
> On 05/13/15 13:59, Dixon Xavier wrote:
>> Hi,
>>
>> This is regarding net-snmp 5.7.3 in HPUX IA64.
>> We are using aCC to compile netsnmp libraries.
>>
>> While running snmptrapd, it is not receiving traps.
>> Further analysis shows that, fd_set returned by netsnmp_select_info is
>> not correct (incorrect bits are set in it).
>>
>> Issue seems to be related to follwing LFD_* macros defined in
>> snmplib/large_fd_set.c
>>
>>      #define LFD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |=  (1 <<
>> ((n) % NFDBITS)))
>>      #define LFD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1 <<
>> ((n) % NFDBITS)))
>>      #define LFD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] &   (1 <<
>> ((n) % NFDBITS)))
>>
>> In HP-UX 11.23 ia64 (  /usr/include/sys/_fd_macros.h) __fd_mask is
>> defined as int32_t and FD_* macros operate fds_bits as an array of 32
>> bit items.
>> But, the LFD_* macros treat them as 64bit items on IA64 when compiled
>> in 64 bit mode. This leads to incorrect bits being set/cleared for
>> corresponding fd's
>>
>> So, the LFD_* macros need to be modified as below so that it is
>> handled correctly on all platforms.
>>
>>      #define LFD_SET(n, p)    (((__fd_mask
>> *)((p)->fds_bits))[(n)/NFDBITS] |=  (1ULL << ((n) % NFDBITS)))
>>      #define LFD_CLR(n, p)    (((__fd_mask
>> *)((p)->fds_bits))[(n)/NFDBITS] &= ~(1ULL << ((n) % NFDBITS)))
>>      #define LFD_ISSET(n, p)  (((__fd_mask
>> *)((p)->fds_bits))[(n)/NFDBITS] &   (1ULL << ((n) % NFDBITS)))
>>
>> I modified the code as above and verified that the traps are now
>> received by 'snmptrapd' correctly.
>>
>> Kindly let us know if you consider this as an 'issue' in NetSNMP and
>> if yes when can we expect a patch for the issue.
>
> Hello Dixon,
>
> Sorry but I'm afraid that the proposed changes would not compile on
> non-HP-UX systems. Could you test the patch below ?
>
> Thanks,
>
> Bart.
>
> [PATCH] Large fd set bug fix for ia64 HP-UX systems
>
> ---
>  snmplib/large_fd_set.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/snmplib/large_fd_set.c b/snmplib/large_fd_set.c
> index a90c06b..e591ff2 100644
> --- a/snmplib/large_fd_set.c
> +++ b/snmplib/large_fd_set.c
> @@ -83,6 +83,7 @@ netsnmp_large_fd_is_set(SOCKET fd, netsnmp_large_fd_set *
> fdset)
>
>  #else
>
> +#if defined(linux)
>  /*
>   * Recent versions of glibc trigger abort() if FD_SET(), FD_CLR() or
>   * FD_ISSET() is invoked with n >= FD_SETSIZE. Hence these replacement
> macros.
> @@ -90,6 +91,14 @@ netsnmp_large_fd_is_set(SOCKET fd, netsnmp_large_fd_set *
> fdset)
>  #define LFD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |=  (1ULL << ((n) %
> NFDBITS)))
>  #define LFD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1ULL << ((n) %
> NFDBITS)))
>  #define LFD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] &   (1ULL << ((n) %
> NFDBITS)))
> +#else
> +/*
> + * The above macros do not work correctly on HP-UX ia64.
> + */
> +#define LFD_SET(n, p)    FD_SET(n, p)
> +#define LFD_CLR(n, p)    FD_CLR(n, p)
> +#define LFD_ISSET(n, p)  FD_ISSET(n, p)
> +#endif
>
>  void
>  netsnmp_large_fd_setfd(int fd, netsnmp_large_fd_set * fdset)
> --
> 2.1.4
>
>


Hello Bart,

Thanks for the patch.
It worked fine too.

We are not using netsnmp's large_fd_set feature in our application and
it seems there won't be any issues.

However, we are unsure of whether large_fd_set feature works properly in hp-ux.
Should we test further ?

Also, when will this patch get merged to main branch ?

Regards,
Dixon Xavier

------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to