OSDN Git Service

Change default output formatting for CIDR to be unabbreviated, per
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 22 Dec 2000 18:00:24 +0000 (18:00 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 22 Dec 2000 18:00:24 +0000 (18:00 +0000)
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.

doc/src/sgml/datatype.sgml
doc/src/sgml/func.sgml
src/backend/utils/adt/network.c
src/include/catalog/pg_proc.h
src/include/utils/builtins.h
src/test/regress/expected/inet.out

index 6afe6cd..6286b41 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$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">
@@ -1818,7 +1818,7 @@ January 8 04:05:06 1999 PST
      class="parameter">x.x.x.x</replaceable> is an IP address and
      <replaceable class="parameter">y</replaceable> is the number of
      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.
      On display, the <replaceable class="parameter">/y</replaceable>
      portion is suppressed if the netmask is 32.
@@ -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</> is the network and <replaceable
      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
      that it will be at least large enough to include all of the octets
      written in the input.
@@ -1848,56 +1848,68 @@ January 8 04:05:06 1999 PST
 
      <table tocentry="1">
       <title><type>cidr</> Type Input Examples</title>
-      <tgroup cols="2">
+      <tgroup cols="3">
        <thead> 
        <row> 
         <entry>CIDR Input</entry>
         <entry>CIDR Displayed</entry>
+        <entry>abbrev(CIDR)</entry>
        </row>
        </thead>
        <tbody>
        <row>
         <entry>192.168.100.128/25</entry>
         <entry>192.168.100.128/25</entry>
+        <entry>192.168.100.128/25</entry>
        </row>
        <row>
         <entry>192.168/24</entry>
+        <entry>192.168.0.0/24</entry>
         <entry>192.168.0/24</entry>
        </row>
        <row>
         <entry>192.168/25</entry>
         <entry>192.168.0.0/25</entry>
+        <entry>192.168.0.0/25</entry>
        </row>
        <row>
         <entry>192.168.1</entry>
+        <entry>192.168.1.0/24</entry>
         <entry>192.168.1/24</entry>
        </row>
        <row>
         <entry>192.168</entry>
+        <entry>192.168.0.0/24</entry>
         <entry>192.168.0/24</entry>
        </row>
        <row>
         <entry>128.1</entry>
+        <entry>128.1.0.0/16</entry>
         <entry>128.1/16</entry>
        </row>
        <row>
         <entry>128</entry>
+        <entry>128.0.0.0/16</entry>
         <entry>128.0/16</entry>
        </row>
        <row>
         <entry>128.1.2</entry>
+        <entry>128.1.2.0/24</entry>
         <entry>128.1.2/24</entry>
        </row>
        <row>
         <entry>10.1.2</entry>
+        <entry>10.1.2.0/24</entry>
         <entry>10.1.2/24</entry>
        </row>
        <row>
         <entry>10.1</entry>
+        <entry>10.1.0.0/16</entry>
         <entry>10.1/16</entry>
        </row>
        <row>
         <entry>10</entry>
+        <entry>10.0.0.0/8</entry>
         <entry>10/8</entry>
        </row>
        </tbody>
@@ -1917,8 +1929,8 @@ January 8 04:05:06 1999 PST
       <tip>
         <para>
        If you do not like the output format for <type>inet</type> or
-       <type>cidr</type> values, try the <function>host</>() and
-       <function>text</>() functions.
+       <type>cidr</type> values, try the <function>host</>(),
+       <function>text</>(), and <function>abbrev</>() functions.
        </para>
       </tip>
     </para>
index f03fae6..533c1f2 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $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">
  <title>Functions and Operators</title>
@@ -2432,7 +2432,7 @@ Not defined by this name. Implements the intersection operator '#'
        <entry>cidr</entry>
        <entry>extract network part of address</entry>
        <entry>network('192.168.1.5/24')</entry>
-       <entry>192.168.1/24</entry>
+       <entry>192.168.1.0/24</entry>
        </row>
        <row>
        <entry>text(inet)</entry>
@@ -2441,15 +2441,22 @@ Not defined by this name. Implements the intersection operator '#'
        <entry>text(inet '192.168.1.5')</entry>
        <entry>192.168.1.5/32</entry>
        </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>
      </tgroup>
     </table>
 
    <para>
     All of the functions for <type>inet</type> can be applied to
-    <type>cidr</type> values as well.  The <function>host</>() and
-    <function>text</>() functions are primarily intended to offer
-    alternative display formats.
+    <type>cidr</type> values as well.  The <function>host</>(),
+    <function>text</>(), and <function>abbrev</>() functions are primarily
+    intended to offer alternative display formats.
    </para>
 
    <para>
index 75527fd..97e0825 100644 (file)
@@ -3,7 +3,7 @@
  *     is for IP V4 CIDR notation, but prepared for V6: just
  *     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
  */
@@ -111,19 +111,24 @@ inet_out(PG_FUNCTION_ARGS)
        inet       *src = PG_GETARG_INET_P(0);
        char            tmp[sizeof("255.255.255.255/32")];
        char       *dst;
+       int                     len;
 
        if (ip_family(src) == AF_INET)
        {
                /* It's an IP V4 address: */
-               if (ip_type(src))
-                       dst = inet_cidr_ntop(AF_INET, &ip_v4addr(src), ip_bits(src),
-                                                                tmp, sizeof(tmp));
-               else
-                       dst = inet_net_ntop(AF_INET, &ip_v4addr(src), ip_bits(src),
-                                                               tmp, sizeof(tmp));
-
+               /* Use inet style for both inet and cidr, since we don't want
+                * abbreviated CIDR style here.
+                */
+               dst = inet_net_ntop(AF_INET, &ip_v4addr(src), ip_bits(src),
+                                                       tmp, sizeof(tmp));
                if (dst == NULL)
                        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
                /* Go for an IPV6 address here, before faulting out: */
@@ -375,17 +380,50 @@ network_show(PG_FUNCTION_ARGS)
                /* force display of 32 bits, regardless of masklen... */
                if (inet_net_ntop(AF_INET, &ip_v4addr(ip), 32, tmp, sizeof(tmp)) == NULL)
                        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
                /* Go for an IPV6 address here, before faulting out: */
                elog(ERROR, "unknown address family (%d)", ip_family(ip));
 
-       /* Add /n if not present */
-       if (strchr(tmp, '/') == NULL)
+       /* Return string as a text datum */
+       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);
-               snprintf(tmp + len, sizeof(tmp) - len, "/%u", ip_bits(ip));
+               /* It's an IP V4 address: */
+               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 */
        len = strlen(tmp);
index c0914fd..5c43faf 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * 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
  *       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
 DESCR("is-supernet-or-equal");
 
 /* 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 - ));
 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 - ));
index 97f03b7..c23e2f3 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * 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);
 extern Datum network_broadcast(PG_FUNCTION_ARGS);
 extern Datum network_host(PG_FUNCTION_ARGS);
 extern Datum network_show(PG_FUNCTION_ARGS);
+extern Datum network_abbrev(PG_FUNCTION_ARGS);
 
 /* mac.c */
 extern Datum macaddr_in(PG_FUNCTION_ARGS);
index 009c098..9c0beef 100644 (file)
@@ -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');
 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;
- ten |     cidr     |       inet       
------+--------------+------------------
-     | 192.168.1/24 | 192.168.1.226/24
-     | 192.168.1/24 | 192.168.1.226
-     | 10/8         | 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/24    | 10.1.2.3/24
-     | 10.1/16      | 10.1.2.3/16
-     | 10/8         | 10.1.2.3/8
-     | 10/8         | 11.1.2.3/8
-     | 10/8         | 9.1.2.3/8
+ ten |      cidr      |       inet       
+-----+----------------+------------------
+     | 192.168.1.0/24 | 192.168.1.226/24
+     | 192.168.1.0/24 | 192.168.1.226
+     | 10.0.0.0/8     | 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.0/24    | 10.1.2.3/24
+     | 10.1.0.0/16    | 10.1.2.3/16
+     | 10.0.0.0/8     | 10.1.2.3/8
+     | 10.0.0.0/8     | 11.1.2.3/8
+     | 10.0.0.0/8     | 9.1.2.3/8
 (10 rows)
 
 -- now test some support functions
@@ -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),
   i AS inet, broadcast(i) FROM INET_TBL;
- 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/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/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/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/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/8         | 10.255.255.255/8 | 9.1.2.3/8        | 9.255.255.255/8
+ ten |      cidr      |    broadcast     |       inet       |    broadcast     
+-----+----------------+------------------+------------------+------------------
+     | 192.168.1.0/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    | 192.168.1.226
+     | 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.1.2.3/32    | 10.1.2.3         | 10.1.2.3         | 10.1.2.3
+     | 10.1.2.0/24    | 10.1.2.255/24    | 10.1.2.3/24      | 10.1.2.255/24
+     | 10.1.0.0/16    | 10.1.255.255/16  | 10.1.2.3/16      | 10.1.255.255/16
+     | 10.0.0.0/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 | 11.1.2.3/8       | 11.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)
 
 SELECT '' AS ten, c AS cidr, network(c) AS "network(cidr)",
   i AS inet, network(i) AS "network(inet)" FROM INET_TBL;
- 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/24 | 192.168.1/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/32  | 10.0.0.0/32   | 10.1.2.3/8       | 10/8
-     | 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/16      | 10.1/16       | 10.1.2.3/16      | 10.1/16
-     | 10/8         | 10/8          | 10.1.2.3/8       | 10/8
-     | 10/8         | 10/8          | 11.1.2.3/8       | 11/8
-     | 10/8         | 10/8          | 9.1.2.3/8        | 9/8
+ ten |      cidr      | network(cidr)  |       inet       |  network(inet)   
+-----+----------------+----------------+------------------+------------------
+     | 192.168.1.0/24 | 192.168.1.0/24 | 192.168.1.226/24 | 192.168.1.0/24
+     | 192.168.1.0/24 | 192.168.1.0/24 | 192.168.1.226    | 192.168.1.226/32
+     | 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.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.0/24    | 10.1.2.0/24    | 10.1.2.3/24      | 10.1.2.0/24
+     | 10.1.0.0/16    | 10.1.0.0/16    | 10.1.2.3/16      | 10.1.0.0/16
+     | 10.0.0.0/8     | 10.0.0.0/8     | 10.1.2.3/8       | 10.0.0.0/8
+     | 10.0.0.0/8     | 10.0.0.0/8     | 11.1.2.3/8       | 11.0.0.0/8
+     | 10.0.0.0/8     | 10.0.0.0/8     | 9.1.2.3/8        | 9.0.0.0/8
 (10 rows)
 
 SELECT '' AS ten, c AS cidr, masklen(c) AS "masklen(cidr)",
   i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL;
- ten |     cidr     | masklen(cidr) |       inet       | masklen(inet) 
------+--------------+---------------+------------------+---------------
-     | 192.168.1/24 |            24 | 192.168.1.226/24 |            24
-     | 192.168.1/24 |            24 | 192.168.1.226    |            32
-     | 10/8         |             8 | 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/24    |            24 | 10.1.2.3/24      |            24
-     | 10.1/16      |            16 | 10.1.2.3/16      |            16
-     | 10/8         |             8 | 10.1.2.3/8       |             8
-     | 10/8         |             8 | 11.1.2.3/8       |             8
-     | 10/8         |             8 | 9.1.2.3/8        |             8
+ ten |      cidr      | masklen(cidr) |       inet       | masklen(inet) 
+-----+----------------+---------------+------------------+---------------
+     | 192.168.1.0/24 |            24 | 192.168.1.226/24 |            24
+     | 192.168.1.0/24 |            24 | 192.168.1.226    |            32
+     | 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.1.2.3/32    |            32 | 10.1.2.3         |            32
+     | 10.1.2.0/24    |            24 | 10.1.2.3/24      |            24
+     | 10.1.0.0/16    |            16 | 10.1.2.3/16      |            16
+     | 10.0.0.0/8     |             8 | 10.1.2.3/8       |             8
+     | 10.0.0.0/8     |             8 | 11.1.2.3/8       |             8
+     | 10.0.0.0/8     |             8 | 9.1.2.3/8        |             8
 (10 rows)
 
 SELECT '' AS four, c AS cidr, masklen(c) AS "masklen(cidr)",
   i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL
   WHERE masklen(c) <= 8;
- four | cidr | masklen(cidr) |    inet    | masklen(inet) 
-------+------+---------------+------------+---------------
-      | 10/8 |             8 | 10.1.2.3/8 |             8
-      | 10/8 |             8 | 10.1.2.3/8 |             8
-      | 10/8 |             8 | 11.1.2.3/8 |             8
-      | 10/8 |             8 | 9.1.2.3/8  |             8
+ four |    cidr    | masklen(cidr) |    inet    | masklen(inet) 
+------+------------+---------------+------------+---------------
+      | 10.0.0.0/8 |             8 | 10.1.2.3/8 |             8
+      | 10.0.0.0/8 |             8 | 10.1.2.3/8 |             8
+      | 10.0.0.0/8 |             8 | 11.1.2.3/8 |             8
+      | 10.0.0.0/8 |             8 | 9.1.2.3/8  |             8
 (4 rows)
 
 SELECT '' AS six, c AS cidr, i AS inet FROM INET_TBL
@@ -121,17 +121,17 @@ SELECT '' AS ten, i, c,
   i << c AS sb, i <<= c AS sbe,
   i >> c AS sup, i >>= c AS spe
   FROM INET_TBL;
- 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    | 192.168.1/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/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/24      | 10.1.2/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/8       | 10/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
-     | 9.1.2.3/8        | 10/8         | t  | t  | f  | f  | f  | t  | f  | f   | f   | f
+ ten |        i         |       c        | lt | le | eq | ge | gt | ne | sb | sbe | sup | spe 
+-----+------------------+----------------+----+----+----+----+----+----+----+-----+-----+-----
+     | 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.0/24 | f  | f  | f  | t  | t  | t  | t  | t   | f   | f
+     | 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         | 10.1.2.3/32    | f  | t  | t  | t  | f  | f  | 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.0.0/16    | 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.0.0.0/8     | f  | f  | f  | t  | t  | 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)