Title::An net-snmp API example program for Redback SMS 10000
//The example do one things: send a RBN subscriber reauth snmp to SMS //comile command as: gcc -o redweb redweb.c -lkstat -lm -lsocket -ladm -lnetsnmp -lcrypto
static char snmpreauth[]=".1.3.6.1.4.1.2352.2.14.1.2.1.1."; struct snmp_session session, *ss; struct snmp_pdu *response; struct snmp_pdu *pdu;
char snmpcommunity[32]; char snmpstr[256]; char tmpstr[128]; char *endptr;
oid name[512]; int name_length; int cnt,id=0; int snmpsetvalue=1;
init_mib(); add_mibdir("/opt/weblogin/mibs"); // include Redback Mibs file
snmp_sess_init(&session); session.version=SNMP_VERSION_1; session.peername=strdup(data.nas_address); session.community=strdup(snmpcommunity); session.community_len=strlen(session.community); session.retries=0; session.timeout=12000; session.sessid=strtol(data.timeid, &endptr, 0);
SOCK_STARTUP;
/* Macro * open an SNMP session */
ss = snmp_open(&session); if (ss == NULL) { /* * diagnose snmp_open errors with the input netsnmp_session pointer */ snmp_sess_perror("snmptable", &session); SOCK_CLEANUP; }
/* * create PDU for SET request and add object names and values to request */
pdu = (struct snmp_pdu *)snmp_pdu_create(SNMP_MSG_SET); if(pdu==NULL) { printf("Unable to create the pdu"); }
sprintf(snmpstr,"%s17",snmpreauth); for(cnt=0;cnt<17;cnt++) { sprintf(tmpstr,".%d",(char *)data.session_id[cnt]); // data.session_id MAC format string strcat(snmpstr,tmpstr); }
//FIXME name_length=512;
if(!read_objid(snmpstr,name,&name_length)){ printf("Error in read_objid\n");exit(1);};
snmp_pdu_add_variable(pdu,name,name_length,ASN_INTEGER,&snmpsetvalue,sizeof(snmpsetvalue)); status = snmp_synch_response(ss, pdu, &response); // sync snmp if (status == STAT_SUCCESS) { if (response->errstat == SNMP_ERR_NOERROR) { } exitval = 2; } else if (status == STAT_TIMEOUT) { fprintf(stderr, "SNMP Timeout: No Response from %s\n", session.peername); exitval = 1; } else { snmp_sess_perror("snmpset", ss); printf("snmp session else"); exitval = 1; }
if (response) snmp_free_pdu(response);
snmp_close(ss);
SOCK_CLEANUP;
/* Macro off * final a snmp session */