summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/in_getifa.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/in_getifa.9')
-rw-r--r--static/netbsd/man9/in_getifa.9244
1 files changed, 244 insertions, 0 deletions
diff --git a/static/netbsd/man9/in_getifa.9 b/static/netbsd/man9/in_getifa.9
new file mode 100644
index 00000000..477e4b02
--- /dev/null
+++ b/static/netbsd/man9/in_getifa.9
@@ -0,0 +1,244 @@
+.\" $NetBSD: in_getifa.9,v 1.11 2020/01/21 07:53:51 wiz Exp $
+.\"
+.\" Copyright (c) 2006 David Young. All rights reserved.
+.\"
+.\" This code was written by David Young.
+.\"
+.\" Redistribution and use in source and binary forms, with or
+.\" without modification, are permitted provided that the following
+.\" conditions are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above
+.\" copyright notice, this list of conditions and the following
+.\" disclaimer in the documentation and/or other materials provided
+.\" with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY
+.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+.\" THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+.\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID
+.\" YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+.\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+.\" TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+.\" OF SUCH DAMAGE.
+.\"
+.Dd February 22, 2007
+.Dt IN_GETIFA 9
+.Os
+.Sh NAME
+.Nm in_getifa
+.Nd Look up the IPv4 source address best matching an IPv4 destination
+.Sh SYNOPSIS
+.Cd options IPSELSRC
+.In netinet/in_selsrc.h
+.Ft struct ifaddr *
+.Fn in_getifa "struct ifaddr *ifa" "const struct sockaddr *dst0"
+.Sh DESCRIPTION
+.Nm
+enforces the IPv4 source-address selection policy.
+Add the source-address selection policy mechanism to your kernel with
+.Cd options IPSELSRC .
+.Cd options IPSELSRC
+lets the operator set the policy for choosing the source address
+of any socket bound to the
+.Dq wildcard
+address,
+.Dv INADDR_ANY .
+Note that the policy is applied
+.Em after
+the kernel makes its forwarding decision, thereby choosing the
+output interface;
+in other words, this mechanism does not affect whether or not
+.Nx
+is a
+.Dq strong ES .
+.Pp
+An operator affects the source-address selection using
+.Xr sysctl 8
+and
+.Xr ifconfig 8 .
+Operators set policies with
+.Xr sysctl 8 .
+Some policies consider the
+.Dq preference number
+of an address.
+An operator may set preference numbers for each address with
+.Xr ifconfig 8 .
+.Pp
+A source-address policy is a priority-ordered list of source-address
+ranking functions.
+A ranking function maps its arguments,
+.Po
+.Em source address ,
+.Em source index ,
+.Em source preference ,
+.Em destination address
+.Pc ,
+to integers.
+The
+.Em source index
+is the position of
+.Em source address
+in the interface address list; the index of the first address is 0.
+The
+.Em source preference
+is the preference number the operator assigned
+to
+.Em source address .
+The
+.Em destination address
+is the socket peer / packet destination.
+.Pp
+Presently, there are four ranking functions to choose from:
+.Bl -tag -width "common-prefix-len"
+.It index
+ranks by
+.Em source index ;
+lower indices are ranked more highly.
+.It preference
+ranks by
+.Em source preference ;
+higher preference numbers are ranked more highly.
+.It common-prefix-len
+ranks each
+.Em source address
+by the length of the longest prefix it has in common with
+.Em destination address ;
+longer common prefixes rank more highly.
+.It same-category
+determines the "categories" of
+.Em source
+and
+.Em destination address .
+A category is one of
+.Em private ,
+.Em link-local ,
+or
+.Em other .
+If the categories exactly match, same-category assigns a rank of 2.
+Some sources are ranked 1 by category:
+a
+.Em link-local
+source with a
+.Em private
+destination, a
+.Em private
+source with a
+.Em link-local
+destination, and a
+.Em private
+source with an
+.Em other
+destination rank 1.
+All other sources rank 0.
+.Pp
+Categories are defined as follows.
+.Bl -tag -width "link-local"
+.It private
+RFC1918 networks, 192.168/16, 172.16/12, and 10/8
+.It link-local
+169.254/16, 224/24
+.It other
+all other networks---i.e., not private, not link-local
+.El
+.El
+.Pp
+To apply a policy, the kernel applies all ranking functions in the policy
+to every source address, producing a vector of ranks for each source.
+The kernel sorts the sources in descending, lexicographical order by their
+rank-vector, and chooses the highest-ranking (first) source.
+The kernel breaks ties by choosing the source with the least
+.Em source index .
+.Pp
+The operator may set a policy on individual interfaces.
+The operator may also set a global policy that applies to all
+interfaces whose policy they do not set individually.
+.Pp
+Here is the sysctl tree for the policy at system startup:
+.Bd -literal -offset indent
+net.inet.ip.selectsrc.default = index
+net.inet.ip.interfaces.ath0.selectsrc =
+net.inet.ip.interfaces.sip0.selectsrc =
+net.inet.ip.interfaces.sip1.selectsrc =
+net.inet.ip.interfaces.lo0.selectsrc =
+net.inet.ip.interfaces.pflog0.selectsrc =
+.Ed
+.Pp
+The policy on every interface is the
+.Dq empty
+policy, so the default policy applies.
+The default policy,
+.Em index ,
+is the
+.Dq historical
+policy in
+.Nx .
+.Pp
+The operator may override the default policy on ath0,
+.Bd -literal -offset indent
+ # sysctl -w net.inet.ip.interfaces.ath0.selectsrc=same-category,common-prefix-len,preference
+.Ed
+.Pp
+yielding this policy:
+.Bd -literal -offset indent
+net.inet.ip.selectsrc.default = index
+net.inet.ip.interfaces.ath0.selectsrc = same-category,common-prefix-len,preference
+.Ed
+.Pp
+The operator may set a new default,
+.Bd -literal -offset indent
+# sysctl -w net.inet.ip.selectsrc.debug=\
+> same-category,common-prefix-len,preference
+# sysctl -w net.inet.ip.interfaces.ath0.selectsrc=
+.Ed
+.Pp
+yielding this policy:
+.Bd -literal -offset indent
+net.inet.ip.selectsrc.default = same-category,common-prefix-len,preference
+net.inet.ip.interfaces.ath0.selectsrc =
+.Ed
+.Pp
+In a number of applications, the policy above will usually pick
+suitable source addresses if ath0 is configured in this way:
+.Bd -literal -offset indent
+# ifconfig ath0 inet 64.198.255.1/24
+# ifconfig ath0 inet 10.0.0.1/24
+# ifconfig ath0 inet 169.254.1.1/24
+# ifconfig ath0 inet 192.168.49.1/24 preference 5
+# ifconfig ath0 inet 192.168.37.1/24 preference 9
+.Ed
+A sysctl, net.inet.ip.selectsrc.debug, turns on and off debug messages
+concerned with source selection.
+You may set it to 0 (no messages) or 1.
+.Sh SEE ALSO
+.Xr ifconfig 8 ,
+.Xr sysctl 8
+.Sh STANDARDS
+The family of IPv6 source-address selection policies defined by
+.Li RFC3484
+resembles the family of IPv4 policies that
+.Nm
+enforces.
+.Sh AUTHORS
+.An David Young Aq Mt dyoung@NetBSD.org
+.Sh BUGS
+With
+.Cd options IPSELSRC ,
+a new interface
+.Xr ioctl 2 ,
+.Dv SIOCSIFADDRPREF ,
+was introduced.
+It ought to be documented in
+.Xr inet 4 .
+Also,
+.Xr options 4
+ought to cross-reference this manual page.
+.Pp
+This work should be used to set IPv6 source-address selection
+policies, especially the family of policies defined by
+.Li RFC3484 .