3
3
*is for IP V4 CIDR notation, but prepared for V6: just
4
4
*add the necessary bits where the comments indicate.
5
5
*
6
- *$Id: network.c,v 1.19 2000/03/07 23: 01:43 momjian Exp $
6
+ *$Id: network.c,v 1.20 2000/03/08 01:44:37 momjian Exp $
7
7
*Jon Postel RIP 16 Oct 1998
8
8
*/
9
9
18
18
#include "postgres.h"
19
19
#include "utils/builtins.h"
20
20
21
- static int v4bitncmp (unsignedint a1 ,unsignedint a2 ,int bits1 , int bits2 );
21
+ static int v4bitncmp (unsignedint a1 ,unsignedint a2 ,int bits );
22
22
23
23
/*
24
24
*Access macros.Add IPV6 support.
@@ -137,7 +137,7 @@ network_lt(inet *a1, inet *a2)
137
137
return FALSE;
138
138
if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
139
139
{
140
- int order = v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ));
140
+ int order = v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a2 ));
141
141
142
142
return ((order < 0 )|| ((order == 0 )&& (ip_bits (a1 )< ip_bits (a2 ))));
143
143
}
@@ -166,7 +166,7 @@ network_eq(inet *a1, inet *a2)
166
166
if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
167
167
{
168
168
return ((ip_bits (a1 )== ip_bits (a2 ))
169
- && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ) )== 0 ));
169
+ && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ))== 0 ));
170
170
}
171
171
else
172
172
{
@@ -192,7 +192,7 @@ network_gt(inet *a1, inet *a2)
192
192
return FALSE;
193
193
if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
194
194
{
195
- int order = v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ));
195
+ int order = v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a2 ));
196
196
197
197
return ((order > 0 )|| ((order == 0 )&& (ip_bits (a1 )> ip_bits (a2 ))));
198
198
}
@@ -222,7 +222,7 @@ network_sub(inet *a1, inet *a2)
222
222
if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
223
223
{
224
224
return ((ip_bits (a1 )> ip_bits (a2 ))
225
- && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ))== 0 ));
225
+ && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a2 ))== 0 ));
226
226
}
227
227
else
228
228
{
@@ -242,7 +242,7 @@ network_subeq(inet *a1, inet *a2)
242
242
if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
243
243
{
244
244
return ((ip_bits (a1 ) >=ip_bits (a2 ))
245
- && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ))== 0 ));
245
+ && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a2 ))== 0 ));
246
246
}
247
247
else
248
248
{
@@ -262,7 +262,7 @@ network_sup(inet *a1, inet *a2)
262
262
if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
263
263
{
264
264
return ((ip_bits (a1 )< ip_bits (a2 ))
265
- && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ) )== 0 ));
265
+ && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ))== 0 ));
266
266
}
267
267
else
268
268
{
@@ -282,7 +282,7 @@ network_supeq(inet *a1, inet *a2)
282
282
if ((ip_family (a1 )== AF_INET )&& (ip_family (a2 )== AF_INET ))
283
283
{
284
284
return ((ip_bits (a1 ) <=ip_bits (a2 ))
285
- && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ), ip_bits ( a2 ) )== 0 ));
285
+ && (v4bitncmp (ip_v4addr (a1 ),ip_v4addr (a2 ),ip_bits (a1 ))== 0 ));
286
286
}
287
287
else
288
288
{
@@ -476,16 +476,13 @@ network_netmask(inet *ip)
476
476
*/
477
477
478
478
static int
479
- v4bitncmp (unsignedint a1 ,unsignedint a2 ,int bits1 , int bits2 )
479
+ v4bitncmp (unsignedint a1 ,unsignedint a2 ,int bits )
480
480
{
481
481
unsigned long mask = 0 ;
482
- int i ,bits ;
483
-
484
- bits = (bits1 < bits2 ) ?bits1 :bits2 ;
482
+ int i ;
485
483
486
484
for (i = 0 ;i < bits ;i ++ )
487
485
mask = (mask >>1 ) |0x80000000 ;
488
-
489
486
a1 = ntohl (a1 );
490
487
a2 = ntohl (a2 );
491
488
if ((a1 & mask )< (a2 & mask ))