Date: Sat, 10 Nov 2001 07:11:26 +0300 (MSK) From: .@babolo.ru To: FreeBSD-gnats-submit@freebsd.org Subject: kern/31891: Change mask of loopback net breaks compatibility with older versions Message-ID: <200111100411.HAA12504@aaz.links.ru>
next in thread | raw e-mail | index | archive | help
>Number: 31891 >Category: kern >Synopsis: Change mask of loopback net breaks compatibility with older versions >Confidential: no >Severity: serious >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Nov 09 20:10:02 PST 2001 >Closed-Date: >Last-Modified: >Originator: Aleksandr A. Babaylov >Release: FreeBSD 4.4 >Organization: home >Environment: FreeBSD cicuta.babolo.ru 4.4-STABLE FreeBSD 4.4-STABLE #0: Sat Oct 6 21:36:53 MSD 2001 babolo@cicuta.babolo.ru:/tmp/babolo/usr/src/sys/cicuta i386 >Description: There was 4.2 RELEASE, where packets with 127.0.0.0/24 source address droped on input interfaces. Now it changed to 127.0.0.0/8, which is incombatible with old configuration. This net - 127.0.0.0/8 is extremly useful as private net in clustering environment, so I propose configuration variable MYLOOP_MASKLEN, with default meaning that conforms RFC1122 >How-To-Repeat: Try P2P addresses in 127.0.0.0/8 net. >Fix: --- sys/netinet/myloop_masklen.h Sun Aug 26 04:51:23 2001 +++ sys/netinet/myloop_masklen.h Sun Aug 26 04:51:14 2001 @@ -0,0 +1,7 @@ +#include "opt_myloop_masklen.h" + +#ifndef MYLOOP_MASKLEN +#define IN_MY_LOOP(i) (((u_int32_t)(i) & IN_CLASSA_NET) == (IN_LOOPBACKNET << IN_CLASSA_NSHIFT)) +#else +#define IN_MY_LOOP(i) (((u_int32_t)(i) & (INADDR_BROADCAST << (32 - MYLOOP_MASKLEN))) == (IN_LOOPBACKNET << IN_CLASSA_NSHIFT)) +#endif --- sys/netinet/in.c Mon Aug 13 20:26:17 2001 +++ sys/netinet/in.c Sun Aug 26 04:52:53 2001 @@ -48,6 +48,7 @@ #include <net/route.h> #include <netinet/in.h> +#include <netinet/myloop_masklen.h> #include <netinet/in_var.h> #include <netinet/in_pcb.h> @@ -112,11 +113,11 @@ register u_long i = ntohl(in.s_addr); register u_long net; - if (IN_EXPERIMENTAL(i) || IN_MULTICAST(i)) + if (IN_EXPERIMENTAL(i) || IN_MULTICAST(i) || IN_MY_LOOP(i)) return (0); if (IN_CLASSA(i)) { net = i & IN_CLASSA_NET; - if (net == 0 || net == (IN_LOOPBACKNET << IN_CLASSA_NSHIFT)) + if (net == 0) return (0); } return (1); --- sys/netinet/ip_icmp.c Tue Jul 3 15:01:46 2001 +++ sys/netinet/ip_icmp.c Sun Aug 26 04:53:46 2001 @@ -50,6 +50,7 @@ #define _IP_VHL #include <netinet/in.h> +#include <netinet/myloop_masklen.h> #include <netinet/in_systm.h> #include <netinet/in_var.h> #include <netinet/ip.h> @@ -612,8 +613,7 @@ int optlen = (IP_VHL_HL(ip->ip_vhl) << 2) - sizeof(struct ip); if (!in_canforward(ip->ip_src) && - ((ntohl(ip->ip_src.s_addr) & IN_CLASSA_NET) != - (IN_LOOPBACKNET << IN_CLASSA_NSHIFT))) { + !IN_MY_LOOP(ntohl(ip->ip_src.s_addr))) { m_freem(m); /* Bad return address */ goto done; /* Ip_output() will check for broadcast */ } --- sys/netinet/ip_input.c Thu Jul 19 10:37:26 2001 +++ sys/netinet/ip_input.c Sun Aug 26 04:54:13 2001 @@ -65,6 +65,7 @@ #include <net/intrq.h> #include <netinet/in.h> +#include <netinet/myloop_masklen.h> #include <netinet/in_systm.h> #include <netinet/in_var.h> #include <netinet/ip.h> @@ -347,8 +348,9 @@ } /* 127/8 must not appear on wire - RFC1122 */ - if ((ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET || - (ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) { + /* Local change: 127/MYLOOP_MASKLEN */ + if (IN_MY_LOOP(ntohl(ip->ip_dst.s_addr)) || + IN_MY_LOOP(ntohl(ip->ip_src.s_addr))) { if ((m->m_pkthdr.rcvif->if_flags & IFF_LOOPBACK) == 0) { ipstat.ips_badaddr++; goto bad; --- sys/i386/conf/LINT Wed Aug 15 05:23:49 2001 +++ sys/i386/conf/LINT Sun Aug 26 02:02:45 2001 @@ -425,6 +425,11 @@ # mchain library. It can be either loaded as KLD or compiled into kernel options LIBMCHAIN #mbuf management library +# Usually kernel must to drop any external packet with src in 127/8 +# But it is useful in clusters narrow this mask in kernel to use +# some nets in 127/8 for kernels interoperate in cluster. +options MYLOOP_MASKLEN=8 + # netgraph(4). Enable the base netgraph code with the NETGRAPH option. # Individual node types can be enabled with the corresponding option # listed below; however, this is not strictly necessary as netgraph --- sys/conf/options Fri Aug 3 04:47:27 2001 +++ sys/conf/options Sun Aug 26 02:09:29 2001 @@ -272,6 +272,8 @@ TCPDEBUG TCP_DROP_SYNFIN opt_tcp_input.h XBONEHACK +# For interconnect beetween kernels in cluster +MYLOOP_MASKLEN # Netgraph(4). Use option NETGRAPH to enable the base netgraph code. # Each netgraph node type can be either be compiled into the kernel >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200111100411.HAA12504>