Re: [HACKERS] CIDR type and functions

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 type and functions
Date: 1998-10-09 21:51:41
Message-ID: m0zRkRp-0000exC@druid.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Thus spake Bruce Momjian
> > Here are the functions I had suggested.
> >
> > netmask('192.3.4.5/24::cidr') == 255.255.255.0
> > masklen('192.3.4.5/24::cidr') == 24
> > host('192.3.4.5/24::cidr') == 192.3.4.5
> > network('192.3.4.5/24::cidr') == 192.3.4.0

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

> > and perhaps;
> >
> > class('192.3.4.5/24::cidr') == C
> > classnet('192.3.4.5/24::cidr') == 192.3.4

I'll leave these for the moment as I'm not sure what to do with invalid
classful addresses such as 192.3.4.5/16. I'll bring it up again after
6.4 is released.

> > Can I help code up some of this stuff?
>
> Yes, we need those. Code them up, and I will add them as standard
> types.

OK, I started but I could use a small change to inet_net_ntop.c which
I think impliments something we discussed anyway. I just need to know
if this is going to affect anything else. Basically it allows for
the number of bits to be -1 which is interpreted as a host with
unspecified netmask. The changes cause all outputs to leave of
the netmask part if it is -1. I realize that I will have to change
some of the other functions in inet.c but is there anything else
that might bite me?

If there is no problem I'll resubmit this to the patches list.

*** ../src.original/./backend/utils/adt/inet_net_ntop.c Fri Oct 9 17:37:27 1998
--- ./backend/utils/adt/inet_net_ntop.c Fri Oct 9 17:39:05 1998
***************
*** 85,90 ****
--- 85,97 ----
char *t;
u_int m;
int b;
+ int print_bits = 1;
+
+ if (bits == -1)
+ {
+ bits = 32;
+ print_bits = 0;
+ }

if (bits < 0 || bits > 32)
{
***************
*** 129,137 ****
}

/* Format CIDR /width. */
! if (size < sizeof "/32")
! goto emsgsize;
! dst += SPRINTF((dst, "/%u", bits));
return (odst);

emsgsize:
--- 136,147 ----
}

/* Format CIDR /width. */
! if (print_bits)
! {
! if (size < sizeof "/32")
! goto emsgsize;
! dst += SPRINTF((dst, "/%u", bits));
! }
return (odst);

emsgsize:

--
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 Bruce Momjian 1998-10-09 21:58:31 Re: [HACKERS] PL compile warning messages
Previous Message Bruce Momjian 1998-10-09 21:41:18 Re: [HACKERS] dynamic libraries