Please help, I am trying to send a SNMPv3 trap from within a C program.

I am using the add_trap_session function to add my trap sink sessions and
then send_v2trap to send the trap.

The program works with the authentication turned off (securityLevel = 
SNMP_SEC_LEVEL_NOAUTH) but I can not get it to work when I set the
securityLevel to use encryption (i.e. SNMP_SEC_LEVEL_AUTH).
I can successfully send traps using the snmptrap tool so I know the
trapsink is working.

A simplified version of my code is shown below (and is also contained in
the attached file)...

Thanks Darryl

int main() {
        init();
        send_trap();

}

void init() {
        For each trap sink {
                create_v3_trap_session(...);
        }
}

void send_trap() {
        netsnmp_variable_list *notification_vars;

        Setup notification_vars...

        send_v2trap(notification_vars);
}


int create_v3_trap_session(...) {
    netsnmp_session session, *sesp;
    memset(&session, 0, sizeof(netsnmp_session));
    snmp_sess_init( &session );  // Set up defaults


    session.version == SNMP_VERSION_3;
    session.peername = strdup("192.168.144.214:162");
    session.callback       = snmp_inform_callback; // Function to
interpret incoming data
    session.callback_magic = NULL;                 // Pointer to data for
callback

    // SNMP v2
    session.community = NULL;
    session.community_len = 0;

    // SNMP v3
    session.securityName = strdup("usera");         // The user name
    session.securityNameLen = strlen("usera");      // Length of securityName

    session.securityAuthKeyLen = USM_AUTH_KU_LEN;   //Length of Ku for
auth protocol
    session.securityAuthProto =
snmp_duplicate_objid(usmHMACMD5AuthProtocol, USM_AUTH_PROTO_MD5_LEN);
    session.securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;

    if (generate_Ku(session.securityAuthProto,
                      session.securityAuthProtoLen,
                    (u_char *) "mypassword", "mypassword",
                          session.securityAuthKey,
                        &session.securityAuthKeyLen) != SNMPERR_SUCCESS) {
        return (-1);
    }

    session.securityPrivKeyLen = USM_PRIV_KU_LEN; //  Length of Ku for
priv protocol
    session.securityPrivProto  = snmp_duplicate_objid(usmDESPrivProtocol,
USM_PRIV_PROTO_DES_LEN);
    session.securityPrivProtoLen = USM_PRIV_PROTO_DES_LEN;

    if (generate_Ku(session.securityAuthProto,
                    session.securityAuthProtoLen,
                    (u_char *) "mypassword", strlen("mypassword"),
                    session.securityPrivKey,
                    &session.securityPrivKeyLen) != SNMPERR_SUCCESS) {
        return (-1);
    }

    session.securityModel = SNMP_DEFAULT_SECMODEL; // snmp security model,
v1, v2c, usm */
    session.securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;

    // The following session variables were not set
    //session.securityAuthLocalKey    =  //Kul for auth protocol
    //session.securityAuthLocalKeyLen =  // Length of Kul for auth
protocol XXX
    //session.remote_port             =  // UDP port number of peer. (NO
LONGER USED - USE peername INSTEAD)
    //session.local_port              =  // My UDP port number, 0 for
default, picked randomly
    //session.isAuthoritative         =  // Are we the authoritative
engine? */
    //session.contextName             =  // authoritative contextName
    //session.contextNameLen          =  // Length of contextName
    //session.securityEngineID        =  // Authoritative snmpEngineID
(See snmp_hex_to_binary)
    //session.securityEngineIDLen     =  // Length of contextEngineID
    //session.paramName               =  // target param name
    //session.securityInfo            =  // security module specific
    //session.localname               =
    //session.securityEngineIDLen     =
    //session.securityEngineID        =
    //session.engineBoots             =  // Initial engineBoots for remote
engine
    //session.engineTime              =  // Initial engineTime for remote
engine



    sesp = snmp_open(&session);
    if (sesp) {
        add_trap_session(sesp, SNMP_MSG_INFORM, TRUE, SNMP_VERSION_3);
    }
}
int main() {
        init();
        send_trap();

}

void init() {
        For each trap sink {
                create_v3_trap_session(...);
        }
}

void send_trap() {
        netsnmp_variable_list *notification_vars;

        Setup notification_vars...

        send_v2trap(notification_vars);
}


int create_v3_trap_session(...) {
    netsnmp_session session, *sesp;
    memset(&session, 0, sizeof(netsnmp_session));
    snmp_sess_init( &session );  // Set up defaults


    session.version == SNMP_VERSION_3;
    session.peername = strdup("192.168.144.214:162");
    session.callback       = snmp_inform_callback; // Function to interpret 
incoming data
    session.callback_magic = NULL;                 // Pointer to data for 
callback

    // SNMP v2
    session.community = NULL;
    session.community_len = 0;

    // SNMP v3
    session.securityName = strdup("usera");         // The user name
    session.securityNameLen = strlen("usera");      // Length of securityName

    session.securityAuthKeyLen = USM_AUTH_KU_LEN;   //Length of Ku for auth 
protocol
    session.securityAuthProto = snmp_duplicate_objid(usmHMACMD5AuthProtocol, 
USM_AUTH_PROTO_MD5_LEN);
    session.securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;

    if (generate_Ku(session.securityAuthProto,
                      session.securityAuthProtoLen,
                    (u_char *) "mypassword", "mypassword",
                          session.securityAuthKey,
                        &session.securityAuthKeyLen) != SNMPERR_SUCCESS) {
        return (-1);
    }

    session.securityPrivKeyLen = USM_PRIV_KU_LEN; //  Length of Ku for priv 
protocol
    session.securityPrivProto  = snmp_duplicate_objid(usmDESPrivProtocol, 
USM_PRIV_PROTO_DES_LEN);
    session.securityPrivProtoLen = USM_PRIV_PROTO_DES_LEN;

    if (generate_Ku(session.securityAuthProto,
                    session.securityAuthProtoLen,
                    (u_char *) "mypassword", strlen("mypassword"),
                    session.securityPrivKey,
                    &session.securityPrivKeyLen) != SNMPERR_SUCCESS) {
        return (-1);
    }

    session.securityModel = SNMP_DEFAULT_SECMODEL; // snmp security model, v1, 
v2c, usm */
    session.securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;

    // The following session variables were not set
    //session.securityAuthLocalKey    =  //Kul for auth protocol
    //session.securityAuthLocalKeyLen =  // Length of Kul for auth protocol XXX
    //session.remote_port             =  // UDP port number of peer. (NO LONGER 
USED - USE peername INSTEAD)
    //session.local_port              =  // My UDP port number, 0 for default, 
picked randomly
    //session.isAuthoritative         =  // Are we the authoritative engine? */
    //session.contextName             =  // authoritative contextName
    //session.contextNameLen          =  // Length of contextName
    //session.securityEngineID        =  // Authoritative snmpEngineID (See 
snmp_hex_to_binary)
    //session.securityEngineIDLen     =  // Length of contextEngineID
    //session.paramName               =  // target param name
    //session.securityInfo            =  // security module specific
    //session.localname               =
    //session.securityEngineIDLen     =
    //session.securityEngineID        =
    //session.engineBoots             =  // Initial engineBoots for remote 
engine
    //session.engineTime              =  // Initial engineTime for remote engine



    sesp = snmp_open(&session);
    if (sesp) {
        add_trap_session(sesp, SNMP_MSG_INFORM, TRUE, SNMP_VERSION_3);
    }
}
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.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

Reply via email to