socsvn commit: r272475 - in soc2014/shonali/head/contrib/bsnmp: lib snmpd
shonali at FreeBSD.org
shonali at FreeBSD.org
Fri Aug 15 19:26:53 UTC 2014
Author: shonali
Date: Fri Aug 15 19:26:50 2014
New Revision: 272475
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=272475
Log:
Fixes for trap and trap related function calls
Modified:
soc2014/shonali/head/contrib/bsnmp/lib/snmp.h
soc2014/shonali/head/contrib/bsnmp/snmpd/main.c
soc2014/shonali/head/contrib/bsnmp/snmpd/snmpd.h
soc2014/shonali/head/contrib/bsnmp/snmpd/snmpmod.h
soc2014/shonali/head/contrib/bsnmp/snmpd/trap.c
Modified: soc2014/shonali/head/contrib/bsnmp/lib/snmp.h
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/lib/snmp.h Fri Aug 15 17:55:12 2014 (r272474)
+++ soc2014/shonali/head/contrib/bsnmp/lib/snmp.h Fri Aug 15 19:26:50 2014 (r272475)
@@ -173,6 +173,7 @@
/* trap only */
struct asn_oid enterprise;
u_char agent_addr[4];
+ u_char agent_addr6[16];
int32_t generic_trap;
int32_t specific_trap;
uint32_t time_stamp;
Modified: soc2014/shonali/head/contrib/bsnmp/snmpd/main.c
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/snmpd/main.c Fri Aug 15 17:55:12 2014 (r272474)
+++ soc2014/shonali/head/contrib/bsnmp/snmpd/main.c Fri Aug 15 19:26:50 2014 (r272475)
@@ -372,7 +372,7 @@
* on the user credentials against the configured User groups & VACM views.
*/
enum snmp_code
-snmp_pdu_auth_access(struct snmp_pdu *pdu, int32_t *ip)
+snmp_pdu_auth_access(struct snmp_pdu *pdu, int8_t *ip)
{
const char *uname;
int32_t suboid, smodel;
Modified: soc2014/shonali/head/contrib/bsnmp/snmpd/snmpd.h
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/snmpd/snmpd.h Fri Aug 15 17:55:12 2014 (r272474)
+++ soc2014/shonali/head/contrib/bsnmp/snmpd/snmpd.h Fri Aug 15 19:26:50 2014 (r272475)
@@ -315,6 +315,7 @@
int socket;
u_char comm[SNMP_COMMUNITY_MAXLEN];
int version;
+ int addrtype;
};
enum {
TRAPSINK_ACTIVE = 1,
@@ -324,6 +325,9 @@
TRAPSINK_V1 = 1,
TRAPSINK_V2 = 2,
+
+ TRAPSINK_IPv4 = 1,
+ TRAPSINK_IPv6 = 2,
};
TAILQ_HEAD(trapsink_list, trapsink);
extern struct trapsink_list trapsink_list;
Modified: soc2014/shonali/head/contrib/bsnmp/snmpd/snmpmod.h
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/snmpd/snmpmod.h Fri Aug 15 17:55:12 2014 (r272474)
+++ soc2014/shonali/head/contrib/bsnmp/snmpd/snmpmod.h Fri Aug 15 19:26:50 2014 (r272475)
@@ -599,7 +599,7 @@
void snmp_output(struct snmp_pdu *, u_char *, size_t *, const char *);
void snmp_send_port(void *, const struct asn_oid *, struct snmp_pdu *,
const struct sockaddr *, socklen_t);
-enum snmp_code snmp_pdu_auth_access(struct snmp_pdu *, int32_t *);
+enum snmp_code snmp_pdu_auth_access(struct snmp_pdu *, int8_t *);
/* sending traps */
void snmp_send_trap(const struct asn_oid *, ...);
@@ -619,6 +619,11 @@
void ip_commit(struct snmp_context *);
int ip_get(struct snmp_value *, u_char *);
+int ip6_save(struct snmp_value *, struct snmp_context *, u_char *);
+void ip6_rollback(struct snmp_context *, u_char *);
+void ip6_commit(struct snmp_context *);
+int ip6_get(struct snmp_value *, u_char *);
+
int oid_save(struct snmp_value *, struct snmp_context *, struct asn_oid *);
void oid_rollback(struct snmp_context *, struct asn_oid *);
void oid_commit(struct snmp_context *);
Modified: soc2014/shonali/head/contrib/bsnmp/snmpd/trap.c
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/snmpd/trap.c Fri Aug 15 17:55:12 2014 (r272474)
+++ soc2014/shonali/head/contrib/bsnmp/snmpd/trap.c Fri Aug 15 19:26:50 2014 (r272475)
@@ -57,8 +57,6 @@
#include "tree.h"
#include "oid.h"
-#define RowStatus_active 1
-
struct trapsink_list trapsink_list = TAILQ_HEAD_INITIALIZER(trapsink_list);
@@ -87,15 +85,18 @@
u_int status;
u_char comm[SNMP_COMMUNITY_MAXLEN + 1];
u_int version;
+ u_int addrtype;
u_int rb;
u_int rb_status;
u_int rb_version;
+ u_int rb_addrtype;
u_char rb_comm[SNMP_COMMUNITY_MAXLEN + 1];
};
enum {
TDEP_STATUS = 0x0001,
TDEP_COMM = 0x0002,
TDEP_VERSION = 0x0004,
+ TDEP_ADDRTYPE = 0x0004,
TDEP_CREATE = 0x0001,
TDEP_MODIFY = 0x0002,
@@ -176,8 +177,6 @@
(void)close(t->socket);
free(t);
}
-
-
}
static void trapsink_create_sockv6(struct trapsink *t)
@@ -201,9 +200,6 @@
(void)close(t->socket);
free(t);
}
-
-
-
}
static void
@@ -220,6 +216,7 @@
{
tdep->rb_status = t->status;
tdep->rb_version = t->version;
+ tdep->rb_addrtype = t->addrtype;
strcpy(tdep->rb_comm, t->comm);
if (tdep->set & TDEP_STATUS) {
@@ -233,6 +230,8 @@
if (tdep->set & TDEP_VERSION)
t->version = tdep->version;
+ if (tdep->set & TDEP_ADDRTYPE)
+ t->addrtype = tdep->addrtype;
if (tdep->set & TDEP_COMM)
strcpy(t->comm, tdep->comm);
@@ -242,6 +241,7 @@
if (t->comm[0] == '\0') {
t->status = tdep->rb_status;
t->version = tdep->rb_version;
+ t->addrtype = tdep->rb_addrtype;
strcpy(t->comm, tdep->rb_comm);
return (SNMP_ERR_INCONS_VALUE);
}
@@ -259,6 +259,8 @@
t->status = tdep->rb_status;
if (tdep->set & TDEP_VERSION)
t->version = tdep->rb_version;
+ if (tdep->set & TDEP_ADDRTYPE)
+ t->addrtype = tdep->rb_addrtype;
if (tdep->set & TDEP_COMM)
strcpy(t->comm, tdep->rb_comm);
@@ -436,6 +438,16 @@
tdep->version = value->v.integer;
tdep->set |= TDEP_VERSION;
return (SNMP_ERR_NOERROR);
+
+ case LEAF_begemotTrapSinkAddrType:
+ if (tdep->set & TDEP_ADDRTYPE)
+ return (SNMP_ERR_INCONS_VALUE);
+ if (value->v.integer != TRAPSINK_IPv4 &&
+ value->v.integer != TRAPSINK_IPv6)
+ return (SNMP_ERR_WRONG_VALUE);
+ tdep->addrtype = value->v.integer;
+ tdep->set |= TDEP_ADDRTYPE;
+ return (SNMP_ERR_NOERROR);
}
if (t == NULL)
return (SNMP_ERR_INCONS_NAME);
@@ -461,6 +473,10 @@
value->v.integer = t->version;
break;
+ case LEAF_begemotTrapSinkAddrType:
+ value->v.integer = t->addrtype;
+ break;
+
}
return (SNMP_ERR_NOERROR);
}
@@ -483,6 +499,23 @@
}
static void
+snmp_create_v1_trapv6(struct snmp_pdu *pdu, char *com,
+ const struct asn_oid *trap_oid)
+{
+ memset(pdu, 0, sizeof(*pdu));
+ strcpy(pdu->community, com);
+
+ pdu->version = SNMP_V1;
+ pdu->type = SNMP_PDU_TRAP;
+ pdu->enterprise = systemg.object_id;
+ memcpy(pdu->agent_addr6, snmpd.trap1addr6, 16);
+ pdu->generic_trap = trap_oid->subs[trap_oid->len - 1] - 1;
+ pdu->specific_trap = 0;
+ pdu->time_stamp = get_ticks() - start_tick;
+ pdu->nbindings = 0;
+}
+
+static void
snmp_create_v2_trap(struct snmp_pdu *pdu, char *com,
const struct asn_oid *trap_oid)
{
@@ -589,14 +622,18 @@
char *tag;
size_t sndlen;
ssize_t len;
- int32_t ip;
+ int8_t ip[16];
TAILQ_FOREACH(t, &trapsink_list, link) {
if (t->status != TRAPSINK_ACTIVE)
continue;
- if (t->version == TRAPSINK_V1)
- snmp_create_v1_trap(&pdu, t->comm, trap_oid);
+ if (t->version == TRAPSINK_V1) {
+ if (t->addrtype == TRAPSINK_IPv4)
+ snmp_create_v1_trap(&pdu, t->comm, trap_oid);
+ else if (t->addrtype == TRAPSINK_IPv6)
+ snmp_create_v1_trapv6(&pdu, t->comm, trap_oid);
+ }
else
snmp_create_v2_trap(&pdu, t->comm, trap_oid);
@@ -652,7 +689,10 @@
switch (tp->mpmodel) {
case SNMP_MPM_SNMP_V1:
- snmp_create_v1_trap(&pdu, tp->secname, trap_oid);
+ if (t->addrtype == TRAPSINK_IPv4)
+ snmp_create_v1_trap(&pdu, tp->secname, trap_oid);
+ else if (t->addrtype == TRAPSINK_IPv6)
+ snmp_create_v1_trapv6(&pdu, tp->secname, trap_oid);
break;
case SNMP_MPM_SNMP_V2c:
More information about the svn-soc-all
mailing list