linux-man.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx.manpages@gmail.com>
To: Seth David Schoen <schoen@loyalty.org>, linux-man@vger.kernel.org
Cc: netdev@vger.kernel.org
Subject: Re: [PATCH v4 resend] ip.7: Add Special and Reserved IP Addresses section
Date: Thu, 13 Apr 2023 15:30:33 +0200	[thread overview]
Message-ID: <41f3331f-24d9-ae44-1609-1e9a610a6170@gmail.com> (raw)
In-Reply-To: <20230413012348.GA2492327@demorgan>


[-- Attachment #1.1: Type: text/plain, Size: 7452 bytes --]

Hi Seth,

On 4/13/23 03:23, Seth David Schoen wrote:
> Break out the discussion of special and reserved IPv4 addresses
> into a subsection, and briefly describe three cases in which
> Linux no longer treats addresses specially, where other systems
> do or did.
> 
> The divergences in Linux's behavior mentioned in this patch were
> introduced at
> 
> unicast 240/4 (since 2.6.25):
>   commit 1e637c74b0f84eaca02b914c0b8c6f67276e9697
>   Author: Jan Engelhardt <jengelh@computergmbh.de>
>   Date:   Mon Jan 21 03:18:08 2008 -0800
> 
> unicast 0/8 (since 5.3):
>   commit 96125bf9985a75db00496dd2bc9249b777d2b19b
>   Author: Dave Taht <dave.taht@gmail.com>
>   Date:   Sat Jun 22 10:07:34 2019 -0700
> 
> unicast subnet lowest address (since 5.14):
>   commit 58fee5fc83658aaacf60246aeab738946a9ba516
>   Merge: 77091933e453 6101ca0384e3
>   Author: David S. Miller <davem@davemloft.net>
>   Date:   Mon May 17 13:47:58 2021 -0700
> 
> Signed-off-by: Seth David Schoen <schoen@loyalty.org>
> Suggested-by: John Gilmore <gnu@toad.com>
> ---
>  man7/ip.7 | 38 +++++++++++++++++++++++++++++++++++---
>  1 file changed, 35 insertions(+), 3 deletions(-)
> 
> diff --git a/man7/ip.7 b/man7/ip.7
> index f69af1b32..94de21979 100644
> --- a/man7/ip.7
> +++ b/man7/ip.7
> @@ -237,6 +237,7 @@ In particular, this means that you need to call
>  on the number that is assigned to a port.
>  All address/port manipulation
>  functions in the standard library work in network byte order.
> +.SS Special and reserved addresses
>  .PP
>  There are several special addresses:
>  .B INADDR_LOOPBACK
> @@ -244,12 +245,43 @@ There are several special addresses:
>  always refers to the local host via the loopback device;
>  .B INADDR_ANY
>  (0.0.0.0)
> -means any address for binding;
> +means any address for socket binding;
>  .B INADDR_BROADCAST
>  (255.255.255.255)
> -means any host and has the same effect on bind as
> +has the same effect on socket binding as
>  .B INADDR_ANY
> -for historical reasons.
> +for historical reasons. A packet addressed to

Please use semantic newlines.  See man-pages(7):

   Use semantic newlines
       In the source of a manual page, new sentences should be started
       on  new  lines,  long  sentences  should be split into lines at
       clause breaks (commas, semicolons, colons, and so on), and long
       clauses should be split at phrase boundaries.  This convention,
       sometimes known as "semantic newlines", makes it easier to  see
       the  effect of patches, which often operate at the level of in‐
       dividual sentences, clauses, or phrases.

> +.B INADDR_BROADCAST
> +through a socket which has
> +.B SO_BROADCAST
> +set will be broadcast to all hosts on the local network segment, as
> +long as the link is broadcast-capable.
> +.PP
> +On any locally-attached IP subnet with a link type that supports
> +broadcasts, the highest-numbered address (e.g., the .255 address on a
> +subnet with netmask 255.255.255.0) is designated as a broadcast address.
> +This "broadcast address" cannot usefully be assigned to an interface, and
> +can only be addressed with a socket on which the
> +.B SO_BROADCAST
> +option has been set.
> +Internet standards have historically also reserved the lowest-numbered
> +address (e.g., the .0 address on a subnet with netmask 255.255.255.0)
> +for broadcast, though they call it "obsolete" for this purpose.  Since
> +Linux 5.14, it is treated as an ordinary unicast address.
> +.PP
> +Internet standards have also traditionally reserved various addresses
> +for particular uses, though Linux no longer treats some of these
> +specially. Addresses in the ranges 0.0.0.1 through 0.255.255.255 and
> +240.0.0.0 through 255.255.255.254 (0/8 and 240/4) are reserved globally.
> +Since Linux 5.3 and Linux 2.6.245, respectively, the 0/8 and 240/4
> +addresses are treated as ordinary unicast addresses. Systems that follow
> +the traditional behaviors may not interoperate with these historically
> +reserved addresses.
> +.PP
> +All addresses from 127.0.0.1 through 127.255.255.254
> +are treated as loopback addresses akin to the standardized
> +local loopback address 127.0.0.1, while addresses in 224.0.0.0 through
> +239.255.255.255 (224/4) are dedicated to multicast use.

Maybe it would be interesting to use tagged paragraphs (.TP), so that
it's reasy to see at a first glance the reserved values?  Something like:

   Special and reserved addresses
       INADDR_LOOPBACK
       127.0.0.1
                INADDR_LOOPBACK (127.0.0.1) always refers to the
                local host via the loopback device;

       INADDR_ANY
       0.0.0.0
               INADDR_ANY (0.0.0.0) means any address for socket
               binding;

       INADDR_BROADCAST
       255.255.255.255
               INADDR_BROADCAST (255.255.255.255) has the same
               effect on socket binding as INADDR_ANY for
               historical reasons.  A packet addressed to
               INADDR_BROADCAST through a socket which has
               SO_BROADCAST set will be broadcast to all hosts
               on the local network segment, as long as the link
               is broadcast‐capable.

       Highest-numbered address
       Lowest-numbered address
              On any locally‐attached IP subnet with a link  type  that
              supports  broadcasts, the highest‐numbered address (e.g.,
              the .255 address on a subnet with netmask  255.255.255.0)
              is  designated  as  a broadcast address.  This "broadcast
              address" cannot usefully be assigned to an interface, and
              can  only  be  addressed  with  a  socket  on  which  the
              SO_BROADCAST  option  has  been  set.  Internet standards
              have historically also reserved the  lowest‐numbered  ad‐
              dress  (e.g.,  the  .0  address  on a subnet with netmask
              255.255.255.0) for broadcast, though they call it  "obso‐
              lete"  for this purpose.  Since Linux 5.14, it is treated
              as an ordinary unicast address.

       Internet standards have also traditionally reserved vari‐
       ous addresses for particular uses, though Linux no longer
       treats some of these specially.

       [0.0.0.1, 0.255.255.255]
       [240.0.0.0, 255.255.255.254]
              Addresses in these ranges (0/8 and 240/4) are
              reserved globally.  Since  Linux 5.3 and Linux
              2.6.245, respectively, the 0/8 and 240/4 addresses
              are treated as ordinary unicast addresses.  Systems
              that follow the traditional behaviors may not
              interoperate with these historically reserved
              addresses.

       [127.0.0.1, 127.255.255.254]
              Addresses in this range are treated as loopback
              addresses akin to the standardized local loopback
              address 127.0.0.1.

       [224.0.0.0, 239.255.255.255]
              Addresses in this range (224/4) are dedicated
              to multicast use.

Cheers,
Alex


>  .SS Socket options
>  IP supports some protocol-specific socket options that can be set with
>  .BR setsockopt (2)

-- 
<http://www.alejandro-colomar.es/>
GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

      reply	other threads:[~2023-04-13 13:31 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-13  1:23 [PATCH v4 resend] ip.7: Add Special and Reserved IP Addresses section Seth David Schoen
2023-04-13 13:30 ` Alejandro Colomar [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=41f3331f-24d9-ae44-1609-1e9a610a6170@gmail.com \
    --to=alx.manpages@gmail.com \
    --cc=linux-man@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=schoen@loyalty.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).