Code review for recently-added network functions. Get it to work when
log_hostname is enabled, clean up documentation.
This commit is contained in:
parent
88961fc45d
commit
ba0f9ff3ba
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.206 2004/06/02 21:34:49 momjian Exp $
|
$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.207 2004/06/13 19:56:49 tgl Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -6609,25 +6609,25 @@ SELECT NULLIF(value, '(none)') ...
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><function>inet_client_addr</function></entry>
|
<entry><function>inet_client_addr()</function></entry>
|
||||||
<entry><type>inet</type></entry>
|
<entry><type>inet</type></entry>
|
||||||
<entry>address of the remote connection</entry>
|
<entry>address of the remote connection</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><function>inet_client_port</function></entry>
|
<entry><function>inet_client_port()</function></entry>
|
||||||
<entry><type>int4</type></entry>
|
<entry><type>int4</type></entry>
|
||||||
<entry>port of the remote connection</entry>
|
<entry>port of the remote connection</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><function>inet_server_addr</function></entry>
|
<entry><function>inet_server_addr()</function></entry>
|
||||||
<entry><type>inet</type></entry>
|
<entry><type>inet</type></entry>
|
||||||
<entry>address of the local connection</entry>
|
<entry>address of the local connection</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><function>inet_server_port</function></entry>
|
<entry><function>inet_server_port()</function></entry>
|
||||||
<entry><type>int4</type></entry>
|
<entry><type>int4</type></entry>
|
||||||
<entry>port of the local connection</entry>
|
<entry>port of the local connection</entry>
|
||||||
</row>
|
</row>
|
||||||
@ -6687,17 +6687,6 @@ SELECT NULLIF(value, '(none)') ...
|
|||||||
</para>
|
</para>
|
||||||
</note>
|
</note>
|
||||||
|
|
||||||
<para>
|
|
||||||
<function>inet_client_addr</function> and
|
|
||||||
<function>inet_server_addr</function> return the IPv4 or IPv6 (if
|
|
||||||
configured) address of the remote or local host connecting to the
|
|
||||||
database, respectively. <function>inet_client_port</function>
|
|
||||||
and <function>inet_server_port</function> return the port number
|
|
||||||
of the remote or local host connecting to the database,
|
|
||||||
respectively. If the connection is not a network connection,
|
|
||||||
these functions will return <literal>NULL</literal>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<function>current_schema</function> returns the name of the schema that is
|
<function>current_schema</function> returns the name of the schema that is
|
||||||
at the front of the search path (or a null value if the search path is
|
at the front of the search path (or a null value if the search path is
|
||||||
@ -6718,6 +6707,33 @@ SET search_path TO <replaceable>schema</> <optional>, <replaceable>schema</>, ..
|
|||||||
</para>
|
</para>
|
||||||
</note>
|
</note>
|
||||||
|
|
||||||
|
<indexterm zone="functions-misc">
|
||||||
|
<primary>inet_client_addr</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="functions-misc">
|
||||||
|
<primary>inet_client_port</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="functions-misc">
|
||||||
|
<primary>inet_server_addr</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<indexterm zone="functions-misc">
|
||||||
|
<primary>inet_server_port</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<function>inet_client_addr</function> returns the IP address of the
|
||||||
|
current client, and <function>inet_client_port</function> returns the
|
||||||
|
port number.
|
||||||
|
<function>inet_server_addr</function> returns the IP address on which
|
||||||
|
the server accepted the current connection, and
|
||||||
|
<function>inet_server_port</function> returns the port number.
|
||||||
|
All these functions return NULL if the connection is via a Unix-domain
|
||||||
|
socket.
|
||||||
|
</para>
|
||||||
|
|
||||||
<indexterm zone="functions-misc">
|
<indexterm zone="functions-misc">
|
||||||
<primary>version</primary>
|
<primary>version</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* PostgreSQL type definitions for the INET and CIDR types.
|
* PostgreSQL type definitions for the INET and CIDR types.
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/network.c,v 1.50 2004/05/26 18:35:38 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/network.c,v 1.51 2004/06/13 19:56:50 tgl Exp $
|
||||||
*
|
*
|
||||||
* Jon Postel RIP 16 Oct 1998
|
* Jon Postel RIP 16 Oct 1998
|
||||||
*/
|
*/
|
||||||
@ -133,109 +133,6 @@ cidr_in(PG_FUNCTION_ARGS)
|
|||||||
PG_RETURN_INET_P(network_in(src, 1));
|
PG_RETURN_INET_P(network_in(src, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* INET that the client is connecting from */
|
|
||||||
Datum
|
|
||||||
inet_client_addr(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
Port *port = MyProcPort;
|
|
||||||
|
|
||||||
if (port == NULL)
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
|
|
||||||
switch (port->raddr.addr.ss_family) {
|
|
||||||
case AF_INET:
|
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
case AF_INET6:
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
}
|
|
||||||
|
|
||||||
PG_RETURN_INET_P(network_in(port->remote_host, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* port that the client is connecting from */
|
|
||||||
Datum
|
|
||||||
inet_client_port(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
Port *port = MyProcPort;
|
|
||||||
|
|
||||||
if (port == NULL)
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
|
|
||||||
PG_RETURN_INT32(DirectFunctionCall1(int4in, CStringGetDatum(port->remote_port)));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* server INET that the client connected to */
|
|
||||||
Datum
|
|
||||||
inet_server_addr(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
Port *port = MyProcPort;
|
|
||||||
char local_host[NI_MAXHOST];
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (port == NULL)
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
|
|
||||||
switch (port->laddr.addr.ss_family) {
|
|
||||||
case AF_INET:
|
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
case AF_INET6:
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
}
|
|
||||||
|
|
||||||
local_host[0] = '\0';
|
|
||||||
|
|
||||||
ret = getnameinfo_all(&port->laddr.addr, port->laddr.salen,
|
|
||||||
local_host, sizeof(local_host),
|
|
||||||
NULL, 0,
|
|
||||||
NI_NUMERICHOST | NI_NUMERICSERV);
|
|
||||||
if (ret)
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
|
|
||||||
PG_RETURN_INET_P(network_in(local_host, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* port that the server accepted the connection on */
|
|
||||||
Datum
|
|
||||||
inet_server_port(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
Port *port = MyProcPort;
|
|
||||||
char local_port[NI_MAXSERV];
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (port == NULL)
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
|
|
||||||
switch (port->laddr.addr.ss_family) {
|
|
||||||
case AF_INET:
|
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
case AF_INET6:
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
}
|
|
||||||
|
|
||||||
local_port[0] = '\0';
|
|
||||||
|
|
||||||
ret = getnameinfo_all(&port->laddr.addr, port->laddr.salen,
|
|
||||||
NULL, 0,
|
|
||||||
local_port, sizeof(local_port),
|
|
||||||
NI_NUMERICHOST | NI_NUMERICSERV);
|
|
||||||
if (ret)
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
|
|
||||||
PG_RETURN_INT32(DirectFunctionCall1(int4in, CStringGetDatum(local_port)));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* INET address output function.
|
* INET address output function.
|
||||||
@ -1069,3 +966,147 @@ network_scan_last(Datum in)
|
|||||||
DirectFunctionCall1(network_broadcast, in),
|
DirectFunctionCall1(network_broadcast, in),
|
||||||
Int32GetDatum(-1));
|
Int32GetDatum(-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IP address that the client is connecting from (NULL if Unix socket)
|
||||||
|
*/
|
||||||
|
Datum
|
||||||
|
inet_client_addr(PG_FUNCTION_ARGS)
|
||||||
|
{
|
||||||
|
Port *port = MyProcPort;
|
||||||
|
char remote_host[NI_MAXHOST];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (port == NULL)
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
|
||||||
|
switch (port->raddr.addr.ss_family) {
|
||||||
|
case AF_INET:
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_host[0] = '\0';
|
||||||
|
|
||||||
|
ret = getnameinfo_all(&port->raddr.addr, port->raddr.salen,
|
||||||
|
remote_host, sizeof(remote_host),
|
||||||
|
NULL, 0,
|
||||||
|
NI_NUMERICHOST | NI_NUMERICSERV);
|
||||||
|
if (ret)
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
|
||||||
|
PG_RETURN_INET_P(network_in(remote_host, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* port that the client is connecting from (NULL if Unix socket)
|
||||||
|
*/
|
||||||
|
Datum
|
||||||
|
inet_client_port(PG_FUNCTION_ARGS)
|
||||||
|
{
|
||||||
|
Port *port = MyProcPort;
|
||||||
|
char remote_port[NI_MAXSERV];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (port == NULL)
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
|
||||||
|
switch (port->raddr.addr.ss_family) {
|
||||||
|
case AF_INET:
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_port[0] = '\0';
|
||||||
|
|
||||||
|
ret = getnameinfo_all(&port->raddr.addr, port->raddr.salen,
|
||||||
|
NULL, 0,
|
||||||
|
remote_port, sizeof(remote_port),
|
||||||
|
NI_NUMERICHOST | NI_NUMERICSERV);
|
||||||
|
if (ret)
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
|
||||||
|
PG_RETURN_DATUM(DirectFunctionCall1(int4in, CStringGetDatum(remote_port)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IP address that the server accepted the connection on (NULL if Unix socket)
|
||||||
|
*/
|
||||||
|
Datum
|
||||||
|
inet_server_addr(PG_FUNCTION_ARGS)
|
||||||
|
{
|
||||||
|
Port *port = MyProcPort;
|
||||||
|
char local_host[NI_MAXHOST];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (port == NULL)
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
|
||||||
|
switch (port->laddr.addr.ss_family) {
|
||||||
|
case AF_INET:
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
}
|
||||||
|
|
||||||
|
local_host[0] = '\0';
|
||||||
|
|
||||||
|
ret = getnameinfo_all(&port->laddr.addr, port->laddr.salen,
|
||||||
|
local_host, sizeof(local_host),
|
||||||
|
NULL, 0,
|
||||||
|
NI_NUMERICHOST | NI_NUMERICSERV);
|
||||||
|
if (ret)
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
|
||||||
|
PG_RETURN_INET_P(network_in(local_host, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* port that the server accepted the connection on (NULL if Unix socket)
|
||||||
|
*/
|
||||||
|
Datum
|
||||||
|
inet_server_port(PG_FUNCTION_ARGS)
|
||||||
|
{
|
||||||
|
Port *port = MyProcPort;
|
||||||
|
char local_port[NI_MAXSERV];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (port == NULL)
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
|
||||||
|
switch (port->laddr.addr.ss_family) {
|
||||||
|
case AF_INET:
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
}
|
||||||
|
|
||||||
|
local_port[0] = '\0';
|
||||||
|
|
||||||
|
ret = getnameinfo_all(&port->laddr.addr, port->laddr.salen,
|
||||||
|
NULL, 0,
|
||||||
|
local_port, sizeof(local_port),
|
||||||
|
NI_NUMERICHOST | NI_NUMERICSERV);
|
||||||
|
if (ret)
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
|
||||||
|
PG_RETURN_DATUM(DirectFunctionCall1(int4in, CStringGetDatum(local_port)));
|
||||||
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.335 2004/06/06 19:07:00 tgl Exp $
|
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.336 2004/06/13 19:56:51 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
|
||||||
@ -2346,15 +2346,6 @@ DESCR("I/O");
|
|||||||
DATA(insert OID = 911 ( inet_out PGNSP PGUID 12 f f t f i 1 2275 "869" _null_ inet_out - _null_ ));
|
DATA(insert OID = 911 ( inet_out PGNSP PGUID 12 f f t f i 1 2275 "869" _null_ inet_out - _null_ ));
|
||||||
DESCR("I/O");
|
DESCR("I/O");
|
||||||
|
|
||||||
DATA(insert OID = 2196 ( inet_client_addr PGNSP PGUID 12 f f f f s 0 869 "" _null_ inet_client_addr - _null_ ));
|
|
||||||
DESCR("Returns the INET address of the client connected to the backend");
|
|
||||||
DATA(insert OID = 2197 ( inet_client_port PGNSP PGUID 12 f f f f s 0 23 "" _null_ inet_client_port - _null_ ));
|
|
||||||
DESCR("Returns the client's port number for this connection");
|
|
||||||
DATA(insert OID = 2198 ( inet_server_addr PGNSP PGUID 12 f f f f s 0 869 "" _null_ inet_server_addr - _null_ ));
|
|
||||||
DESCR("Returns the INET address that the backend is using to service the connection");
|
|
||||||
DATA(insert OID = 2199 ( inet_server_port PGNSP PGUID 12 f f f f s 0 23 "" _null_ inet_server_port - _null_ ));
|
|
||||||
DESCR("Returns the servers's port number for this connection");
|
|
||||||
|
|
||||||
/* for cidr type support */
|
/* for cidr type support */
|
||||||
DATA(insert OID = 1267 ( cidr_in PGNSP PGUID 12 f f t f i 1 650 "2275" _null_ cidr_in - _null_ ));
|
DATA(insert OID = 1267 ( cidr_in PGNSP PGUID 12 f f t f i 1 650 "2275" _null_ cidr_in - _null_ ));
|
||||||
DESCR("I/O");
|
DESCR("I/O");
|
||||||
@ -2411,6 +2402,15 @@ DESCR("text to cidr");
|
|||||||
DATA(insert OID = 1715 ( set_masklen PGNSP PGUID 12 f f t f i 2 869 "869 23" _null_ inet_set_masklen - _null_ ));
|
DATA(insert OID = 1715 ( set_masklen PGNSP PGUID 12 f f t f i 2 869 "869 23" _null_ inet_set_masklen - _null_ ));
|
||||||
DESCR("change the netmask of an inet");
|
DESCR("change the netmask of an inet");
|
||||||
|
|
||||||
|
DATA(insert OID = 2196 ( inet_client_addr PGNSP PGUID 12 f f f f s 0 869 "" _null_ inet_client_addr - _null_ ));
|
||||||
|
DESCR("INET address of the client");
|
||||||
|
DATA(insert OID = 2197 ( inet_client_port PGNSP PGUID 12 f f f f s 0 23 "" _null_ inet_client_port - _null_ ));
|
||||||
|
DESCR("client's port number for this connection");
|
||||||
|
DATA(insert OID = 2198 ( inet_server_addr PGNSP PGUID 12 f f f f s 0 869 "" _null_ inet_server_addr - _null_ ));
|
||||||
|
DESCR("INET address of the server");
|
||||||
|
DATA(insert OID = 2199 ( inet_server_port PGNSP PGUID 12 f f f f s 0 23 "" _null_ inet_server_port - _null_ ));
|
||||||
|
DESCR("server's port number for this connection");
|
||||||
|
|
||||||
DATA(insert OID = 1686 ( numeric PGNSP PGUID 12 f f t f i 1 1700 "25" _null_ text_numeric - _null_ ));
|
DATA(insert OID = 1686 ( numeric PGNSP PGUID 12 f f t f i 1 1700 "25" _null_ text_numeric - _null_ ));
|
||||||
DESCR("(internal)");
|
DESCR("(internal)");
|
||||||
DATA(insert OID = 1688 ( text PGNSP PGUID 12 f f t f i 1 25 "1700" _null_ numeric_text - _null_ ));
|
DATA(insert OID = 1688 ( text PGNSP PGUID 12 f f t f i 1 25 "1700" _null_ numeric_text - _null_ ));
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/utils/builtins.h,v 1.241 2004/06/02 21:29:29 momjian Exp $
|
* $PostgreSQL: pgsql/src/include/utils/builtins.h,v 1.242 2004/06/13 19:56:52 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -649,10 +649,6 @@ extern int inet_net_pton(int af, const char *src,
|
|||||||
void *dst, size_t size);
|
void *dst, size_t size);
|
||||||
|
|
||||||
/* network.c */
|
/* network.c */
|
||||||
extern Datum inet_client_addr(PG_FUNCTION_ARGS);
|
|
||||||
extern Datum inet_client_port(PG_FUNCTION_ARGS);
|
|
||||||
extern Datum inet_server_addr(PG_FUNCTION_ARGS);
|
|
||||||
extern Datum inet_server_port(PG_FUNCTION_ARGS);
|
|
||||||
extern Datum inet_in(PG_FUNCTION_ARGS);
|
extern Datum inet_in(PG_FUNCTION_ARGS);
|
||||||
extern Datum inet_out(PG_FUNCTION_ARGS);
|
extern Datum inet_out(PG_FUNCTION_ARGS);
|
||||||
extern Datum inet_recv(PG_FUNCTION_ARGS);
|
extern Datum inet_recv(PG_FUNCTION_ARGS);
|
||||||
@ -687,6 +683,10 @@ extern Datum text_inet(PG_FUNCTION_ARGS);
|
|||||||
extern Datum inet_set_masklen(PG_FUNCTION_ARGS);
|
extern Datum inet_set_masklen(PG_FUNCTION_ARGS);
|
||||||
extern Datum network_scan_first(Datum in);
|
extern Datum network_scan_first(Datum in);
|
||||||
extern Datum network_scan_last(Datum in);
|
extern Datum network_scan_last(Datum in);
|
||||||
|
extern Datum inet_client_addr(PG_FUNCTION_ARGS);
|
||||||
|
extern Datum inet_client_port(PG_FUNCTION_ARGS);
|
||||||
|
extern Datum inet_server_addr(PG_FUNCTION_ARGS);
|
||||||
|
extern Datum inet_server_port(PG_FUNCTION_ARGS);
|
||||||
|
|
||||||
/* mac.c */
|
/* mac.c */
|
||||||
extern Datum macaddr_in(PG_FUNCTION_ARGS);
|
extern Datum macaddr_in(PG_FUNCTION_ARGS);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user