From owner-p4-projects@FreeBSD.ORG Mon Aug 29 20:48:13 2005 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BF2B116A421; Mon, 29 Aug 2005 20:48:12 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9560416A41F for ; Mon, 29 Aug 2005 20:48:12 +0000 (GMT) (envelope-from soc-victor@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 85B4543D49 for ; Mon, 29 Aug 2005 20:48:09 +0000 (GMT) (envelope-from soc-victor@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j7TKm9Wv002603 for ; Mon, 29 Aug 2005 20:48:09 GMT (envelope-from soc-victor@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j7TKm989002600 for perforce@freebsd.org; Mon, 29 Aug 2005 20:48:09 GMT (envelope-from soc-victor@freebsd.org) Date: Mon, 29 Aug 2005 20:48:09 GMT Message-Id: <200508292048.j7TKm989002600@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to soc-victor@freebsd.org using -f From: Victor Cruceru To: Perforce Change Reviews Cc: Subject: PERFORCE change 82803 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Aug 2005 20:48:13 -0000 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;