--- sys/netinet/myloop_masklen.h +++ sys/netinet/myloop_masklen.h @@ -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/conf/options 17 Nov 2012 07:42:48 -0000 1.510.2.26 +++ sys/conf/options 30 Nov 2012 20:44:10 -0000 @@ -391,6 +391,8 @@ XBONEHACK KRPC NFSLOCKD +# For interconnect beetween kernels in claster +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 --- sys/netinet/in.c +++ sys/netinet/in.c @@ -46,6 +46,7 @@ #include #include +#include #include #include @@ -140,11 +141,11 @@ register u_long i = ntohl(in.s_addr); register u_long net; - if (IN_EXPERIMENTAL(i) || IN_MULTICAST(i) || IN_LINKLOCAL(i)) + if (IN_EXPERIMENTAL(i) || IN_MULTICAST(i) || IN_LINKLOCAL(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_input.c +++ sys/netinet/ip_input.c @@ -60,6 +60,7 @@ #include #include +#include #include #include #include @@ -381,8 +382,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/netinet/ip_output.c +++ sys/netinet/ip_output.c @@ -52,6 +52,7 @@ #include #include +#include #include #include #include @@ -733,8 +734,9 @@ passout: /* 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 ((ifp->if_flags & IFF_LOOPBACK) == 0) { ipstat.ips_badaddr++; error = EADDRNOTAVAIL;