Skip site navigation (1)Skip section navigation (2)
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>