Re: trapsink with variable ip destination

majid namnabat <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <[email protected]>
Dear,
I try to use snmp_open & netsnmp_query_set functions, I write a function
similar attached code. But it's not work.
Please guide me more! How can I create  a row for a table with
netsnmp_query_set function. In this table row indexes determined by strings
such as 'internal0'. How can I specify  these oids?
for example to read snmpTargetAddrTAddress I must type:
snmpget -v2c -c public 192.168.20.5  1.3.6.1.6.3.12.1.2.1.3.'internal0'
But how can I develop a code to work similar this?
What's the problem of my code?

Thanks, Namnabat


void SetTrap()
{
    oid oidsnmpTargetAddrTDomain[] = {1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 2, 0};
    oid oidsnmpTargetAddrTAddress[] = {1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 3, 0};
    oid oidsnmpTargetAddrTimeout[] = {1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 4, 0};
    oid oidsnmpTargetAddrRetryCount[] = {1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 5,
0};
    oid oidsnmpTargetAddrTagList[] = {1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 6, 0};
    oid oidsnmpTargetAddrParams[] = {1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 7, 0};
    oid oidsnmpTargetAddrStorageType[] = {1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 8,
0};
    oid oidsnmpTargetAddrRowStatus[] = {1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 9,
0};
    oid oidsnmpUDPDomain[] = {1, 3, 6, 1, 6, 1, 1, 0};

    char targetaddrname[5];
    char strvalue[255];
    int nvalue;
    targetaddrname[0]=192; targetaddrname[1]=168; targetaddrname[2]=20;
targetaddrname[3]=99; targetaddrname[4]=162;

    struct snmp_session ss, *sp;
    struct oid *op;
    netsnmp_variable_list var;
     netsnmp_variable_list *_returnVar;

    netsnmp_variable_list *var_list = NULL;

    snmp_sess_init(&ss);                        /* initialize session */
    ss.version = SNMP_VERSION_2c;
    ss.remote_port = SNMP_DEFAULT_REMPORT;
    ss.community="public";
    ss.community_len = strlen(ss.community);
    snmp_synch_setup(&ss);


    //if (session.remote_port == SNMP_DEFAULT_REMPORT)
    //    session.remote_port = SNMP_TRAP_PORT;

    if (!(sp = snmp_open(&ss))) {
      snmp_perror("snmp_open");
      snmp_log(LOG_ERR, "something horrible happened!!!\n");
      return;
    }

    memset( &var_list, 0, sizeof(var_list));

    _returnVar = snmp_varlist_add_variable( &var_list,
        oidsnmpTargetAddrTDomain, OID_LENGTH(oidsnmpTargetAddrTDomain),
        ASN_OBJECT_ID, oidsnmpUDPDomain, OID_LENGTH(oidsnmpUDPDomain));

       snmp_log(LOG_ERR, "variable!\n");

    _returnVar = snmp_varlist_add_variable( &var_list,
        oidsnmpTargetAddrTAddress,  OID_LENGTH(oidsnmpTargetAddrTAddress),
        ASN_OCTET_STR, targetaddrname, strlen(targetaddrname));
    nvalue = 1000;

        snmp_log(LOG_ERR, "variable!\n");

    _returnVar = snmp_varlist_add_variable( &var_list,
        oidsnmpTargetAddrTimeout, OID_LENGTH(oidsnmpTargetAddrTimeout),
        ASN_INTEGER, (u_char *)&nvalue, sizeof(nvalue));

    snmp_log(LOG_ERR, "variable!\n");

    nvalue = 5;
    if(_returnVar != NULL)
    {
    _returnVar = snmp_varlist_add_variable( &var_list,
        oidsnmpTargetAddrRetryCount,
OID_LENGTH(oidsnmpTargetAddrRetryCount),
        ASN_INTEGER, (u_char *)&nvalue, sizeof(nvalue));
    }
         snmp_log(LOG_ERR, "variable!\n");

    if(_returnVar != NULL)
    {
    strcpy(strvalue,"internal0");
    _returnVar = snmp_varlist_add_variable( &var_list,
        oidsnmpTargetAddrTagList,  OID_LENGTH(oidsnmpTargetAddrTagList),
        ASN_OCTET_STR, strvalue, strlen(strvalue));
    }
        snmp_log(LOG_ERR, "variable!\n");

    if(_returnVar != NULL)
    {
    strcpy(strvalue,"internal0");
    _returnVar = snmp_varlist_add_variable( &var_list,
        oidsnmpTargetAddrParams,  OID_LENGTH(oidsnmpTargetAddrParams),
        ASN_OCTET_STR, strvalue, strlen(strvalue));
    }
        snmp_log(LOG_ERR, "variable!\n");


    if(_returnVar != NULL)
    {
    nvalue = 5;
    _returnVar = snmp_varlist_add_variable( &var_list,
        oidsnmpTargetAddrStorageType,
OID_LENGTH(oidsnmpTargetAddrStorageType),
        ASN_INTEGER, (u_char *)&nvalue, sizeof(nvalue));
    }
    snmp_log(LOG_ERR, "last variable!\n");


    if(_returnVar != NULL)
    {
    nvalue = 1;
    _returnVar = snmp_varlist_add_variable( &var_list,
        oidsnmpTargetAddrRowStatus,  OID_LENGTH(oidsnmpTargetAddrRowStatus),
        ASN_INTEGER, (u_char *)&nvalue, sizeof(nvalue));
    }
        snmp_log(LOG_ERR, "before first netsnmp_query_set!!!\n");

    netsnmp_query_set( &var_list, sp );


        snmp_log(LOG_ERR, "after first netsnmp_query_set!!!\n");

    memset(&var, 0, sizeof(netsnmp_variable_list));
    snmp_set_var_objid( &var, oidsnmpTargetAddrTDomain,
OID_LENGTH(oidsnmpTargetAddrTDomain));
    snmp_set_var_typed_value(&var,  ASN_OBJECT_ID, oidsnmpUDPDomain,
OID_LENGTH(oidsnmpUDPDomain));
    netsnmp_query_set( &var, sp );

    memset(&var, 0, sizeof(netsnmp_variable_list));

        snmp_log(LOG_ERR, "after second netsnmp_query_set!!!\n");

    snmp_set_var_objid( &var, oidsnmpTargetAddrTAddress,
OID_LENGTH(oidsnmpTargetAddrTAddress));
    snmp_set_var_typed_value(&var, ASN_OCTET_STR, targetaddrname,
strlen(targetaddrname));
    netsnmp_query_set( &var, sp );

        snmp_log(LOG_ERR, "after third netsnmp_query_set!!!\n");

    memset(&var, 0, sizeof(netsnmp_variable_list));
    nvalue = 1000;
    snmp_set_var_objid( &var, oidsnmpTargetAddrTimeout,
OID_LENGTH(oidsnmpTargetAddrTimeout));
    snmp_set_var_typed_value(&var, ASN_INTEGER, (u_char *)&nvalue,
sizeof(nvalue));
    netsnmp_query_set( &var, sp );

        snmp_log(LOG_ERR, "after forth netsnmp_query_set!!!\n");

    memset(&var, 0, sizeof(netsnmp_variable_list));
    nvalue = 5;
    snmp_set_var_objid( &var,oidsnmpTargetAddrRetryCount,
OID_LENGTH(oidsnmpTargetAddrRetryCount));
    snmp_set_var_typed_value(&var,ASN_INTEGER, (u_char *)&nvalue,
sizeof(nvalue));

    netsnmp_query_set( &var, sp );

        snmp_log(LOG_ERR, "after fifth netsnmp_query_set!!!\n");


    memset(&var, 0, sizeof(netsnmp_variable_list));

    strcpy(strvalue,"internal0");
    snmp_set_var_objid( &var, oidsnmpTargetAddrTagList,
OID_LENGTH(oidsnmpTargetAddrTagList));
    snmp_set_var_typed_value(&var,ASN_OCTET_STR, strvalue,
strlen(strvalue));

    netsnmp_query_set( &var, sp );

        snmp_log(LOG_ERR, "after sixth netsnmp_query_set!!!\n");

    memset(&var, 0, sizeof(netsnmp_variable_list));

    strcpy(strvalue,"internal0");

    snmp_set_var_objid( &var, oidsnmpTargetAddrParams,
OID_LENGTH(oidsnmpTargetAddrParams));
    snmp_set_var_typed_value(&var, ASN_OCTET_STR, strvalue,
strlen(strvalue));

    netsnmp_query_set( &var, sp );

        snmp_log(LOG_ERR, "after seventh netsnmp_query_set!!!\n");

    memset(&var, 0, sizeof(netsnmp_variable_list));

    nvalue = 5;
    snmp_set_var_objid( &var, oidsnmpTargetAddrStorageType,
OID_LENGTH(oidsnmpTargetAddrStorageType));
    snmp_set_var_typed_value(&var,ASN_INTEGER, (u_char *)&nvalue,
sizeof(nvalue));

    netsnmp_query_set( &var, sp );

        snmp_log(LOG_ERR, "after eighth netsnmp_query_set!!!\n");


    memset(&var, 0, sizeof(netsnmp_variable_list));

    nvalue = 1;
    snmp_set_var_objid( &var,oidsnmpTargetAddrRowStatus,
OID_LENGTH(oidsnmpTargetAddrRowStatus));
    snmp_set_var_typed_value(&var,ASN_INTEGER, (u_char *)&nvalue,
sizeof(nvalue));

    netsnmp_query_set( &var, sp );

    snmp_log(LOG_ERR, "after nineth netsnmp_query_set!!!\n");
    snmp_free_varbind(var_list);

}
On Mon, Jan 18, 2010 at 11:43 AM, Dave Shield <[email protected]>wrote:

> 2010/1/18 majid namnabat <[email protected]>:
> > In there any way (standard & not standard) to manage trap destinations
> > internally from AgentX? Can I change snmpTargetAddrTable internally?
>
> The most flexible way would be to send SNMP SET requests from the
> subagent to the master agent, to manipulate the target tables.
>    I.e. the subagent would also be acting as a management client
> application.
>
> Use 'snmp_open' to create a connection back to the master agent,
> and then use 'netsnmp_query_set' to send the SET request.
>
> Dave
>

------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com

_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.