socsvn commit: r271541 - soc2014/shonali/head/usr.sbin/bsnmpd/tools/libbsnmptools

shonali at FreeBSD.org shonali at FreeBSD.org
Tue Jul 29 17:18:47 UTC 2014


Author: shonali
Date: Tue Jul 29 17:18:46 2014
New Revision: 271541
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=271541

Log:
  Added code to support ipv6 code in bsnmptools.c
  

Modified:
  soc2014/shonali/head/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c

Modified: soc2014/shonali/head/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c
==============================================================================
--- soc2014/shonali/head/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c	Tue Jul 29 17:17:58 2014	(r271540)
+++ soc2014/shonali/head/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c	Tue Jul 29 17:18:46 2014	(r271541)
@@ -1097,17 +1097,35 @@
 	char *endptr, *ptr;
 
 	ptr = str;
-	for (i = 0; i < 4; i++) {
-		v = strtoul(ptr, &endptr, 10);
-		if (v > 0xff)
-			return (NULL);
-		if (*endptr != '.' && strchr("],\0", *endptr) == NULL && i != 3)
-			return (NULL);
-		if (snmp_suboid_append(oid, (asn_subid_t) v) < 0)
-			return (NULL);
-		ptr = endptr + 1;
-	}
+        
+  	switch (sizeof(*str)) {
 
+                case 4:
+			for (i = 0; i < 4; i++) {
+				v = strtoul(ptr, &endptr, 10);
+				if (v > 0xff)
+					return (NULL);
+				if (*endptr != '.' && strchr("],\0", *endptr) == NULL && i != 3)
+					return (NULL);
+				if (snmp_suboid_append(oid, (asn_subid_t) v) < 0)
+					return (NULL);
+				ptr = endptr + 1;
+		        }
+                case 16:
+			for (i = 0; i < 16; i++) {
+				v = strtoul(ptr, &endptr, 16);
+				if (v > 0xff)
+					return (NULL);
+				if (*endptr != ':' && strchr("],\0", *endptr) == NULL && i != 15)
+					return (NULL);
+				if (snmp_suboid_append(oid, (asn_subid_t) v) < 0)
+					return (NULL);
+				ptr = endptr + 1;
+		        }
+				
+		default:
+                        return (NULL);
+        }
 	return (endptr);
 }
 
@@ -1741,8 +1759,15 @@
 	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]);
+        
+        switch (sizeof(*ip)) {
+                case 4:
+			fprintf(stdout, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
+                case 16:
+	     		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]);
+		default:
+                        return (NULL);
+        } 
 }
 
 static void
@@ -1896,7 +1921,6 @@
 snmp_output_index(struct snmp_toolinfo *snmptoolctx, struct index *stx,
     struct asn_oid *oid)
 {
-	uint8_t ip[4];
 	uint32_t bytes = 1;
 	uint64_t cnt64;
 	struct asn_oid temp, out;
@@ -1934,11 +1958,24 @@
 	    case SNMP_SYNTAX_IPADDRESS:
 		if (temp.len < 4)
 			return (-1);
-		for (bytes = 0; bytes < 4; bytes++)
-			ip[bytes] = temp.subs[bytes];
-
-		snmp_output_ipaddress(snmptoolctx, ip);
-		bytes = 4;
+                 
+                switch (sizeof(temp.len)) {
+                	case 4:
+				uint8_t ip[4];
+				for (bytes = 0; bytes < 4; bytes++)
+					ip[bytes] = temp.subs[bytes];
+		     		snmp_output_ipaddress(snmptoolctx, ip);
+				bytes = 4;
+			case 16:		
+				uint8_t ip[16];		
+				for (bytes = 0; bytes < 16; bytes++)
+					ip[bytes] = temp.subs[bytes];
+		  	        snmp_output_ipaddress(snmptoolctx, ip);
+				bytes = 16;		
+					
+			default:
+                       		 return (NULL);
+                }      
 		break;
 
 	    case SNMP_SYNTAX_COUNTER:


More information about the svn-soc-all mailing list