title: NET-SNMP agent trap v3 configuration
body: <p>Im trying to implement agent trap v3 sender using net-snmp.</p>
  
  <p>currently my status is im able to start snmpd and daemon is sending coldstart trap to host defined in snmpd.conf</p>
  
  <p>my snmpd.conf:</p>
  
  <pre><code>createUser myuser SHA "12345678" AES
  
  rouser myuser auth
  
  
  trapsess -v 3 -u myuser -n contextname -l authPriv -a SHA -A 12345678 -x AES -        X 12345678 host_ip:162
  
  
  group groupv3            usm      myuser
  
  ##          incl/excl subtree                         mask
  view all    included  .1                               80
  
  access groupv3         ""        any       auth      exact    all         all             all
  </code></pre>
  
  <p>var/net-snmp/snmpd.conf contain the hash user, if im using snmptrap command in linux i can see the trap recived by host with wireshark sniffer.</p>
  
  <p>But im unable to send traps from code (im restricted to C, embedded system).
  im using send_v2trap() api, and when im defined vars list nothing is sent out. im not sure what i need to define, do i need to open session or snmpd.conf file is enough? what i need to define to send trap via code?</p>
  
  <p>i tried to use some examples provided with no luck </p>
  
  <p>this is one of them:</p>
  
  <pre><code>int
  write_exampletrap2(int action,
                     u_char * var_val,
                     u_char var_val_type,
                     size_t var_val_len,
                     u_char * statP, oid * name, size_t name_len)
  {
      long            intval;
  
      /*
       * these variales will be used when we send the trap 
       */
      oid             objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 };     /* snmpTrapOID.0 */
      oid             demo_trap[] = { 1, 3, 6, 1, 4, 1, 2021, 13, 990 };  /*demo-trap */
      oid             example_string_oid[] =
          { 1, 3, 6, 1, 4, 1, 2021, 254, 1, 0 };
      static netsnmp_variable_list var_trap;
      static netsnmp_variable_list var_obj;
  
      DEBUGMSGTL(("example", "write_exampletrap2 entered: action=%d\n",
                  action));
      switch (action) {
      case RESERVE1:
          /*
           *  The only acceptable value is the integer 1
           */
          if (var_val_type != ASN_INTEGER) {
              DEBUGMSGTL(("example", "%x not integer type", var_val_type));
              return SNMP_ERR_WRONGTYPE;
          }
          if (var_val_len &gt; sizeof(long)) {
              DEBUGMSGTL(("example", "wrong length %" NETSNMP_PRIz "u",
                          var_val_len));
              return SNMP_ERR_WRONGLENGTH;
          }
  
          intval = *((long *) var_val);
          if (intval != 1) {
              DEBUGMSGTL(("example", "wrong value %lx", intval));
              return SNMP_ERR_WRONGVALUE;
          }
          break;
  
      case RESERVE2:
          /*
           * No resources are required.... 
           */
          break;
  
      case FREE:
          /*
           * ... so no resources need be freed 
           */
          break;
  
      case ACTION:
          /*
           *  Having triggered the sending of a trap,
           *   it would be impossible to revoke this,
           *   so we can't actually invoke the action here.
           */
          break;
  
      case UNDO:
          /*
           * We haven't done anything yet,
           * so there's nothing to undo 
           */
          break;
  
      case COMMIT:
          /*
           *  Everything else worked, so it's now safe
           *   to trigger the trap.
           *  Note that this is *only* acceptable since
           *   the trap sending routines are "failsafe".
           *  (In fact, they can fail, but they return no
           *   indication of this, which is the next best thing!)
           */
  
          /*
           * trap definition objects 
           */
  
          var_trap.next_variable = &amp;var_obj;      /* next variable */
          var_trap.name = objid_snmptrap; /* snmpTrapOID.0 */
          var_trap.name_length = sizeof(objid_snmptrap) / sizeof(oid);    /* number of sub-ids */
          var_trap.type = ASN_OBJECT_ID;
          var_trap.val.objid = demo_trap; /* demo-trap objid */
          var_trap.val_len = sizeof(demo_trap);   /* length in bytes (not number of subids!) */
  
  
          /*
           * additional objects 
           */
  
  
          var_obj.next_variable = NULL;   /* No more variables after this one */
          var_obj.name = example_string_oid;
          var_obj.name_length = sizeof(example_string_oid) / sizeof(oid); /* number of sub-ids */
          var_obj.type = ASN_OCTET_STR;   /* type of variable */
          var_obj.val.string = (unsigned char *) example_str;       /* value */
          var_obj.val_len = strlen(example_str);
          DEBUGMSGTL(("example", "write_exampletrap2 sending the v2 trap\n"));
          send_v2trap(&amp;var_trap);
          DEBUGMSGTL(("example", "write_exampletrap2 v2 trap sent\n"));
  
          break;
  
      }
      return SNMP_ERR_NOERROR;
  }
  </code></pre>
  
  <p>any help or example will be very appreciated</p>
  
  <p>Thanks in advance </p>