Re: [HACKERS] cidr

From: darcy(at)druid(dot)net (D'Arcy J(dot)M(dot) Cain)
To: maillist(at)candle(dot)pha(dot)pa(dot)us (Bruce Momjian)
Cc: pgsql-hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] cidr
Date: 1998-07-24 11:50:43
Message-ID: m0yzgN1-00006FC@druid.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Thus spake Bruce Momjian
> > > 192.0.0.3:255.255.0.0 host/netmask
> > Converted internally to 192.0.0.3:/16
>
> This is a problem. Suppose you have:
>
> 192.0.0.0:255.255.255.0
>
> This is a host with netmask, while:
>
> 192.0.0.0/24
>
> is a network address. Paul?

I believe that these two representations refer to the same thing. Whether
that thing is a network or an address depends on the application. Either
the column is being used to store networks or hosts. That's what I was
getting at with my previous analogy with int types. An int could hold
ordinal numbers like IDs or it could hold quantities. We don't need
the data type to store which. The application knows and we don't store
ID codes and counts in the same column. The same with IP numbers. We
decide in any particular application whether a column is a list of hosts
or a list of networks and we then populate it.

I do like the idea of using attypmod to define the form of the type.
I assume we can use that to determine the output format, that is, use
it to effectively apply one of the functions to it. That makes for
a clean use of the type.

> > > 192.0.0.3/32:255.255.255.0 host?/netmask
> > But 192.0.0.3/24 or 192.0.0.3:255.255.255.0 gives all the information
> > that you need.
>
> See example above. You use the 3 here to know it is a host, because the
> IP address extens past the netmask, but what if they are zeros?

Technically, 192.0.0.0/24 is a valid host on 192.0.0 although most
people avoid it because some older equipment doesn't handle it very
well.

> > You mean printing netmasks? As I said, it seems to me that netmasks will
> > always be paired with a host or network but perhaps we can set up the
> > function table so that netmask on an integer type converts to a netmask
> > in the form you suggest. That would be the truly oo way to do it.
>
> Certainly we could, but it seems nice to have one type just for ip-type
> stuff.

I agree. I'm just saying that we can add the netmask function to integer
as well. That gives someone the flexibility to store it either way.
However, I don't think I am going to speak to this point again until
someone can give me a single example of a requirement for storing
netmasks independent of any hosts or networks. :-)

I just thought of another useful function.

broadcast('192.3.4.5/24::cidr') == 192.3.4.255

--
D'Arcy J.M. Cain <darcy(at){druid|vex}.net> | Democracy is three wolves
http://www.druid.net/darcy/ | and a sheep voting on
+1 416 424 2871 (DoD#0082) (eNTP) | what's for dinner.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message D'Arcy J.M. Cain 1998-07-24 11:57:36 Re: [HACKERS] cidr
Previous Message Marc Fournier 1998-07-24 11:28:38 Re: [GENERAL] Re: [HACKERS] [Fwd: SGVLLUG Oracle and Informix on Linux]