Re: [HACKERS] Re: inet/cidr/bind

Поиск
Список
Период
Сортировка
От Paul A Vixie
Тема Re: [HACKERS] Re: inet/cidr/bind
Дата
Msg-id 199810200621.XAA07569@bb.rc.vix.com
обсуждение исходный текст
Ответ на Re: [HACKERS] Re: inet/cidr/bind  (darcy@druid.net (D'Arcy J.M. Cain))
Ответы Re: [HACKERS] Re: inet/cidr/bind
Re: [HACKERS] Re: inet/cidr/bind
Список pgsql-hackers
> > no.  the last three inputs are not valid where a host address is expected.
> 
> Can you amplify?  Is it correct as far as cidr goes?  If so, I have no
> problem making it an error for the inet type.  My thinking was based
> on the earlier concept of having one type and accepting networks in it.
> If we have the separate cidr type then I guess inet should always require
> 4 octets (until ipv6 anyway) and cidr should be used for networks.

Networks do not have to have all four octets specified, only enough octets
to cover the prefix length that's given.  Networks should have default
netmasks based on classful assumptions.  Networks never have any bits beyond
their prefix length, which is why the question of "nonzero host part" does
not even really arise.  There is no "host part" in a network.  And in my
concept of them, they are variably sized.

> How about something like 192.63.0.0/16?  Should that be an error under the
> inet type since it is the network?  I am thinking not since technically
> 192.63.0.0 is a valid host under 192.63/16 although it is generally
> avoided since there is still software that assumes that it is the
> network or even the broadcast.

The all-zeros host address is available and value, but as you say, deprecated.

> > so shall i test the inet_cidr_ functions and punt them on in?
> 
> Ok, before I have a reality shift, the inet_cidr_ functions are simply
> the original inet_net_ functions renamed, right?

No.  The inet_net_ functions describe CIDRized networks.  The inet_cidr_
functions, which I've written but not yet committed to BIND 8.next, are
new.  I am absolutely loathe to submit them at this point, since the act
of bridging host addresses and their prefix lengths makes no sense to me.

Here's a cisco showing a CIDR block (mine, as it turns out):
palo-alto>sho ip rou 204.152.184.0Routing entry for 204.152.184.0/21, supernet  Known via "bgp 1280", distance 20,
metric0  Tag 3557, type external  Last update from 198.32.176.3 2w0d ago  Routing Descriptor Blocks:  * 198.32.176.3,
from198.32.176.3, 2w0d ago      Route metric is 0, traffic share count is 1      AS Hops 1
 

Here's a BSD/OS box showing a bunch of CIDR blocks (inside my network):
# netstat -rnDestination         Gateway            Flags    Refs      Use Interfacedefault             204.152.184.4
  UG          0 103154609  de1127                 127.0.0.1          UR          0        0  lo0127.0.0.1
127.0.0.1         UH          0    59294  lo0192.5.5.1           204.152.184.19     UGH         0  1160628
de0192.5.5.2          204.152.184.19     UGH         0   507879  de0192.5.5.88/29       204.152.184.19     UG
0       4  de0192.5.5.96/27       204.152.184.19     UG          0    35150  de0192.5.5.124/30      204.152.184.19
UG         0    12361  de0192.5.5.241         204.152.184.4      UGH         0    55164  de1198.32.176
204.152.184.1     UG          0    15250  de1198.32.176.6        204.152.184.1      UGHc        0       76
de1204.152.184/28     link#2             UC          0        0  de1204.152.184.1       0:c0:95:e0:1e:1c   UHLc
4     493  de1204.152.184.3       0:c0:95:e0:2e:8c   UHLc        0        1  lo0204.152.184.4       0:c0:95:e0:1e:24
UHLc       4     7125  de1204.152.184.5       0:c0:95:e0:26:80   UHLc        1        0  de1204.152.184.16/29   link#1
          UC          0        0  de0^C
 

The things which are "hosts" have four octets, are of fixed length, and do not
have netmasks.  The things which are "networks" have some other number of
octets, are variably sized, and do have netmasks (actually, prefix lengths).

At the risk of reopening a discussion which ought to have been closed a long
while back, I suggest that polymorphism is bad and that an INET type which is
built out of BIND's inet_net_ functions is perfectly capable of holding a
host address (since /32 is the default if all four octets are specified),
and that we run absolutely zero risk if we call the type INET, add indexing
linkages for it, and get outta town.

There is an argument for a sugartype called IHOST which generates a /32 INET
but uses inet_pton() and inet_ntop() for parsing/printing so as to avoid the
"/%d" that nobody needs to see and also to ensure that only fully formed host
addresses can be input.

There is an argument for another, completely separate type, called MACADDR,
which is an IEEE 48-bit address (suitable for ethernet or fddi arp tables).

There is no argument I know of for a type which combines the host address and
the netmask of its interface.  I've got applications in mind for each of the
above three types -- has anybody got a specific application they want to build
which requires a CIDR-like host address which is of fixed size, has the
ability to preserve the "unset"-ness of the prefix length from input through
storage to output, and also has the ability to preserve a particular prefix
length from input through storage to output?

I'll use INET in a registry database like IANA's or InterNIC's.

I'll use INET, IHOST and MACADDR in a distributed DHCP database.

What would anybody use a mixture of INET and IHOST for, that they could not
do just as easily with a pair of IHOST's?

Forget the number theory for a moment and let's talk about applications which
are uniquely enabled by any new type we consider.  Once that's done, we can
talk about avoiding unfortunate overlaps.

I've got the code done for supporting hosts-with-prefixes, but I don't like it
and I would not use it in any PgSQL application I can imagine.  Help?


В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Thomas G. Lockhart"
Дата:
Сообщение: Re: [HACKERS] Postgres - Y2K Compliant....Yes or No
Следующее
От: Paul A Vixie
Дата:
Сообщение: Re: [HACKERS] Re: inet/cidr/bind