socsvn commit: r272224 - in soc2014/shonali/head: contrib/bsnmp/snmpd usr.sbin/bsnmpd/tools/libbsnmptools
shonali at FreeBSD.org
shonali at FreeBSD.org
Mon Aug 11 18:39:02 UTC 2014
Author: shonali
Date: Mon Aug 11 18:39:00 2014
New Revision: 272224
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=272224
Log:
Added switch case SNMP_SYNTAX_IP6ADDRESS and calls to ipv6 functions in config.c & export.c
Modified:
soc2014/shonali/head/contrib/bsnmp/snmpd/config.c
soc2014/shonali/head/contrib/bsnmp/snmpd/export.c
soc2014/shonali/head/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c
Modified: soc2014/shonali/head/contrib/bsnmp/snmpd/config.c
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/snmpd/config.c Mon Aug 11 17:45:41 2014 (r272223)
+++ soc2014/shonali/head/contrib/bsnmp/snmpd/config.c Mon Aug 11 18:39:00 2014 (r272224)
@@ -801,41 +801,12 @@
sain = (struct sockaddr_in *)(void *)res->ai_addr;
sain->sin_addr.s_addr = ntohl(sain->sin_addr.s_addr);
inet_ntop(AF_INET, &(sain->sin_addr), *ip, INET_ADDRSTRLEN);
-
- /*
- ip[0] = sain->sin_addr.s_addr >> 24;
- ip[1] = sain->sin_addr.s_addr >> 16;
- ip[2] = sain->sin_addr.s_addr >> 8;
- ip[3] = sain->sin_addr.s_addr >> 0;
- */
-
break;
case AF_INET6 :
addr_type = AF_INET6;
sain6 = (struct sockaddr_in6 *)(void *)res->ai_addr;
-
- /* ipv6 implementation of network to host byte order function */
- /*
- unsigned char tmp[16];
- if (BYTE_ORDER == LITTLE_ENDIAN) {
- tmp[3] = (sain6->sin6_addr.s6_addr[0] << 24) | (sain6->sin6_addr.s6_addr[1] << 16) | (sain6->sin6_addr.s6_addr[2] << 8) | sain6->sin6_addr.s6_addr[3];
- tmp[2] = (sain6->sin6_addr.s6_addr[4] << 24) | (sain6->sin6_addr.s6_addr[5] << 16) | (sain6->sin6_addr.s6_addr[6] << 8) | sain6->sin6_addr.s6_addr[7];
- tmp[1] = (sain6->sin6_addr.s6_addr[8] << 24) | (sain6->sin6_addr.s6_addr[9] << 16) | (sain6->sin6_addr.s6_addr[10] << 8) | sain6->sin6_addr.s6_addr[11];
- tmp[0] = (sain6->sin6_addr.s6_addr[12] << 24) | (sain6->sin6_addr.s6_addr[13] << 16) | (sain6->sin6_addr.s6_addr[14] << 8) | sain6->sin6_addr.s6_addr[15];
- }
-
- else {
- tmp[0] = (sain6->sin6_addr.s6_addr[0] << 24) | (sain6->sin6_addr.s6_addr[1] << 16) | (sain6->sin6_addr.s6_addr[2] << 8) | sain6->sin6_addr.s6_addr[3];
- tmp[1] = (sain6->sin6_addr.s6_addr[4] << 24) | (sain6->sin6_addr.s6_addr[5] << 16) | (sain6->sin6_addr.s6_addr[6] << 8) | sain6->sin6_addr.s6_addr[7];
- tmp[2] = (sain6->sin6_addr.s6_addr[8] << 24) | (sain6->sin6_addr.s6_addr[9] << 16) | (sain6->sin6_addr.s6_addr[10] << 8) | sain6->sin6_addr.s6_addr[11];
- tmp[3] = (sain6->sin6_addr.s6_addr[12] << 24) | (sain6->sin6_addr.s6_addr[13] << 16) | (sain6->sin6_addr.s6_addr[14] << 8) | sain6->sin6_addr.s6_addr[15];
- }
- strcpy(sain6->sin6_addr.s6_addr, (unsigned char *)tmp) ;
- */
-
inet_ntop(AF_INET6, &(sain6->sin6_addr), *ip, INET6_ADDRSTRLEN);
-
}
freeaddrinfo(res);
@@ -1025,56 +996,61 @@
parse_syntax_ipaddress(struct snmp_value *value)
{
int i;
+ u_char ip[4];
+
+ if (token == TOK_NUM) {
+ /* numerical address */
+ i = 0;
+ for (;;) {
+ if (numval >= 256)
+ report("ip address part too large");
+ value->v.ipaddress[i++] = numval;
+ if (i == 4)
+ break;
+ if (gettoken() != '.')
+ report("expecting '.' in ip address");
+ }
+ gettoken();
+
+ } else if (token == TOK_HOST) {
+ /* host name */
+ gethost(strval, ip);
+ for (i = 0; i < 4; i++)
+ value->v.ipaddress[i] = ip[i];
+ gettoken();
+
+ } else
+ report("bad ip address syntax");
+}
+
+static void
+parse_syntax_ip6address(struct snmp_value *value)
+{
+ int i;
u_char ip[16];
-
+
if (token == TOK_NUM) {
/* numerical address */
i = 0;
for (;;) {
- if (!isxdigit(numval)) {
- if (numval >= 256)
- report("ip address part too large");
- value->v.ipaddress[i++] = numval;
- if (i == 4)
- break;
- if (gettoken() != '.')
- report("expecting '.' in ip address");
- }
-
- else {
- value->v.ipaddress[i++] = numval;
- if (i == 16)
- break;
- if (gettoken() != ':')
- report("expecting ':' in ip address");
- }
-
+ value->v.ipaddress6[i++] = numval;
+ if (i == 16)
+ break;
+ if (gettoken() != ':')
+ report("expecting ':' in ip address");
}
gettoken();
- if (i == 4) {
- struct in_addr dst;
- if (!inet_pton(AF_INET,value->v.ipaddress[i++],(void *)&dst))
- report("ip address not valid");
- }
- else if (i == 16) {
- struct in6_addr dst;
- if (!inet_pton(AF_INET6,value->v.ipaddress[i++],(void *)&dst))
- report("ipv6 address not valid");
- }
+
+ struct in6_addr dst;
+ if (!inet_pton(AF_INET6, value->v.ipaddress6[i++],(void *)&dst))
+ report("ipv6 address not valid");
} else if (token == TOK_HOST) {
/* host name */
gethost(strval, ip);
- if (addr_type == AF_INET){
- for (i = 0; i < 4; i++)
- value->v.ipaddress[i] = ip[i];
- gettoken();
- }
- if (addr_type == AF_INET6){
- for (i = 0; i < 16; i++)
- value->v.ipaddress[i] = ip[i];
- gettoken();
- }
+ for (i = 0; i < 16; i++)
+ value->v.ipaddress6[i] = ip[i];
+ gettoken();
} else
report("bad ip address syntax");
@@ -1142,6 +1118,10 @@
parse_syntax_ipaddress(&value);
break;
+ case SNMP_SYNTAX_IP6ADDRESS:
+ parse_syntax_ip6address(&value);
+ break;
+
case SNMP_SYNTAX_COUNTER:
case SNMP_SYNTAX_GAUGE:
case SNMP_SYNTAX_TIMETICKS:
Modified: soc2014/shonali/head/contrib/bsnmp/snmpd/export.c
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/snmpd/export.c Mon Aug 11 17:45:41 2014 (r272223)
+++ soc2014/shonali/head/contrib/bsnmp/snmpd/export.c Mon Aug 11 18:39:00 2014 (r272224)
@@ -363,34 +363,28 @@
{
u_int8_t *pval;
u_int i;
-
- switch (oid->len) {
-
- case SNMP_IPv4_ADDR_SIZ:
- if (sub + SNMP_IPv4_ADDR_SIZ > oid->len)
- goto err;
- pval = va_arg(ap, u_int8_t *);
- for (i = 0; i < 4; i++) {
- if (oid->subs[sub] > 0xff)
- goto err;
- pval[i] = oid->subs[sub++];
- }
-
- case SNMP_IPv6_ADDR_SIZ:
- if (sub + SNMP_IPv6_ADDR_SIZ > oid->len)
- goto err;
- pval = va_arg(ap, u_int8_t *);
- for (i = 0; i < 16; i++) {
- pval[i] = oid->subs[sub++];
- }
-
- default:
- return (NULL);
- }
-
+ if (sub + SNMP_IPv4_ADDR_SIZ > oid->len)
+ goto err;
+ pval = va_arg(ap, u_int8_t *);
+ for (i = 0; i < 4; i++) {
+ if (oid->subs[sub] > 0xff)
+ goto err;
+ pval[i] = oid->subs[sub++];
+ }
+ break;
+ }
+ case SNMP_SYNTAX_IP6ADDRESS:
+ {
+ u_int8_t *pval;
+ u_int i;
+ if (sub + SNMP_IPv6_ADDR_SIZ > oid->len)
+ goto err;
+ pval = va_arg(ap, u_int8_t *);
+ for (i = 0; i < 16; i++) {
+ pval[i] = oid->subs[sub++];
+ }
break;
}
-
case SNMP_SYNTAX_COUNTER:
case SNMP_SYNTAX_GAUGE:
case SNMP_SYNTAX_TIMETICKS:
Modified: soc2014/shonali/head/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c
==============================================================================
--- soc2014/shonali/head/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c Mon Aug 11 17:45:41 2014 (r272223)
+++ soc2014/shonali/head/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c Mon Aug 11 18:39:00 2014 (r272224)
@@ -1763,8 +1763,9 @@
snmp_output_ipaddress(struct snmp_toolinfo *snmptoolctx, uint8_t *ip)
{
if (GET_OUTPUT(snmptoolctx) == OUTPUT_VERBOSE)
- fprintf(stdout, "%s : ", syntax_strings[SNMP_SYNTAX_IPADDRESS].str);
- fprintf(stdout, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
+ fprintf(stdout, "%s : ", syntax_strings[SNMP_SYNTAX_IPADDRESS].str);
+
+ fprintf(stdout, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
}
@@ -1772,10 +1773,11 @@
snmp_output_ip6address(struct snmp_toolinfo *snmptoolctx, uint8_t *ip)
{
if (GET_OUTPUT(snmptoolctx) == OUTPUT_VERBOSE)
- fprintf(stdout, "%s : ", syntax_strings[SNMP_SYNTAX_IP6ADDRESS].str);
- fprintf(stdout, "%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u",
- ip[0], ip[1], ip[2], ip[3], ip[4], ip[5], ip[6], ip[7], ip[8],
- ip[9], ip[10], ip[11], ip[12], ip[13], ip[14], ip[15]);
+ fprintf(stdout, "%s : ", syntax_strings[SNMP_SYNTAX_IP6ADDRESS].str);
+
+ fprintf(stdout, "%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u.%u",
+ ip[0], ip[1], ip[2], ip[3], ip[4], ip[5], ip[6], ip[7], ip[8],
+ ip[9], ip[10], ip[11], ip[12], ip[13], ip[14], ip[15]);
}
static void
More information about the svn-soc-all
mailing list