svn commit: r226402 - head/sys/netinet
Nikolay Denev
ndenev at gmail.com
Sat Oct 15 21:17:00 UTC 2011
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
>
> Log:
> Add support for IPv4 /31 prefixes, as described in RFC3021.
>
> 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.
>
> Modified:
> head/sys/netinet/in.c
> head/sys/netinet/in.h
>
> Modified: head/sys/netinet/in.c
> ==============================================================================
> --- 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 = ifp->if_metric;
> if (ifp->if_flags & IFF_BROADCAST) {
> - ia->ia_broadaddr.sin_addr.s_addr =
> - htonl(ia->ia_subnet | ~ia->ia_subnetmask);
> + if (ia->ia_subnetmask == IN_RFC3021_MASK)
> + ia->ia_broadaddr.sin_addr.s_addr = INADDR_BROADCAST;
> + else
> + ia->ia_broadaddr.sin_addr.s_addr =
> + htonl(ia->ia_subnet | ~ia->ia_subnetmask);
> } else if (ifp->if_flags & IFF_LOOPBACK) {
> ia->ia_dstaddr = ia->ia_addr;
> flags |= RTF_HOST;
> @@ -1230,9 +1233,11 @@ in_broadcast(struct in_addr in, struct i
> if (ifa->ifa_addr->sa_family == AF_INET &&
> (in.s_addr == 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 == ia->ia_subnet) &&
> + (ia->ia_subnetmask != IN_RFC3021_MASK &&
> + t == ia->ia_subnet)) &&
> /*
> * Check for an all one subnetmask. These
> * only exist when an interface gets a secondary
>
> Modified: head/sys/netinet/in.h
> ==============================================================================
> --- 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
>
> #define IN_LOOPBACKNET 127 /* official! */
>
> +#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.
>
That's great! Thanks!
Any plans for MFC?
Regards,
Nikolay
More information about the svn-src-all
mailing list