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