lwres_getipnode.docbook revision ddccd5811feff696ba460dabfb666ce61040f545
82bdf8ce36ccfe1b6ff389a9c9c7e2b2d049a43dTom Gundersen<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
82bdf8ce36ccfe1b6ff389a9c9c7e2b2d049a43dTom Gundersen<!--
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - Copyright (C) 2000, 2001 Internet Software Consortium.
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen -
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - Permission to use, copy, modify, and distribute this software for any
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - purpose with or without fee is hereby granted, provided that the above
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - copyright notice and this permission notice appear in all copies.
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen -
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen-->
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<!-- $Id: lwres_getipnode.docbook,v 1.1 2001/03/31 00:08:12 gson Exp $ -->
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<refentry>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<refentryinfo>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen
71d35b6b5563817dfbe757ab9e3b9f018b2db491Thomas Hindoe Paaboel Andersen<date>Jun 30, 2000</date>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen</refentryinfo>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<refmeta>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<refentrytitle>lwres_getipnode</refentrytitle>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<manvolnum>3</manvolnum>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<refmiscinfo>BIND9</refmiscinfo>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen</refmeta>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<refnamediv>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<refname>lwres_getipnodebyname</refname>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<refname>lwres_getipnodebyaddr</refname>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<refname>lwres_freehostent</refname>
10b17992ee59ac1d03d6fc210a976bc2b59f6d75Jason St. John<refpurpose>lightweight resolver nodename / address translation API</refpurpose>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen</refnamediv>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<refsynopsisdiv>
10b17992ee59ac1d03d6fc210a976bc2b59f6d75Jason St. John<funcsynopsis>
10b17992ee59ac1d03d6fc210a976bc2b59f6d75Jason St. John<funcsynopsisinfo>#include &lt;lwres/netdb.h&gt;</funcsynopsisinfo>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<funcprototype>
10b17992ee59ac1d03d6fc210a976bc2b59f6d75Jason St. John<funcdef>
10b17992ee59ac1d03d6fc210a976bc2b59f6d75Jason St. Johnstruct hostent *
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<function>lwres_getipnodebyname</function></funcdef>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<paramdef>const char *name</paramdef>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<paramdef>int af</paramdef>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<paramdef>int flags</paramdef>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<paramdef>int *error_num</paramdef>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen</funcprototype>
6436165dbc500f14abfec738af28f87a71f6a12aLennart Poettering<funcprototype>
54cba0b16cdc94d5c21e8d805a4ade1255d43bc9Tom Gundersen<funcdef>
6436165dbc500f14abfec738af28f87a71f6a12aLennart Poetteringstruct hostent *
6436165dbc500f14abfec738af28f87a71f6a12aLennart Poettering<function>lwres_getipnodebyaddr</function></funcdef>
6436165dbc500f14abfec738af28f87a71f6a12aLennart Poettering<paramdef>const void *src</paramdef>
6436165dbc500f14abfec738af28f87a71f6a12aLennart Poettering<paramdef>size_t len</paramdef>
6436165dbc500f14abfec738af28f87a71f6a12aLennart Poettering<paramdef>int af</paramdef>
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart Poettering<paramdef>int *error_num</paramdef>
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart Poettering</funcprototype>
8612e9365333d35773a08509b1d80a98911acb44Lennart Poettering<funcprototype>
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart Poettering<funcdef>
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart Poetteringvoid
91c40d86120f3bf033539a53c971d99f5dd70708Torstein Husebø<function>lwres_freehostent</function></funcdef>
8612e9365333d35773a08509b1d80a98911acb44Lennart Poettering<paramdef>struct hostent *he</paramdef>
8612e9365333d35773a08509b1d80a98911acb44Lennart Poettering</funcprototype>
3df9bec57c3e2d96f7e2a25961585cfa609b61ebLennart Poettering</funcsynopsis>
3df9bec57c3e2d96f7e2a25961585cfa609b61ebLennart Poettering</refsynopsisdiv>
3df9bec57c3e2d96f7e2a25961585cfa609b61ebLennart Poettering<refsect1>
3df9bec57c3e2d96f7e2a25961585cfa609b61ebLennart Poettering<title>DESCRIPTION</title>
3df9bec57c3e2d96f7e2a25961585cfa609b61ebLennart Poettering<para>
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart PoetteringThese functions perform thread safe, protocol independent
438ca2bbd4dc1de6193ec61f3c12e19cded7921dTom Gundersennodename-to-address and address-to-nodename
8434fd5cf23f998a0f3a0f947a4308a8c18ba7a5Tom Gundersentranslation as defined in RFC2553.
8434fd5cf23f998a0f3a0f947a4308a8c18ba7a5Tom Gundersen</para>
8434fd5cf23f998a0f3a0f947a4308a8c18ba7a5Tom Gundersen<para>
8434fd5cf23f998a0f3a0f947a4308a8c18ba7a5Tom GundersenThey use a
8434fd5cf23f998a0f3a0f947a4308a8c18ba7a5Tom Gundersen<type>struct hostent</type>
8434fd5cf23f998a0f3a0f947a4308a8c18ba7a5Tom Gundersenwhich is defined in
8434fd5cf23f998a0f3a0f947a4308a8c18ba7a5Tom Gundersen<filename>namedb.h</filename>:
deb2e5230b4dcbc0e2e02cc47a0b2d0d7179a044Tom Gundersen
deb2e5230b4dcbc0e2e02cc47a0b2d0d7179a044Tom Gundersen<programlisting>
deb2e5230b4dcbc0e2e02cc47a0b2d0d7179a044Tom Gundersenstruct hostent {
438ca2bbd4dc1de6193ec61f3c12e19cded7921dTom Gundersen char *h_name; /* official name of host */
deb2e5230b4dcbc0e2e02cc47a0b2d0d7179a044Tom Gundersen char **h_aliases; /* alias list */
91c40d86120f3bf033539a53c971d99f5dd70708Torstein Husebø int h_addrtype; /* host address type */
d3df0e3982777fd5de8cffaa585eba0af3773c08Tom Gundersen int h_length; /* length of address */
d3df0e3982777fd5de8cffaa585eba0af3773c08Tom Gundersen char **h_addr_list; /* list of addresses from name server */
d3df0e3982777fd5de8cffaa585eba0af3773c08Tom Gundersen};
d3df0e3982777fd5de8cffaa585eba0af3773c08Tom Gundersen#define h_addr h_addr_list[0] /* address, for backward compatibility */
d3df0e3982777fd5de8cffaa585eba0af3773c08Tom Gundersen</programlisting>
d3df0e3982777fd5de8cffaa585eba0af3773c08Tom Gundersen</para>
d3df0e3982777fd5de8cffaa585eba0af3773c08Tom Gundersen<para>
deb2e5230b4dcbc0e2e02cc47a0b2d0d7179a044Tom GundersenThe members of this structure are:
deb2e5230b4dcbc0e2e02cc47a0b2d0d7179a044Tom Gundersen<variablelist>
deb2e5230b4dcbc0e2e02cc47a0b2d0d7179a044Tom Gundersen<varlistentry><term><constant>h_name</constant></term>
d6731e4c7964ee2860d4f5abdb0b52acd7a66960Tom Gundersen<listitem>
deb2e5230b4dcbc0e2e02cc47a0b2d0d7179a044Tom Gundersen<para>
adc5b2e2ebcb91ee18b6a32681b8ec1e52793473Tom GundersenThe official (canonical) name of the host.
adc5b2e2ebcb91ee18b6a32681b8ec1e52793473Tom Gundersen</para>
adc5b2e2ebcb91ee18b6a32681b8ec1e52793473Tom Gundersen</listitem>
6f4dedb250f2d607eceefaa491f338becbeee7c0Tom Gundersen<varlistentry><term><constant>h_aliases</constant></term>
6f4dedb250f2d607eceefaa491f338becbeee7c0Tom Gundersen<listitem>
d6731e4c7964ee2860d4f5abdb0b52acd7a66960Tom Gundersen<para>
7dbf94a9c4dcdf9b56384e66eb2652fb61da5063Tom GundersenA NULL-terminated array of alternate names (nicknames) for the host.
6f4dedb250f2d607eceefaa491f338becbeee7c0Tom Gundersen</para>
91c40d86120f3bf033539a53c971d99f5dd70708Torstein Husebø</listitem>
d6731e4c7964ee2860d4f5abdb0b52acd7a66960Tom Gundersen<varlistentry><term><constant>h_addrtype</constant></term>
7dbf94a9c4dcdf9b56384e66eb2652fb61da5063Tom Gundersen<listitem>
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart Poettering<para>
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart PoetteringThe type of address being returned - usually
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart Poettering<type>PF_INET</type>
91c40d86120f3bf033539a53c971d99f5dd70708Torstein Husebøor
91c40d86120f3bf033539a53c971d99f5dd70708Torstein Husebø<type>PF_INET6</type>.
d6731e4c7964ee2860d4f5abdb0b52acd7a66960Tom Gundersen
03cc0fd1431b82e59c11ae12a274c1f2df23169dLennart Poettering</para>
ad6c04756115809d615dede330213d73edf732a8Lennart Poettering</listitem>
ad6c04756115809d615dede330213d73edf732a8Lennart Poettering<varlistentry><term><constant>h_length</constant></term>
aaa297d4e5401fd4466632555432774863457f1dLennart Poettering<listitem>
aaa297d4e5401fd4466632555432774863457f1dLennart Poettering<para>
aaa297d4e5401fd4466632555432774863457f1dLennart PoetteringThe length of the address in bytes.
aaa297d4e5401fd4466632555432774863457f1dLennart Poettering</para>
aaa297d4e5401fd4466632555432774863457f1dLennart Poettering</listitem>
aaa297d4e5401fd4466632555432774863457f1dLennart Poettering<varlistentry><term><constant>h_addr_list</constant></term>
ad6c04756115809d615dede330213d73edf732a8Lennart Poettering<listitem>
ad6c04756115809d615dede330213d73edf732a8Lennart Poettering<para>
ad6c04756115809d615dede330213d73edf732a8Lennart PoetteringA
ad6c04756115809d615dede330213d73edf732a8Lennart Poettering<type>NULL</type>
ad6c04756115809d615dede330213d73edf732a8Lennart Poetteringterminated array of network addresses for the host.
ad6c04756115809d615dede330213d73edf732a8Lennart PoetteringHost addresses are returned in network byte order.
ad6c04756115809d615dede330213d73edf732a8Lennart Poettering</para>
8a516214c4412e8a40544bd725a6d499a30cbbbfLennart Poettering</listitem>
8a516214c4412e8a40544bd725a6d499a30cbbbfLennart Poettering</variablelist>
8a516214c4412e8a40544bd725a6d499a30cbbbfLennart Poettering</para>
8a516214c4412e8a40544bd725a6d499a30cbbbfLennart Poettering<para>
8a516214c4412e8a40544bd725a6d499a30cbbbfLennart Poettering<function>lwres_getipnodebyname()</function>
8a516214c4412e8a40544bd725a6d499a30cbbbfLennart Poetteringlooks up addresses of protocol family
49699bac94d24b444274f91f85c82e6fad04d029Susant Sahani<parameter>af</parameter>
49699bac94d24b444274f91f85c82e6fad04d029Susant Sahani
3df9bec57c3e2d96f7e2a25961585cfa609b61ebLennart Poetteringfor the hostname
3df9bec57c3e2d96f7e2a25961585cfa609b61ebLennart Poettering<parameter>name</parameter>.
3df9bec57c3e2d96f7e2a25961585cfa609b61ebLennart Poettering
3df9bec57c3e2d96f7e2a25961585cfa609b61ebLennart PoetteringThe
3df9bec57c3e2d96f7e2a25961585cfa609b61ebLennart Poettering<parameter>flags</parameter>
9b4d1882ca46d5b2ae7d028ec2b5d0d0c3a46a76Tom Gundersenparameter contains ORed flag bits to
0d4ad91dd4fc831c31a9775b0eadf97fea6cd7f6Alin Rautaspecify the types of addresses that are searched
0d4ad91dd4fc831c31a9775b0eadf97fea6cd7f6Alin Rautafor, and the types of addresses that are returned.
0d4ad91dd4fc831c31a9775b0eadf97fea6cd7f6Alin RautaThe flag bits are:
0d4ad91dd4fc831c31a9775b0eadf97fea6cd7f6Alin Rauta<variablelist>
0d4ad91dd4fc831c31a9775b0eadf97fea6cd7f6Alin Rauta<varlistentry><term><constant>AI_V4MAPPED</constant></term>
0d4ad91dd4fc831c31a9775b0eadf97fea6cd7f6Alin Rauta<listitem>
8eb9058dc1f99a5eb9b8726a978fcc0720837a10Lennart Poettering<para>
8eb9058dc1f99a5eb9b8726a978fcc0720837a10Lennart PoetteringThis is used with an
8eb9058dc1f99a5eb9b8726a978fcc0720837a10Lennart Poettering<parameter>af</parameter>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersenof AF_INET6, and causes IPv4 addresses to be returned as IPv4-mapped
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom GundersenIPv6 addresses.
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen</para>
7e141e498c73ec7c8b61a0df37c4937f1d6becc7Tom Gundersen</listitem>
0014a4ad505d119c7ac4346d9d774c3f17f663a5Lennart Poettering<varlistentry><term><constant>AI_ALL</constant></term>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<listitem>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<para>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom GundersenThis is used with an
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<parameter>af</parameter>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersenof AF_INET6, and causes all known addresses (IPv6 and IPv4) to be returned.
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom GundersenIf AI_V4MAPPED is also set, the IPv4 addresses are return as mapped
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom GundersenIPv6 addresses.
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen</para>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen</listitem>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<varlistentry><term><constant>AI_ADDRCONFIG</constant></term>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<listitem>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<para>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom GundersenOnly return an IPv6 or IPv4 address if here is an active network
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gunderseninterface of that type. This is not currently implemented
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersenin the BIND 9 lightweight resolver, and the flag is ignored.
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen</para>
4afd3348c7506dd1d36305b7bcb9feb8952b9d6bLennart Poettering</listitem>
4afd3348c7506dd1d36305b7bcb9feb8952b9d6bLennart Poettering<varlistentry><term><constant>AI_DEFAULT</constant></term>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<listitem>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom Gundersen<para>
fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2Tom GundersenThis default sets the
<constant>AI_V4MAPPED</constant>
and
<constant>AI_ADDRCONFIG</constant>
flag bits.
</para>
</listitem>
</variablelist>
</para>
<para>
<function>lwres_getipnodebyaddr()</function>
performs a reverse lookup
of address
<parameter>src</parameter>
which is
<parameter>len</parameter>
bytes long.
<parameter>af</parameter>
denotes the protocol family, typically
<type>PF_INET</type>
or
<type>PF_INET6</type>.
</para>
<para>
<function>lwres_freehostent()</function>
releases all the memory associated with
the
<type>struct hostent</type>
pointer
<parameter>he</parameter>.
Any memory allocated for the
<constant>h_name</constant>,
<constant>h_addr_list</constant>
and
<constant>h_aliases</constant>
is freed, as is the memory for the
<type>hostent</type>
structure itself.
</para>
</refsect1>
<refsect1>
<title>RETURN VALUES</title>
<para>
If an error occurs,
<function>lwres_getipnodebyname()</function>
and
<function>lwres_getipnodebyaddr()</function>
set
<parameter>*error_num</parameter>
to an approriate error code and the function returns a
<type>NULL</type>
pointer.
The error codes and their meanings are defined in
<filename>&lt;lwres/netdb.h&gt;</filename>:
<variablelist>
<varlistentry><term><constant>HOST_NOT_FOUND</constant></term>
<listitem>
<para>
No such host is known.
</para>
</listitem>
<varlistentry><term><constant>NO_ADDRESS</constant></term>
<listitem>
<para>
The server recognised the request and the name but no address is
available. Another type of request to the name server for the
domain might return an answer.
</para>
</listitem>
<varlistentry><term><constant>TRY_AGAIN</constant></term>
<listitem>
<para>
A temporary and possibly transient error occurred, such as a
failure of a server to respond. The request may succeed if
retried.
</para>
</listitem>
<varlistentry><term><constant>NO_RECOVERY</constant></term>
<listitem>
<para>
An unexpected failure occurred, and retrying the request
is pointless.
</para>
</listitem>
</variablelist>
</para>
<para>
<citerefentry>
<refentrytitle>lwres_hstrerror</refentrytitle><manvolnum>3
</manvolnum>
</citerefentry>
translates these error codes to suitable error messages.
</para>
</refsect1>
<refsect1>
<title>SEE ALSO</title>
<para>
<citerefentry>
<refentrytitle>RFC2553</refentrytitle>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_gethostent</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_getaddrinfo</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_getnameinfo</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>lwres_hstrerror</refentrytitle><manvolnum>3</manvolnum>
</citerefentry>.
</para>
</refsect1>
</refentry>