PERFORCE change 82803 for review

Victor Cruceru soc-victor at FreeBSD.org
Mon Aug 29 20:48:13 GMT 2005


http://perforce.freebsd.org/chv.cgi?CH=82803

Change 82803 by soc-victor at soc-victor_82.76.158.176 on 2005/08/29 20:47:37

	Finished the UDP-MIB (RFC 4113).

Affected files ...

.. //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_tcp_udp46/Makefile#7 edit
.. //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_tcp_udp46/udp46_snmp.c#5 edit

Differences ...

==== //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_tcp_udp46/Makefile#7 (text+ko) ====

@@ -43,6 +43,7 @@
 	
 DEFS=	${MOD}_tree.def
 
+#INET-ADDRESS-MIB.txt does not belong here
 BMIBS=	TCP-MIB.txt \
 	UDP-MIB.txt \
 	INET-ADDRESS-MIB.txt

==== //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_tcp_udp46/udp46_snmp.c#5 (text+ko) ====

@@ -99,7 +99,8 @@
 	u_int n = 0;
 	assert(inp != NULL);
 	
-	for (xf =  tcp_udp46_state_g.xfiles, n = 0; n < tcp_udp46_state_g.xfiles_total; ++n, ++xf) {
+	for (xf =  tcp_udp46_state_g.xfiles, n = 0; 
+		n < tcp_udp46_state_g.xfiles_total; ++n, ++xf) {
 		if (xf->xf_data == NULL) {
 			continue;
 		}	
@@ -150,6 +151,8 @@
 	pid_t  pid_owner = 0;
 	in_addr_t inaddr;
 	u_int instance = 1;
+	static 
+	uint32_t zero_ip6[] ={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 
 	assert(inp != NULL);
 	
@@ -173,8 +176,40 @@
 				return (1); /*duplicate endpoint found*/	
 			}
 		} 
+		/*check for an existent IPv6 endpoint bound to 0::0/128  */
+		if ( inp->xi_inp.inp_laddr.s_addr == INADDR_ANY 
+			&& inp->xi_inp.inp_faddr.s_addr == INADDR_ANY ) {
+			if( _oid->index.subs[0] == IAT_ipv6 &&
+			    _oid->inp->xi_inp.in6p_lport  == inp->xi_inp.inp_lport && 
+				pid_owner == _oid->so_pgid) {
+				if (memcmp(&zero_ip6[0], 
+					&_oid->index.subs[1], 
+					sizeof(zero_ip6)) == 0
+				   && memcmp(&zero_ip6[0], 
+					&_oid->index.subs[19], 
+					sizeof(zero_ip6) ) == 0 ) {
+					/*got it*/
+					instance = 
+				  	 (IN6_IS_ADDR_UNSPECIFIED(&_oid->inp->xi_inp.in6p_faddr) ? 
+					  _oid->index.subs[21] : _oid->index.subs[36] );
+
+					_oid->index.len = 7;
+					_oid->index.subs[0] = IAT_unknown;
+					_oid->index.subs[1] = 0; /*zero/ empty octet sting*/
+					_oid->index.subs[2] = ntohs(inp->xi_inp.inp_lport);
+					_oid->index.subs[3] = IAT_unknown;
+					_oid->index.subs[4] = 0; /*zero/ empty octet sting*/
+					_oid->index.subs[5] = ntohs(_oid->inp->xi_inp.in6p_fport);
+					/*copy instance number*/
+					_oid->index.subs[6] = instance;
+					return 1;
+				}
+			}	
+
+		}/*end check for the same application bound to zero v4 & v6 address*/
+		
 	}
-	all_oid->index.len = 13;
+	
 	all_oid->index.subs[0] = IAT_ipv4;
 	inaddr = ntohl(inp->xi_inp.inp_laddr.s_addr);
 	all_oid->index.subs[1] = (inaddr >> 24) & 0xff;
@@ -182,14 +217,26 @@
 	all_oid->index.subs[3] = (inaddr >>  8) & 0xff;
 	all_oid->index.subs[4] = (inaddr >>  0) & 0xff;
 	all_oid->index.subs[5] = ntohs(inp->xi_inp.inp_lport);
-	all_oid->index.subs[6] = IAT_ipv4;
-	inaddr = ntohl(inp->xi_inp.inp_faddr.s_addr);
-	all_oid->index.subs[7] = (inaddr >> 24) & 0xff;
-	all_oid->index.subs[8] = (inaddr >> 16) & 0xff;
-	all_oid->index.subs[9] = (inaddr >>  8) & 0xff;
-	all_oid->index.subs[10] = (inaddr >>  0) & 0xff;
-	all_oid->index.subs[11] = ntohs(inp->xi_inp.inp_fport);
-	all_oid->index.subs[12] = instance;
+	
+	if(inp->xi_inp.inp_faddr.s_addr == INADDR_ANY && 
+		inp->xi_inp.inp_fport == 0 ){
+		all_oid->index.len = 10;
+		all_oid->index.subs[6] = IAT_unknown;
+		all_oid->index.subs[7] = 0; /*zero/ empty octet sting*/
+		all_oid->index.subs[8] = 0;
+		all_oid->index.subs[9] = instance;
+			
+	} else {	
+		all_oid->index.len = 13;
+		all_oid->index.subs[6] = IAT_ipv4;
+		inaddr = ntohl(inp->xi_inp.inp_faddr.s_addr);
+		all_oid->index.subs[7] = (inaddr >> 24) & 0xff;
+		all_oid->index.subs[8] = (inaddr >> 16) & 0xff;
+		all_oid->index.subs[9] = (inaddr >>  8) & 0xff;
+		all_oid->index.subs[10] = (inaddr >>  0) & 0xff;
+		all_oid->index.subs[11] = ntohs(inp->xi_inp.inp_fport);
+		all_oid->index.subs[12] = instance;
+	}
 	all_oid->so_pgid = pid_owner;
 	
 		
@@ -230,19 +277,64 @@
 			return (1); /*duplicate endpoint found*/	
 		  }
 		} 
+		/*check for an existent IPv4 endpoint bound to 0.0.0.0  */
+		if ( IN6_IS_ADDR_UNSPECIFIED(&inp->xi_inp.in6p_laddr)
+			&& IN6_IS_ADDR_UNSPECIFIED(&inp->xi_inp.in6p_faddr)) {
+			if( _oid->index.subs[0] == IAT_ipv4 &&
+			    _oid->inp->xi_inp.inp_lport  == inp->xi_inp.in6p_lport && 
+				pid_owner == _oid->so_pgid) {
+				if ( inp->xi_inp.inp_faddr.s_addr == INADDR_ANY && 
+					inp->xi_inp.inp_laddr.s_addr == INADDR_ANY) {
+					/*got it*/
+					instance = 
+					  (_oid->inp->xi_inp.inp_faddr.s_addr == INADDR_ANY ? 
+					  _oid->index.subs[9] : _oid->index.subs[12] );
+					  
+					_oid->index.len = 7;
+					_oid->index.subs[0] = IAT_unknown;
+					_oid->index.subs[1] = 0; /*zero/ empty octet sting*/
+					_oid->index.subs[2] = ntohs(inp->xi_inp.inp_lport);
+					_oid->index.subs[3] = IAT_unknown;
+					_oid->index.subs[4] = 0; /*zero/ empty octet sting*/
+					_oid->index.subs[5] = ntohs(_oid->inp->xi_inp.in6p_fport);
+					/*copy instance number*/
+					_oid->index.subs[6] = instance;
+					return 1;
+				}
+			}	
+
+		}/*end check for the same application bound to zero v4 & v6 address*/
+		
+		
 	}
-	all_oid->index.len = 37;
+	
+	if ( IN6_IS_ADDR_UNSPECIFIED(&inp->xi_inp.in6p_faddr) && 
+		inp->xi_inp.in6p_fport == 0 ) {
+		all_oid->index.len = 22;
+
+		all_oid->index.subs[0] = IAT_ipv6;
+		for (i=0; i<16; i++) {
+			all_oid->index.subs[1+i] = inp->xi_inp.in6p_laddr.s6_addr[i];
+		}
+		all_oid->index.subs[17] = ntohs(inp->xi_inp.in6p_lport);
+		all_oid->index.subs[18] = IAT_unknown;
+		all_oid->index.subs[19] = 0;
+		all_oid->index.subs[20] = 0;
+		all_oid->index.subs[21] = instance;
+			
+	} else {	
+		all_oid->index.len = 37;
 
-	all_oid->index.subs[0] = IAT_ipv6;
-	for (i=0; i<16; i++) {
-		all_oid->index.subs[1+i] = inp->xi_inp.in6p_laddr.s6_addr[i];
-		all_oid->index.subs[19+i] = inp->xi_inp.in6p_faddr.s6_addr[i];
-	}
-	all_oid->index.subs[17] = ntohs(inp->xi_inp.in6p_lport);
-	all_oid->index.subs[18] = IAT_ipv6;
-	all_oid->index.subs[35] = ntohs(inp->xi_inp.in6p_fport);
-	all_oid->index.subs[36] = instance;
-		
+		all_oid->index.subs[0] = IAT_ipv6;
+		for (i=0; i<16; i++) {
+			all_oid->index.subs[1+i] = inp->xi_inp.in6p_laddr.s6_addr[i];
+			all_oid->index.subs[19+i] = inp->xi_inp.in6p_faddr.s6_addr[i];
+		}
+		all_oid->index.subs[17] = ntohs(inp->xi_inp.in6p_lport);
+		all_oid->index.subs[18] = IAT_ipv6;
+		all_oid->index.subs[35] = ntohs(inp->xi_inp.in6p_fport);
+		all_oid->index.subs[36] = instance;
+	}	
 	
 	all_oid->so_pgid = pid_owner;
 	


More information about the p4-projects mailing list