AW: Net-SNMP 5.5 on Windows Server 2008 with own subagent, can"t set scalar

Julian Cebulla <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <6FB3B6199FD7754699E03FD87E9653480506D09A@exchange2010.hq.ferrari-electronic.de>
>>> I have debug code in my MIB handler but there is nothing like an error.
>
>>What debug code do you have in this routine?
>>What is displayed when the GET request gets passed over?
>
> I've get only debug code at these routines:
>
> netsnmp_ds_set_string()
> init_agent()
>
>But *WHAT* debug code do you have?
>There's no point in us trying to guess - please post the code of your handler routine.

This is in excerpt of my code at the beginning (in C):

  /* print log errors to syslog or stderr */
  if (background)
    snmp_enable_calllog();
  else
    snmp_enable_stderrlog();

  /* we're an agentx subagent? */
  if (agentx_subagent) {
    /* make us a agentx client. */
    netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
  }

  /* run in background, if requested */
  if (background && netsnmp_daemonize(1, !slog))
    exit(1);

  /* initialize tcpip, if necessary */
  SOCK_STARTUP;

      /*set IP and port of MasterAgent*/
      sprintf_s(connectionInfoAgentX,SMALL_BUFFER,"tcp:%s:%s",SnmpMasterAgentIp,SnmpPort);
      info=netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,NETSNMP_DS_AGENT_X_SOCKET, connectionInfoAgentX);
      Log(3,"Return of netsnmp_ds_set_string(): %d",info);



  /* initialize the agent library */
  info=init_agent("omgagent");
  Log(3,"Return of init_agent(): %d",info);



  /* initialize our mib */
      /* 1st init tables */
      init_mib_physicalInterfacesTable();
      init_mib_bChannelTable();
      init_mib_sessionTable();


  // Preset with environment value
  getenvError=getenv_s(&getenvRetValue,envval,SMALL_BUFFER,"SNMPLOCATION");
  if (strlen(envval)!=0) {
    scalar_setstr(&mib_scalar_Location, envval);
  }
  else {
    scalar_setstr(&mib_scalar_Location, "Lost in space");
  }
  getenvError=getenv_s(&getenvRetValue,envval,SMALL_BUFFER,"sn");
  if (strlen(envval)!=0) {
    scalar_setstr(&mib_scalar_Productname, envval);
  }
  else {
    scalar_setstr(&mib_scalar_Productname, "99999");
  }
  getenvError=getenv_s(&getenvRetValue,envval,SMALL_BUFFER,"VUSER");
  if (strlen(envval)!=0) {
    scalar_setstr(&mib_scalar_SoftwareVersion, envval);
  }
  else {
    scalar_setstr(&mib_scalar_SoftwareVersion, "");
  }
  getenvError=getenv_s(&getenvRetValue,envval,SMALL_BUFFER,"VUTILS");
  if (strlen(envval)!=0) {
    scalar_setstr(&mib_scalar_UtilityVersion, envval);
  }
  else {
    scalar_setstr(&mib_scalar_UtilityVersion, "");
  }
  getenvError=getenv_s(&getenvRetValue,envval,SMALL_BUFFER,"VMODULES");
  if (strlen(envval)!=0) {
    scalar_setstr(&mib_scalar_ModuleVersion, envval);
  }
  else {
    scalar_setstr(&mib_scalar_ModuleVersion, "");
  }

  scalar_setstr(&mib_scalar_TrapMessage,"");
  scalar_setstr(&mib_scalar_fmsrvComponentsUndev, "");

  init_mib_scalar();


  init_snmp("omgagent");  //say hello to snmpd


  /* In case we receive a request to stop (kill -TERM or kill -INT) */
  keep_running = 1;
  signal(SIGTERM, stop_server);
  signal(SIGINT, stop_server);


  snmp_log(LOG_INFO,"omgagent is up and running.\n");
  Log(3,"Connect to SNMP Master AgentX (IP:%s Port:%s)",SnmpMasterAgentIp,SnmpPort);

---------------------
The function "scalar_setstr()":
void scalar_setstr(char **scalar, char *string)
{
    if (*scalar)
    {
    free(*scalar);
    }

    *scalar = malloc(strlen(string)+1);
    strcpy(*scalar, string);
}
-------------------------

>What you need (at the very least) is a debug statement at the start of your handler routine, which will indicate
>whenever it is called.   And possibly debug statements
>at other significant points throughout the processing, so you can trace the flow of control.
>
>These probably won't be part of the initial template.
>You will need to add them to the code yourself.
>
>> In my Subagent I call sometimes the routine "Sleep()"
> >but only with a value of between 2 and 5 (Milliseconds).
>
>So no - the argument to 'sleep()' is in seconds, not milliseconds.
>(You'd use 'usleep' for finer-grained delays)

I'm writing in C, there is the definition of Sleep() like that:

VOID WINAPI Sleep(
  __in  DWORD dwMilliseconds
);
The time interval for which execution is to be suspended, in milliseconds.

Thanks for your rapid help!!
Julian

________________________________

Ferrari electronic AG
Ruhlsdorfer Str. 138
14513 Teltow (bei Berlin)

Handelregister Potsdam: HRB 12091
Vorstand: Johann Deutinger, Ulrich Dziergwa, Dr. Hartmut Fetzer
Aufsichtsrat: Peter Mark Droste (Vorsitzender)

------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://p.sf.net/sfu/dev2dev-palm
_______________________________________________
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.