Date: Mon, 29 Aug 2005 20:48:09 GMT From: Victor Cruceru <soc-victor@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 82803 for review Message-ID: <200508292048.j7TKm989002600@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=82803 Change 82803 by soc-victor@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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508292048.j7TKm989002600>