提交 61784c54 编写于 作者: T Tom Lane

Change default output formatting for CIDR to be unabbreviated, per

recommendation from Paul Vixie.  Add a new abbrev() function to produce
abbreviated format as text.  No forced initdb, but new function is not
available unless you do an initdb or add the pg_proc row manually.
上级 13b78a24
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.44 2000/12/14 22:30:56 petere Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.45 2000/12/22 18:00:24 tgl Exp $
--> -->
<chapter id="datatype"> <chapter id="datatype">
...@@ -1818,7 +1818,7 @@ January 8 04:05:06 1999 PST ...@@ -1818,7 +1818,7 @@ January 8 04:05:06 1999 PST
class="parameter">x.x.x.x</replaceable> is an IP address and class="parameter">x.x.x.x</replaceable> is an IP address and
<replaceable class="parameter">y</replaceable> is the number of <replaceable class="parameter">y</replaceable> is the number of
bits in the netmask. If the <replaceable bits in the netmask. If the <replaceable
class="parameter">y</replaceable> part is left off, then the class="parameter">/y</replaceable> part is left off, then the
netmask is 32, and the value represents just a single host. netmask is 32, and the value represents just a single host.
On display, the <replaceable class="parameter">/y</replaceable> On display, the <replaceable class="parameter">/y</replaceable>
portion is suppressed if the netmask is 32. portion is suppressed if the netmask is 32.
...@@ -1837,7 +1837,7 @@ January 8 04:05:06 1999 PST ...@@ -1837,7 +1837,7 @@ January 8 04:05:06 1999 PST
class="parameter">x.x.x.x/y</> where <replaceable class="parameter">x.x.x.x/y</> where <replaceable
class="parameter">x.x.x.x</> is the network and <replaceable class="parameter">x.x.x.x</> is the network and <replaceable
class="parameter">y</> is the number of bits in the netmask. If class="parameter">y</> is the number of bits in the netmask. If
<replaceable class="parameter">y</> omitted, it is calculated <replaceable class="parameter">y</> is omitted, it is calculated
using assumptions from the older classful numbering system, except using assumptions from the older classful numbering system, except
that it will be at least large enough to include all of the octets that it will be at least large enough to include all of the octets
written in the input. written in the input.
...@@ -1848,56 +1848,68 @@ January 8 04:05:06 1999 PST ...@@ -1848,56 +1848,68 @@ January 8 04:05:06 1999 PST
<table tocentry="1"> <table tocentry="1">
<title><type>cidr</> Type Input Examples</title> <title><type>cidr</> Type Input Examples</title>
<tgroup cols="2"> <tgroup cols="3">
<thead> <thead>
<row> <row>
<entry>CIDR Input</entry> <entry>CIDR Input</entry>
<entry>CIDR Displayed</entry> <entry>CIDR Displayed</entry>
<entry>abbrev(CIDR)</entry>
</row> </row>
</thead> </thead>
<tbody> <tbody>
<row> <row>
<entry>192.168.100.128/25</entry> <entry>192.168.100.128/25</entry>
<entry>192.168.100.128/25</entry> <entry>192.168.100.128/25</entry>
<entry>192.168.100.128/25</entry>
</row> </row>
<row> <row>
<entry>192.168/24</entry> <entry>192.168/24</entry>
<entry>192.168.0.0/24</entry>
<entry>192.168.0/24</entry> <entry>192.168.0/24</entry>
</row> </row>
<row> <row>
<entry>192.168/25</entry> <entry>192.168/25</entry>
<entry>192.168.0.0/25</entry> <entry>192.168.0.0/25</entry>
<entry>192.168.0.0/25</entry>
</row> </row>
<row> <row>
<entry>192.168.1</entry> <entry>192.168.1</entry>
<entry>192.168.1.0/24</entry>
<entry>192.168.1/24</entry> <entry>192.168.1/24</entry>
</row> </row>
<row> <row>
<entry>192.168</entry> <entry>192.168</entry>
<entry>192.168.0.0/24</entry>
<entry>192.168.0/24</entry> <entry>192.168.0/24</entry>
</row> </row>
<row> <row>
<entry>128.1</entry> <entry>128.1</entry>
<entry>128.1.0.0/16</entry>
<entry>128.1/16</entry> <entry>128.1/16</entry>
</row> </row>
<row> <row>
<entry>128</entry> <entry>128</entry>
<entry>128.0.0.0/16</entry>
<entry>128.0/16</entry> <entry>128.0/16</entry>
</row> </row>
<row> <row>
<entry>128.1.2</entry> <entry>128.1.2</entry>
<entry>128.1.2.0/24</entry>
<entry>128.1.2/24</entry> <entry>128.1.2/24</entry>
</row> </row>
<row> <row>
<entry>10.1.2</entry> <entry>10.1.2</entry>
<entry>10.1.2.0/24</entry>
<entry>10.1.2/24</entry> <entry>10.1.2/24</entry>
</row> </row>
<row> <row>
<entry>10.1</entry> <entry>10.1</entry>
<entry>10.1.0.0/16</entry>
<entry>10.1/16</entry> <entry>10.1/16</entry>
</row> </row>
<row> <row>
<entry>10</entry> <entry>10</entry>
<entry>10.0.0.0/8</entry>
<entry>10/8</entry> <entry>10/8</entry>
</row> </row>
</tbody> </tbody>
...@@ -1917,8 +1929,8 @@ January 8 04:05:06 1999 PST ...@@ -1917,8 +1929,8 @@ January 8 04:05:06 1999 PST
<tip> <tip>
<para> <para>
If you do not like the output format for <type>inet</type> or If you do not like the output format for <type>inet</type> or
<type>cidr</type> values, try the <function>host</>() and <type>cidr</type> values, try the <function>host</>(),
<function>text</>() functions. <function>text</>(), and <function>abbrev</>() functions.
</para> </para>
</tip> </tip>
</para> </para>
......
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.45 2000/12/19 17:35:46 petere Exp $ --> <!-- $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.46 2000/12/22 18:00:24 tgl Exp $ -->
<chapter id="functions"> <chapter id="functions">
<title>Functions and Operators</title> <title>Functions and Operators</title>
...@@ -2432,7 +2432,7 @@ Not defined by this name. Implements the intersection operator '#' ...@@ -2432,7 +2432,7 @@ Not defined by this name. Implements the intersection operator '#'
<entry>cidr</entry> <entry>cidr</entry>
<entry>extract network part of address</entry> <entry>extract network part of address</entry>
<entry>network('192.168.1.5/24')</entry> <entry>network('192.168.1.5/24')</entry>
<entry>192.168.1/24</entry> <entry>192.168.1.0/24</entry>
</row> </row>
<row> <row>
<entry>text(inet)</entry> <entry>text(inet)</entry>
...@@ -2441,15 +2441,22 @@ Not defined by this name. Implements the intersection operator '#' ...@@ -2441,15 +2441,22 @@ Not defined by this name. Implements the intersection operator '#'
<entry>text(inet '192.168.1.5')</entry> <entry>text(inet '192.168.1.5')</entry>
<entry>192.168.1.5/32</entry> <entry>192.168.1.5/32</entry>
</row> </row>
<row>
<entry>abbrev(inet)</entry>
<entry>text</entry>
<entry>extract abbreviated display as text</entry>
<entry>abbrev(cidr '10.1.0.0/16')</entry>
<entry>10.1/16</entry>
</row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table>
<para> <para>
All of the functions for <type>inet</type> can be applied to All of the functions for <type>inet</type> can be applied to
<type>cidr</type> values as well. The <function>host</>() and <type>cidr</type> values as well. The <function>host</>(),
<function>text</>() functions are primarily intended to offer <function>text</>(), and <function>abbrev</>() functions are primarily
alternative display formats. intended to offer alternative display formats.
</para> </para>
<para> <para>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* is for IP V4 CIDR notation, but prepared for V6: just * is for IP V4 CIDR notation, but prepared for V6: just
* add the necessary bits where the comments indicate. * add the necessary bits where the comments indicate.
* *
* $Header: /cvsroot/pgsql/src/backend/utils/adt/network.c,v 1.27 2000/11/25 21:30:54 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/adt/network.c,v 1.28 2000/12/22 18:00:20 tgl Exp $
* *
* Jon Postel RIP 16 Oct 1998 * Jon Postel RIP 16 Oct 1998
*/ */
...@@ -111,19 +111,24 @@ inet_out(PG_FUNCTION_ARGS) ...@@ -111,19 +111,24 @@ inet_out(PG_FUNCTION_ARGS)
inet *src = PG_GETARG_INET_P(0); inet *src = PG_GETARG_INET_P(0);
char tmp[sizeof("255.255.255.255/32")]; char tmp[sizeof("255.255.255.255/32")];
char *dst; char *dst;
int len;
if (ip_family(src) == AF_INET) if (ip_family(src) == AF_INET)
{ {
/* It's an IP V4 address: */ /* It's an IP V4 address: */
if (ip_type(src)) /* Use inet style for both inet and cidr, since we don't want
dst = inet_cidr_ntop(AF_INET, &ip_v4addr(src), ip_bits(src), * abbreviated CIDR style here.
tmp, sizeof(tmp)); */
else dst = inet_net_ntop(AF_INET, &ip_v4addr(src), ip_bits(src),
dst = inet_net_ntop(AF_INET, &ip_v4addr(src), ip_bits(src), tmp, sizeof(tmp));
tmp, sizeof(tmp));
if (dst == NULL) if (dst == NULL)
elog(ERROR, "unable to print address (%s)", strerror(errno)); elog(ERROR, "unable to print address (%s)", strerror(errno));
/* For CIDR, add /n if not present */
if (ip_type(src) && strchr(tmp, '/') == NULL)
{
len = strlen(tmp);
snprintf(tmp + len, sizeof(tmp) - len, "/%u", ip_bits(src));
}
} }
else else
/* Go for an IPV6 address here, before faulting out: */ /* Go for an IPV6 address here, before faulting out: */
...@@ -375,17 +380,50 @@ network_show(PG_FUNCTION_ARGS) ...@@ -375,17 +380,50 @@ network_show(PG_FUNCTION_ARGS)
/* force display of 32 bits, regardless of masklen... */ /* force display of 32 bits, regardless of masklen... */
if (inet_net_ntop(AF_INET, &ip_v4addr(ip), 32, tmp, sizeof(tmp)) == NULL) if (inet_net_ntop(AF_INET, &ip_v4addr(ip), 32, tmp, sizeof(tmp)) == NULL)
elog(ERROR, "unable to print host (%s)", strerror(errno)); elog(ERROR, "unable to print host (%s)", strerror(errno));
/* Add /n if not present (which it won't be) */
if (strchr(tmp, '/') == NULL)
{
len = strlen(tmp);
snprintf(tmp + len, sizeof(tmp) - len, "/%u", ip_bits(ip));
}
} }
else else
/* Go for an IPV6 address here, before faulting out: */ /* Go for an IPV6 address here, before faulting out: */
elog(ERROR, "unknown address family (%d)", ip_family(ip)); elog(ERROR, "unknown address family (%d)", ip_family(ip));
/* Add /n if not present */ /* Return string as a text datum */
if (strchr(tmp, '/') == NULL) len = strlen(tmp);
ret = (text *) palloc(len + VARHDRSZ);
VARATT_SIZEP(ret) = len + VARHDRSZ;
memcpy(VARDATA(ret), tmp, len);
PG_RETURN_TEXT_P(ret);
}
Datum
network_abbrev(PG_FUNCTION_ARGS)
{
inet *ip = PG_GETARG_INET_P(0);
text *ret;
char *dst;
int len;
char tmp[sizeof("255.255.255.255/32")];
if (ip_family(ip) == AF_INET)
{ {
len = strlen(tmp); /* It's an IP V4 address: */
snprintf(tmp + len, sizeof(tmp) - len, "/%u", ip_bits(ip)); if (ip_type(ip))
dst = inet_cidr_ntop(AF_INET, &ip_v4addr(ip), ip_bits(ip),
tmp, sizeof(tmp));
else
dst = inet_net_ntop(AF_INET, &ip_v4addr(ip), ip_bits(ip),
tmp, sizeof(tmp));
if (dst == NULL)
elog(ERROR, "unable to print address (%s)", strerror(errno));
} }
else
/* Go for an IPV6 address here, before faulting out: */
elog(ERROR, "unknown address family (%d)", ip_family(ip));
/* Return string as a text datum */ /* Return string as a text datum */
len = strlen(tmp); len = strlen(tmp);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: pg_proc.h,v 1.180 2000/12/21 20:48:16 petere Exp $ * $Id: pg_proc.h,v 1.181 2000/12/22 18:00:17 tgl Exp $
* *
* NOTES * NOTES
* The script catalog/genbki.sh reads this file and generates .bki * The script catalog/genbki.sh reads this file and generates .bki
...@@ -2294,6 +2294,8 @@ DATA(insert OID = 930 ( network_supeq PGUID 12 f t t t 2 f 16 "869 869" 100 0 ...@@ -2294,6 +2294,8 @@ DATA(insert OID = 930 ( network_supeq PGUID 12 f t t t 2 f 16 "869 869" 100 0
DESCR("is-supernet-or-equal"); DESCR("is-supernet-or-equal");
/* inet/cidr functions */ /* inet/cidr functions */
DATA(insert OID = 605 ( abbrev PGUID 12 f t t t 1 f 25 "869" 100 0 0 100 network_abbrev - ));
DESCR("abbreviated display of inet/cidr value");
DATA(insert OID = 683 ( network PGUID 12 f t t t 1 f 650 "869" 100 0 0 100 network_network - )); DATA(insert OID = 683 ( network PGUID 12 f t t t 1 f 650 "869" 100 0 0 100 network_network - ));
DESCR("network part of address"); DESCR("network part of address");
DATA(insert OID = 696 ( netmask PGUID 12 f t t t 1 f 869 "869" 100 0 0 100 network_netmask - )); DATA(insert OID = 696 ( netmask PGUID 12 f t t t 1 f 869 "869" 100 0 0 100 network_netmask - ));
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: builtins.h,v 1.144 2000/12/08 23:57:00 tgl Exp $ * $Id: builtins.h,v 1.145 2000/12/22 18:00:18 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -508,6 +508,7 @@ extern Datum network_masklen(PG_FUNCTION_ARGS); ...@@ -508,6 +508,7 @@ extern Datum network_masklen(PG_FUNCTION_ARGS);
extern Datum network_broadcast(PG_FUNCTION_ARGS); extern Datum network_broadcast(PG_FUNCTION_ARGS);
extern Datum network_host(PG_FUNCTION_ARGS); extern Datum network_host(PG_FUNCTION_ARGS);
extern Datum network_show(PG_FUNCTION_ARGS); extern Datum network_show(PG_FUNCTION_ARGS);
extern Datum network_abbrev(PG_FUNCTION_ARGS);
/* mac.c */ /* mac.c */
extern Datum macaddr_in(PG_FUNCTION_ARGS); extern Datum macaddr_in(PG_FUNCTION_ARGS);
......
...@@ -19,18 +19,18 @@ INSERT INTO INET_TBL (c, i) VALUES ('10', '9.1.2.3/8'); ...@@ -19,18 +19,18 @@ INSERT INTO INET_TBL (c, i) VALUES ('10', '9.1.2.3/8');
INSERT INTO INET_TBL (c, i) VALUES ('192.168.1.2/24', '192.168.1.226'); INSERT INTO INET_TBL (c, i) VALUES ('192.168.1.2/24', '192.168.1.226');
ERROR: invalid CIDR value '192.168.1.2/24': has bits set to right of mask ERROR: invalid CIDR value '192.168.1.2/24': has bits set to right of mask
SELECT '' AS ten, c AS cidr, i AS inet FROM INET_TBL; SELECT '' AS ten, c AS cidr, i AS inet FROM INET_TBL;
ten | cidr | inet ten | cidr | inet
-----+--------------+------------------ -----+----------------+------------------
| 192.168.1/24 | 192.168.1.226/24 | 192.168.1.0/24 | 192.168.1.226/24
| 192.168.1/24 | 192.168.1.226 | 192.168.1.0/24 | 192.168.1.226
| 10/8 | 10.1.2.3/8 | 10.0.0.0/8 | 10.1.2.3/8
| 10.0.0.0/32 | 10.1.2.3/8 | 10.0.0.0/32 | 10.1.2.3/8
| 10.1.2.3/32 | 10.1.2.3 | 10.1.2.3/32 | 10.1.2.3
| 10.1.2/24 | 10.1.2.3/24 | 10.1.2.0/24 | 10.1.2.3/24
| 10.1/16 | 10.1.2.3/16 | 10.1.0.0/16 | 10.1.2.3/16
| 10/8 | 10.1.2.3/8 | 10.0.0.0/8 | 10.1.2.3/8
| 10/8 | 11.1.2.3/8 | 10.0.0.0/8 | 11.1.2.3/8
| 10/8 | 9.1.2.3/8 | 10.0.0.0/8 | 9.1.2.3/8
(10 rows) (10 rows)
-- now test some support functions -- now test some support functions
...@@ -51,61 +51,61 @@ SELECT '' AS ten, i AS inet, host(i), text(i) FROM INET_TBL; ...@@ -51,61 +51,61 @@ SELECT '' AS ten, i AS inet, host(i), text(i) FROM INET_TBL;
SELECT '' AS ten, c AS cidr, broadcast(c), SELECT '' AS ten, c AS cidr, broadcast(c),
i AS inet, broadcast(i) FROM INET_TBL; i AS inet, broadcast(i) FROM INET_TBL;
ten | cidr | broadcast | inet | broadcast ten | cidr | broadcast | inet | broadcast
-----+--------------+------------------+------------------+------------------ -----+----------------+------------------+------------------+------------------
| 192.168.1/24 | 192.168.1.255/24 | 192.168.1.226/24 | 192.168.1.255/24 | 192.168.1.0/24 | 192.168.1.255/24 | 192.168.1.226/24 | 192.168.1.255/24
| 192.168.1/24 | 192.168.1.255/24 | 192.168.1.226 | 192.168.1.226 | 192.168.1.0/24 | 192.168.1.255/24 | 192.168.1.226 | 192.168.1.226
| 10/8 | 10.255.255.255/8 | 10.1.2.3/8 | 10.255.255.255/8 | 10.0.0.0/8 | 10.255.255.255/8 | 10.1.2.3/8 | 10.255.255.255/8
| 10.0.0.0/32 | 10.0.0.0 | 10.1.2.3/8 | 10.255.255.255/8 | 10.0.0.0/32 | 10.0.0.0 | 10.1.2.3/8 | 10.255.255.255/8
| 10.1.2.3/32 | 10.1.2.3 | 10.1.2.3 | 10.1.2.3 | 10.1.2.3/32 | 10.1.2.3 | 10.1.2.3 | 10.1.2.3
| 10.1.2/24 | 10.1.2.255/24 | 10.1.2.3/24 | 10.1.2.255/24 | 10.1.2.0/24 | 10.1.2.255/24 | 10.1.2.3/24 | 10.1.2.255/24
| 10.1/16 | 10.1.255.255/16 | 10.1.2.3/16 | 10.1.255.255/16 | 10.1.0.0/16 | 10.1.255.255/16 | 10.1.2.3/16 | 10.1.255.255/16
| 10/8 | 10.255.255.255/8 | 10.1.2.3/8 | 10.255.255.255/8 | 10.0.0.0/8 | 10.255.255.255/8 | 10.1.2.3/8 | 10.255.255.255/8
| 10/8 | 10.255.255.255/8 | 11.1.2.3/8 | 11.255.255.255/8 | 10.0.0.0/8 | 10.255.255.255/8 | 11.1.2.3/8 | 11.255.255.255/8
| 10/8 | 10.255.255.255/8 | 9.1.2.3/8 | 9.255.255.255/8 | 10.0.0.0/8 | 10.255.255.255/8 | 9.1.2.3/8 | 9.255.255.255/8
(10 rows) (10 rows)
SELECT '' AS ten, c AS cidr, network(c) AS "network(cidr)", SELECT '' AS ten, c AS cidr, network(c) AS "network(cidr)",
i AS inet, network(i) AS "network(inet)" FROM INET_TBL; i AS inet, network(i) AS "network(inet)" FROM INET_TBL;
ten | cidr | network(cidr) | inet | network(inet) ten | cidr | network(cidr) | inet | network(inet)
-----+--------------+---------------+------------------+------------------ -----+----------------+----------------+------------------+------------------
| 192.168.1/24 | 192.168.1/24 | 192.168.1.226/24 | 192.168.1/24 | 192.168.1.0/24 | 192.168.1.0/24 | 192.168.1.226/24 | 192.168.1.0/24
| 192.168.1/24 | 192.168.1/24 | 192.168.1.226 | 192.168.1.226/32 | 192.168.1.0/24 | 192.168.1.0/24 | 192.168.1.226 | 192.168.1.226/32
| 10/8 | 10/8 | 10.1.2.3/8 | 10/8 | 10.0.0.0/8 | 10.0.0.0/8 | 10.1.2.3/8 | 10.0.0.0/8
| 10.0.0.0/32 | 10.0.0.0/32 | 10.1.2.3/8 | 10/8 | 10.0.0.0/32 | 10.0.0.0/32 | 10.1.2.3/8 | 10.0.0.0/8
| 10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3 | 10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3 | 10.1.2.3/32
| 10.1.2/24 | 10.1.2/24 | 10.1.2.3/24 | 10.1.2/24 | 10.1.2.0/24 | 10.1.2.0/24 | 10.1.2.3/24 | 10.1.2.0/24
| 10.1/16 | 10.1/16 | 10.1.2.3/16 | 10.1/16 | 10.1.0.0/16 | 10.1.0.0/16 | 10.1.2.3/16 | 10.1.0.0/16
| 10/8 | 10/8 | 10.1.2.3/8 | 10/8 | 10.0.0.0/8 | 10.0.0.0/8 | 10.1.2.3/8 | 10.0.0.0/8
| 10/8 | 10/8 | 11.1.2.3/8 | 11/8 | 10.0.0.0/8 | 10.0.0.0/8 | 11.1.2.3/8 | 11.0.0.0/8
| 10/8 | 10/8 | 9.1.2.3/8 | 9/8 | 10.0.0.0/8 | 10.0.0.0/8 | 9.1.2.3/8 | 9.0.0.0/8
(10 rows) (10 rows)
SELECT '' AS ten, c AS cidr, masklen(c) AS "masklen(cidr)", SELECT '' AS ten, c AS cidr, masklen(c) AS "masklen(cidr)",
i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL; i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL;
ten | cidr | masklen(cidr) | inet | masklen(inet) ten | cidr | masklen(cidr) | inet | masklen(inet)
-----+--------------+---------------+------------------+--------------- -----+----------------+---------------+------------------+---------------
| 192.168.1/24 | 24 | 192.168.1.226/24 | 24 | 192.168.1.0/24 | 24 | 192.168.1.226/24 | 24
| 192.168.1/24 | 24 | 192.168.1.226 | 32 | 192.168.1.0/24 | 24 | 192.168.1.226 | 32
| 10/8 | 8 | 10.1.2.3/8 | 8 | 10.0.0.0/8 | 8 | 10.1.2.3/8 | 8
| 10.0.0.0/32 | 32 | 10.1.2.3/8 | 8 | 10.0.0.0/32 | 32 | 10.1.2.3/8 | 8
| 10.1.2.3/32 | 32 | 10.1.2.3 | 32 | 10.1.2.3/32 | 32 | 10.1.2.3 | 32
| 10.1.2/24 | 24 | 10.1.2.3/24 | 24 | 10.1.2.0/24 | 24 | 10.1.2.3/24 | 24
| 10.1/16 | 16 | 10.1.2.3/16 | 16 | 10.1.0.0/16 | 16 | 10.1.2.3/16 | 16
| 10/8 | 8 | 10.1.2.3/8 | 8 | 10.0.0.0/8 | 8 | 10.1.2.3/8 | 8
| 10/8 | 8 | 11.1.2.3/8 | 8 | 10.0.0.0/8 | 8 | 11.1.2.3/8 | 8
| 10/8 | 8 | 9.1.2.3/8 | 8 | 10.0.0.0/8 | 8 | 9.1.2.3/8 | 8
(10 rows) (10 rows)
SELECT '' AS four, c AS cidr, masklen(c) AS "masklen(cidr)", SELECT '' AS four, c AS cidr, masklen(c) AS "masklen(cidr)",
i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL
WHERE masklen(c) <= 8; WHERE masklen(c) <= 8;
four | cidr | masklen(cidr) | inet | masklen(inet) four | cidr | masklen(cidr) | inet | masklen(inet)
------+------+---------------+------------+--------------- ------+------------+---------------+------------+---------------
| 10/8 | 8 | 10.1.2.3/8 | 8 | 10.0.0.0/8 | 8 | 10.1.2.3/8 | 8
| 10/8 | 8 | 10.1.2.3/8 | 8 | 10.0.0.0/8 | 8 | 10.1.2.3/8 | 8
| 10/8 | 8 | 11.1.2.3/8 | 8 | 10.0.0.0/8 | 8 | 11.1.2.3/8 | 8
| 10/8 | 8 | 9.1.2.3/8 | 8 | 10.0.0.0/8 | 8 | 9.1.2.3/8 | 8
(4 rows) (4 rows)
SELECT '' AS six, c AS cidr, i AS inet FROM INET_TBL SELECT '' AS six, c AS cidr, i AS inet FROM INET_TBL
...@@ -121,17 +121,17 @@ SELECT '' AS ten, i, c, ...@@ -121,17 +121,17 @@ SELECT '' AS ten, i, c,
i << c AS sb, i <<= c AS sbe, i << c AS sb, i <<= c AS sbe,
i >> c AS sup, i >>= c AS spe i >> c AS sup, i >>= c AS spe
FROM INET_TBL; FROM INET_TBL;
ten | i | c | lt | le | eq | ge | gt | ne | sb | sbe | sup | spe ten | i | c | lt | le | eq | ge | gt | ne | sb | sbe | sup | spe
-----+------------------+--------------+----+----+----+----+----+----+----+-----+-----+----- -----+------------------+----------------+----+----+----+----+----+----+----+-----+-----+-----
| 192.168.1.226/24 | 192.168.1/24 | f | f | f | t | t | t | f | t | f | t | 192.168.1.226/24 | 192.168.1.0/24 | f | f | f | t | t | t | f | t | f | t
| 192.168.1.226 | 192.168.1/24 | f | f | f | t | t | t | t | t | f | f | 192.168.1.226 | 192.168.1.0/24 | f | f | f | t | t | t | t | t | f | f
| 10.1.2.3/8 | 10/8 | f | f | f | t | t | t | f | t | f | t | 10.1.2.3/8 | 10.0.0.0/8 | f | f | f | t | t | t | f | t | f | t
| 10.1.2.3/8 | 10.0.0.0/32 | t | t | f | f | f | t | f | f | t | t | 10.1.2.3/8 | 10.0.0.0/32 | t | t | f | f | f | t | f | f | t | t
| 10.1.2.3 | 10.1.2.3/32 | f | t | t | t | f | f | f | t | f | t | 10.1.2.3 | 10.1.2.3/32 | f | t | t | t | f | f | f | t | f | t
| 10.1.2.3/24 | 10.1.2/24 | f | f | f | t | t | t | f | t | f | t | 10.1.2.3/24 | 10.1.2.0/24 | f | f | f | t | t | t | f | t | f | t
| 10.1.2.3/16 | 10.1/16 | f | f | f | t | t | t | f | t | f | t | 10.1.2.3/16 | 10.1.0.0/16 | f | f | f | t | t | t | f | t | f | t
| 10.1.2.3/8 | 10/8 | f | f | f | t | t | t | f | t | f | t | 10.1.2.3/8 | 10.0.0.0/8 | f | f | f | t | t | t | f | t | f | t
| 11.1.2.3/8 | 10/8 | f | f | f | t | t | t | f | f | f | f | 11.1.2.3/8 | 10.0.0.0/8 | f | f | f | t | t | t | f | f | f | f
| 9.1.2.3/8 | 10/8 | t | t | f | f | f | t | f | f | f | f | 9.1.2.3/8 | 10.0.0.0/8 | t | t | f | f | f | t | f | f | f | f
(10 rows) (10 rows)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册