socsvn commit: r271542 - soc2014/shonali/head/contrib/bsnmp/snmpd

shonali at FreeBSD.org shonali at FreeBSD.org
Tue Jul 29 18:20:08 UTC 2014


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

Log:
  Added ipv6 support for target_address(trap)
  

Modified:
  soc2014/shonali/head/contrib/bsnmp/snmpd/snmpmod.h
  soc2014/shonali/head/contrib/bsnmp/snmpd/trap.c

Modified: soc2014/shonali/head/contrib/bsnmp/snmpd/snmpmod.h
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/snmpd/snmpmod.h	Tue Jul 29 17:18:46 2014	(r271541)
+++ soc2014/shonali/head/contrib/bsnmp/snmpd/snmpmod.h	Tue Jul 29 18:20:06 2014	(r271542)
@@ -477,6 +477,7 @@
 struct target_address {
 	char				name[SNMP_ADM_STR32_SIZ];
 	uint8_t				address[SNMP_UDP_ADDR_SIZ];
+        uint8_t                         address6[SNMP_UDP_ADDRv6_SIZ];
 	int32_t				timeout;
 	int32_t				retry;
 	char				taglist[SNMP_TAG_SIZ];

Modified: soc2014/shonali/head/contrib/bsnmp/snmpd/trap.c
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/snmpd/trap.c	Tue Jul 29 17:18:46 2014	(r271541)
+++ soc2014/shonali/head/contrib/bsnmp/snmpd/trap.c	Tue Jul 29 18:20:06 2014	(r271542)
@@ -771,8 +771,9 @@
 int
 target_activate_address(struct target_address *addrs)
 {
-        /* IPv4/IPv6 - Check if there is a better way of determining address type */
-	switch (sizeof(*addrs)) {
+        /* XXX - IPv4/IPv6 - Check if there is a better way of determining address type - Change switch code */
+        
+	switch (sizeof(*addrs->address)) {
                 
 		case 6:
                 	struct sockaddr_in sa;
@@ -814,16 +815,16 @@
 	                sa.sin6_len = sizeof(sa);
 	                sa.sin6_family = AF_INET6;
                         /* Host to network byte order not reqd - check */ 
-                        sa.sin6_addr.s6_addr = (addrs->address[0] << 120) | (addrs->address[1] << 112) | (addrs->address[2] << 104) | (addrs->address[3] << 96) | (addrs->address[4] << 88) | 
-			(addrs->address[5] << 80) | (addrs->address[6] << 72) | (addrs->address[7] << 64) | (addrs->address[8] << 56) |
-                        (addrs->address[9] << 48) | (addrs->address[10] << 40) | (addrs->address[11] << 32) | (addrs->address[12] << 24) | 
-		        (addrs->address[13] << 16) | (addrs->address[14] << 8) | addrs->address[15];
-	                sa.sin6_port = htons(addrs->address[16]) << 8 |
-	                htons(addrs->address[17]) << 0;
-
+                        sa.sin6_addr.s6_addr = (addrs->address6[0] << 120) | (addrs->address6[1] << 112) | (addrs->address6[2] << 104) | (addrs->address6[3] << 96) | (addrs->address6[4] << 88) | 
+			(addrs->address6[5] << 80) | (addrs->address6[6] << 72) | (addrs->address6[7] << 64) | (addrs->address6[8] << 56) |
+                        (addrs->address6[9] << 48) | (addrs->address6[10] << 40) | (addrs->address6[11] << 32) | (addrs->address6[12] << 24) | 
+		        (addrs->address6[13] << 16) | (addrs->address6[14] << 8) | addrs->address6[15];
+	                sa.sin6_port = htons(addrs->address6[16]) << 8 |
+	                htons(addrs->address6[17]) << 0;
+                        char dst[INET6_ADDRSTRLEN];
+                        inet_ntop(AF_INET6,&(sa.sin6_addr), dst, INET6_ADDRSTRLEN);
 	                if (connect(addrs->socket, (struct sockaddr *)&sa, sa.sin6_len) == -1) {
-	                        syslog(LOG_ERR, "connect(%s,%u): %m",
-	                        inet_ntoa(sa.sin6_addr), ntohs(sa.sin6_port));
+	                        syslog(LOG_ERR, "connect(%s,%u): %m", dst, ntohs(sa.sin6_port));
 	                        (void)close(addrs->socket);
 	                        return (SNMP_ERR_GENERR);
 	                }


More information about the svn-soc-all mailing list