Date: Sat, 15 Oct 2011 23:51:21 +0300 From: Nikolay Denev <ndenev@gmail.com> To: Gleb Smirnoff <glebius@FreeBSD.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r226402 - head/sys/netinet Message-ID: <C6289E17-0C23-4893-A454-C3601BEAC86F@gmail.com> In-Reply-To: <201110151841.p9FIfQLE025750@svn.freebsd.org> References: <201110151841.p9FIfQLE025750@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Oct 15, 2011, at 9:41 PM, Gleb Smirnoff wrote: > Author: glebius > Date: Sat Oct 15 18:41:25 2011 > New Revision: 226402 > URL: http://svn.freebsd.org/changeset/base/226402 >=20 > Log: > Add support for IPv4 /31 prefixes, as described in RFC3021. >=20 > To run a /31 network, participating hosts MUST drop support > for directed broadcasts, and treat the first and last addresses > on subnet as unicast. The broadcast address for the prefix > should be the link local broadcast address, INADDR_BROADCAST. >=20 > Modified: > head/sys/netinet/in.c > head/sys/netinet/in.h >=20 > Modified: head/sys/netinet/in.c > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D > --- head/sys/netinet/in.c Sat Oct 15 16:28:06 2011 = (r226401) > +++ head/sys/netinet/in.c Sat Oct 15 18:41:25 2011 = (r226402) > @@ -897,8 +897,11 @@ in_ifinit(struct ifnet *ifp, struct in_i > */ > ia->ia_ifa.ifa_metric =3D ifp->if_metric; > if (ifp->if_flags & IFF_BROADCAST) { > - ia->ia_broadaddr.sin_addr.s_addr =3D > - htonl(ia->ia_subnet | ~ia->ia_subnetmask); > + if (ia->ia_subnetmask =3D=3D IN_RFC3021_MASK) > + ia->ia_broadaddr.sin_addr.s_addr =3D = INADDR_BROADCAST; > + else > + ia->ia_broadaddr.sin_addr.s_addr =3D > + htonl(ia->ia_subnet | ~ia->ia_subnetmask); > } else if (ifp->if_flags & IFF_LOOPBACK) { > ia->ia_dstaddr =3D ia->ia_addr; > flags |=3D RTF_HOST; > @@ -1230,9 +1233,11 @@ in_broadcast(struct in_addr in, struct i > if (ifa->ifa_addr->sa_family =3D=3D AF_INET && > (in.s_addr =3D=3D ia->ia_broadaddr.sin_addr.s_addr = || > /* > - * Check for old-style (host 0) broadcast. > + * Check for old-style (host 0) broadcast, but > + * taking into account that RFC 3021 obsoletes it. > */ > - t =3D=3D ia->ia_subnet) && > + (ia->ia_subnetmask !=3D IN_RFC3021_MASK && > + t =3D=3D ia->ia_subnet)) && > /* > * Check for an all one subnetmask. These > * only exist when an interface gets a secondary >=20 > Modified: head/sys/netinet/in.h > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D > --- head/sys/netinet/in.h Sat Oct 15 16:28:06 2011 = (r226401) > +++ head/sys/netinet/in.h Sat Oct 15 18:41:25 2011 = (r226402) > @@ -392,6 +392,8 @@ __END_DECLS >=20 > #define IN_LOOPBACKNET 127 /* = official! */ >=20 > +#define IN_RFC3021_MASK (u_int32_t)0xfffffffe > + > /* > * Options for use with [gs]etsockopt at the IP level. > * First word of comment is data type; bool is stored in int. >=20 That's great! Thanks! Any plans for MFC? Regards, Nikolay
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?C6289E17-0C23-4893-A454-C3601BEAC86F>