Re: addding new fd in select() for recieving request - SNMP

This is a discussion on Re: addding new fd in select() for recieving request - SNMP ; 2008/6/9 : > I have a requirement that i also need to listen for alarms coming > from another application on socket and forward them to manager > apart from GET/SET request from Manager Have a look at the 'register_readfd()' ...

+ Reply to Thread
Results 1 to 3 of 3

Thread: Re: addding new fd in select() for recieving request

  1. Re: addding new fd in select() for recieving request

    2008/6/9 :
    > I have a requirement that i also need to listen for alarms coming
    > from another application on socket and forward them to manager
    > apart from GET/SET request from Manager


    Have a look at the 'register_readfd()' routine
    which is designed for exactly this purpose.


    > I am thinking of doing it in following manner.
    > Please comment on the following if it is wrong


    You do not need to change the main() code.
    The Net-SNMP toolkit already supports the
    functionality you require.

    Dave

    -------------------------------------------------------------------------
    Check out the new SourceForge.net Marketplace.
    It's the best place to buy or sell services for
    just about anything Open Source.
    http://sourceforge.net/services/buy/index.php
    _______________________________________________
    Net-snmp-users mailing list
    Net-snmp-users@lists.sourceforge.net
    Please see the following page to unsubscribe or change other options:
    https://lists.sourceforge.net/lists/...net-snmp-users


  2. Re: addding new fd in select() for recieving request

    Hello Dev,

    This means that in main() of my subagent

    main()
    {
    init_agent("snmpV3Agent");
    init_currentAlarmTable();
    init_snmp("snmpV3Agent");
    ... .
    ........
    //start listning for client
    listener = socket(AF_INET, SOCK_STREAM, 0);
    bind(listener, (struct sockaddr *)&myaddr, sizeof(myaddr));
    listen(listener, 10)

    while()
    {
    snmp_select_info(&numfds, &read_fds, NULL, 0);
    select(numfds,&read_fds,0,0,NULL)
    if (FD_ISSET(listener , &read_fds))
    {
    //accept when ready to be read
    newfd = accept(listener, (struct sockaddr *)&remoteaddr,&addrlen)

    //myfunction1 --->reads the data add it to queue and forward to manager as a TRAP
    register_readfd(&numfds,(*myfunction1),NULL);
    }
    }

    }

    or it is just call snmp_select_info() with readfds containing my fd and just call register_readfd() not even check for FD_ISSET(). This will automatically accept the connection when the fd is ready to be read and in the function pointer(call back method) i can write the code to extract the data.

    Is it. Please do reply if i am wrong anywhere.


    --Thanks a lot



    ----- Original Message -----
    From: Dave Shield
    To: gauravmeh2004@indiatimes.com
    Cc: net-snmp-users@lists.sourceforge.net
    Sent: Mon, 9 Jun 2008 13:40:40 +0530 (IST)
    Subject: Re: addding new fd in select() for recieving request

    2008/6/9 :
    > I have a requirement that i also need to listen for alarms coming
    > from another application on socket and forward them to manager
    > apart from GET/SET request from Manager


    Have a look at the 'register_readfd()' routine
    which is designed for exactly this purpose.


    > I am thinking of doing it in following manner.
    > Please comment on the following if it is wrong


    You do not need to change the main() code.
    The Net-SNMP toolkit already supports the
    functionality you require.

    Dave



    -------------------------------------------------------------------------
    Check out the new SourceForge.net Marketplace.
    It's the best place to buy or sell services for
    just about anything Open Source.
    http://sourceforge.net/services/buy/index.php
    _______________________________________________
    Net-snmp-users mailing list
    Net-snmp-users@lists.sourceforge.net
    Please see the following page to unsubscribe or change other options:
    https://lists.sourceforge.net/lists/...net-snmp-users


  3. Re: addding new fd in select() for recieving request

    2008/6/9 :
    > main()
    > {
    > //start listning for client
    > listener = socket(AF_INET, SOCK_STREAM, 0);
    > bind(listener, (struct sockaddr *)&myaddr, sizeof(myaddr));
    > listen(listener, 10)


    This is also where you would register this external socket:

    register_readfd( listener, listener_callback );

    > while()
    > {


    Remember to clear the readfd array:

    numfds = 0;
    FD_ZERO(&read_fds);

    and you're not passing in the timeout handling structures.


    block = 0;
    > snmp_select_info(&numfds, &read_fds,

    tvp, &block);


    You also need to do the same for the external sockets:

    netsnmp_external_event_info(numfds,&read_fds,NULL,NULL)

    You probably do need to pass the 'tvp' parameter to select, as well as taking
    note of the return value:

    > count = select(numfds,&read_fds,0,0, tvp)



    The next bit isn't needed. Replace it with:

    netsnmp_dispatch_external_events( &count, &read_fds, NULL, NULL);

    That handles checking whether your socket has anything waiting,
    and calls the registered callback.

    This should then be followed by

    if ( count > 0 )
    snmp_read( &read_fds );

    to handle "normal" SNMP traffic.

    > }



    See the main driving loop ("receive()") of snmpd.c for the model
    of this code.

    Dave

    PS: Please do *NOT* repost your query, just because you
    didn't get a response immediately. Some of us have real
    work to do, and can't spend all our time providing free
    advice to impatient programmers!

    -------------------------------------------------------------------------
    Check out the new SourceForge.net Marketplace.
    It's the best place to buy or sell services for
    just about anything Open Source.
    http://sourceforge.net/services/buy/index.php
    _______________________________________________
    Net-snmp-users mailing list
    Net-snmp-users@lists.sourceforge.net
    Please see the following page to unsubscribe or change other options:
    https://lists.sourceforge.net/lists/...net-snmp-users


+ Reply to Thread