linux/net/sunrpc/addr.c
<<
>>
Prefs
   1/*
   2 * Copyright 2009, Oracle.  All rights reserved.
   3 *
   4 * Convert socket addresses to presentation addresses and universal
   5 * addresses, and vice versa.
   6 *
   7 * Universal addresses are introduced by RFC 1833 and further refined by
   8 * recent RFCs describing NFSv4.  The universal address format is part
   9 * of the external (network) interface provided by rpcbind version 3
  10 * and 4, and by NFSv4.  Such an address is a string containing a
  11 * presentation format IP address followed by a port number in
  12 * "hibyte.lobyte" format.
  13 *
  14 * IPv6 addresses can also include a scope ID, typically denoted by
  15 * a '%' followed by a device name or a non-negative integer.  Refer to
  16 * RFC 4291, Section 2.2 for details on IPv6 presentation formats.
  17 */
  18
  19#include <net/ipv6.h>
  20#include <linux/sunrpc/clnt.h>
  21#include <linux/slab.h>
  22#include <linux/export.h>
  23
  24#if IS_ENABLED(CONFIG_IPV6)
  25
  26static size_t rpc_ntop6_noscopeid(const struct sockaddr *sap,
  27                                  char *buf, const int buflen)
  28{
  29        const struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap;
  30        const struct in6_addr *addr = &sin6->sin6_addr;
  31
  32        /*
  33         * RFC 4291, Section 2.2.2
  34         *
  35         * Shorthanded ANY address
  36         */
  37        if (ipv6_addr_any(addr))
  38                return snprintf(buf, buflen, "::");
  39
  40        /*
  41         * RFC 4291, Section 2.2.2
  42         *
  43         * Shorthanded loopback address
  44         */
  45        if (ipv6_addr_loopback(addr))
  46                return snprintf(buf, buflen, "::1");
  47
  48        /*
  49         * RFC 4291, Section 2.2.3
  50         *
  51         * Special presentation address format for mapped v4
  52         * addresses.
  53         */
  54        if (ipv6_addr_v4mapped(addr))
  55                return snprintf(buf, buflen, "::ffff:%pI4",
  56                                        &addr->s6_addr32[3]);
  57
  58        /*
  59         * RFC 4291, Section 2.2.1
  60         */
  61        return snprintf(buf, buflen, "%pI6c", addr);
  62}
  63
  64static size_t rpc_ntop6(const struct sockaddr *sap,
  65                        char *buf, const size_t buflen)
  66{
  67        const struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap;
  68        char scopebuf[
  v2.6.16.41
  
          char     6    * RFC 4291, Section62.2.16sref">sockaddbuflen" class="sref">buflen)
  68        char     7    */
  68        char snp7me="L32">  32        sockaddbuflen" class="id="L66" class="li name="in6copeid(const struct sockaddr, "%pI6c",   62}
ipv6_addr_v4mapped(addr))unlikelsdr  55                r7ode=size7t" class="sref">size_t<7a> buf, const ref="+code=buf" class=id="L66" class="li name="L68">  68        char   26static ipv6_addr_v4ma!apped(addr))
sin6_addr;
CONFIG_6.16ADDR_LINKLOCALame="L55">  55                r7"> * Univversal addresses are intlass=7f" class="sref">buf  68        char ipv6_addr_v4mapped(sin6_addr;
sock_"+me="in= 0"68">  68        char     7    * RFC 4291, Section72.2.179" class="sref">buf  68        char     8    */
  26static snp81ref">sockaddbuflen" class="rcddr" class="srefcme="in6copeid(cons"sref">buf, 
  v2.6.16.41
  
  <, hrefofen" class="sref""
	  >
  v2.6.16.41
  
  <)+code=addr" class="sref">addr)c)u"line" name="L56">  56                 8rpc/addr8c#L63" id="L63" class="8ine" 82" class="sref">bufsockaddbuflen" class="_6.16.40"
	DELIMITERs="sref">CONFIG_6.16.40"
	DELIMITERass="string">"&#s="sref">sin6_addr;
sock_"+me=""L62">  62}
ipv6_addr_v4mapped(addr))unlikelsdr(buflen)

  v2.6.16.41
  
  <)"L55">  55                r8ode=size8t" class="sref">size_t<8a> buf, const ref="+c0L62">  62}
  26static sockaddbuflen" class="id="L66" class="li name="i+n6copeid(constcddr" class="srefcme="L68">  68        char  * Uni8versal addresses are in8lass=8v6_addr_any(addr))unlikelsdr"%pI6c",   55                r8"> * receent RFCs describing NFSvscope8ef">snprintf(  62}
    8    * RFC 4291, Section82.2.18me="L40">  40            9    */
sockaddbuflen" class="ss=ca>buflen)
buflen" class="sref">buflen, "&#"
	  >
  v2.6.16.41
  
  <)L62">  62}
snp9intf(  68        char   63
  64static size_t<9a> ()(s="line" na)e" name="L61">  61        return   26static rpc_ntop6_noscopeid(const struct sockaddr *sap,
  27        a href="+9"> * Uni9versal addresses are in9lass=9f" class="sref">buf, const int buflen)
  28{
 * rec9ent RFCs describing NFS9scope9ame="L29">  29        const str9"> * of tthe external (network) i2.2.199ntf(  62}
 * andd 4, and by NFSv4.  Such et/sh eme="L63">  63
 * pr0esentation format IP add01t/sh me="L32">  32         * &q0uot;hibyte.lobyte" 02t/sh 2ref="+code=rpc_ntop6" class="sref">rpc_ntop6(const struct sockaddr *sap,
  65                 10nt"> *
buf, cons"+code=size_t" class="sref">size_t buflen)
  66{
 * IP0v6 addresses can also in04t/sh 4me="L29">  29        const str10nt"> * a 0'%' followed05t/sh 5ntf(  62}
 * RF0C 4291, Section 2.2 for 06t/sh 6me="L63">  63
 */
  58        )(s="line" na)e" name="L61">  61        return   40         * annd 4, and by NFSv4.  Suchh an 1ddress"+code=et/sunrpc/addr.c#L2r">socka4ddr" class="sref">socka4dr *sap,
  65                 1ent"> * preesentation format IP addr1t/sh11" class="sref">buf, c"+code=size_t" class="sref">size_t buflen)
  66{
 * &qquot;hibyte.lobyte"  form1t.  29        const str1ent"> *
sap;
 *)sap;
  68        char  * IPPv6 addresses can also innclud1 a sco68">  68        char  * a  '%' followedd by 115ntf(buf, buflen, "%pI6c", addr);
="line" name="L+code=sin6_addr" class="code=sockaddr" r.cddr_href="net/sunrpc/addr.cL31" id="L31" class="lie" name=")L68">  68        char  * RFFC 4291, Section 2.2 for  deta116me="L63">  63
 */
  58          1411ace provided by rpcbind versiof">socka -er_in6> *)  12 * anude/linux/sunrpc/clnt.h"1 clas12dress is a string containing a@ na:n>
  12 * prude/linux/slab.h" class=1"fref12ollowed by a port number in *)dr.c#re name="L11">  11  12 *  14IS_ENA1BLED<12a scope ID, typically denoted Plants integ7;NUL-terminaline"L11" cin @ cl>
  14 * a c#L26" id="L26" class="l1ine" 12device name or a non-negative n 3   3size_t<1/a> <12s on IPv6 presentation format name="L61">  61        return rpc_ntop6(const struct sockadr *sap,
size_t buflen)
  66{
  29        const str1uct sockaddswitchmapped(addr))ra_familsme=")+L29">  29        const str1uct in6_addrase "net/sunrpc/addAF_INETref">addr))AF_INET>in6:29">  29        const str1unt"> * prc#L32" id="L32" class="l1ine" 131" class="sref">buf(consr">socka4ddr" class="sref">socka4drbuflen, "%pI6c",   68        char /*
  29        const str1unt"> *
buf(consr">sockaaddr" class="sref">sockaddrbuflen, "%pI6c",   68        char 
bufL63">  63
    1     * Shorthanded ANY a1ddres13me="L26">  26static     1     */
sockaddref="+c0L62">  62}
1pv6_adL63">  63
string">"&#EXPORT_SYMBOL_GPLs="sref">CONFIGEXPORT_SYMBOL_GPLdrsockadr  68        char   40        /*
rpc_ntop6(const struct spton4dr *size_t buflen)
  65                 1ent">    1     * RFC 4291, Section1 2.2.141" class="sref">buf, caddsref="+code=sap" class="sref">sap,
buflen)
  66{
    1     *
  29        const str1ent">    1     * Shorthanded loopb1ack a143" class="sre/a> *sap;
 *)sap;
  68        char     1     */
bufa href="+code=au88" class="line"u8href="+code=sockaddr_id="L62" class="line" name=in6  68        char     1=ipv6_addr_loopback" cla1ss="s14me="L26">  26static ipv6_addr_v4maunrpc/addr.c#L66" id="L66" class="line" name="iref= tring">"&#INET6ADDRSTRPENs="sref">CONFIG_NET6ADDRSTRPENme="i||sunrpc/addr.c#L6said="L66" class="lisaid=me="t.h *)sap;
  55                r1rpc/addr.1c#L48" id="L48" class="l1ine" 14f" class="sref">buf  62}
/*
  19#include <    1     * RFC 4291, Section1 2.2.14sref">sockaddbuflen" class="memse>buflen)
drsap;
  62}
    1     *
  26static     1     * Special presentat1ion a151">ipv6_addr_v4maunrpc/addr.c#L6in4sptonref">sap;
buflen, "%pI6c", CONFIGNULLme=")+n= 0"68">  68        char     1     * addresses.1
buf  62}
    1     */
  64static bufa href="+code=as="code=sockaddr" r.cddr_href="net/sunrpc/addr.cLfamilsref">addr))r.cLfamilsame=in6"net/sunrpc/addAF_INETref">addr))AF_INET>in6L62">  62}
    1href="+code=snprintf" cl1ass="155ntf(sap;
  62}
  63
  58        /*
CONFIG_IPV6)
  25
    1     * RFC 4291, Section1 2.2.1sparseL>sock_"+code=sockaddr" r">sparseL>sock_"+
 *)buflen)
drsize_t   25
    1     */
bufbuflen)
  25
    1ode=snprintf" class="sre1f">sn161" class="sref">buf, cadds="sre/a> *sin6 = (struct sockaddr_L25">  25
  29        const str1rpc/addr.1c#L64" id="L64" class="l1ine" 163" class="srer+code=size_t" class=65" class="line"ame="L68">  68        char size_t<1/a> <164ref">bufa href="+code=as=ef">buflen)
  68        char   26static ipv6_addr_v4maen" class="sref">buflen, "%pI6c",   25
buf  68        char scop16me="L19">  19#include <    16    * RFC 4291, Section162.2.16sref">sockaddv4mae=size_t" class=delim"L66" class="lidelimhref != =size_t" class=_6.16.40"
	DELIMITERs="sref">CONFIG_6.16.40"
	DELIMITERass=L25">  25
    17    */
buf  62}
sn17me="L32">  32        sockaddv4ma!apped(addr))
sin6_addr;
CONFIG_6.16ADDR_LINKLOCALame="L55">  32        buf  62}
size_t<17a> <17a sco68">  68        char bufa href="+code=aid="L66" class="li name="in6en" class="sref">buflen, "%pI6c",   68        char sockaddbuflen" class="65" class="line"ame="in6"net/sunrpc/addk/a>ndu65" class="line"k/a>ndu6
CONFIGGFP_KERNELhref"L62">  62}
 */
  29        const str17ef="+cod17=scopebuf" class="sref"17scop17ef">snprintf("&#"
	  _"+code=sockaddr" rsock_"+me="inc0L62">  62}
    17    * RFC 4291, Section172.2.179" class="sref">buf *))
_f="nethref="+code=sockaddr_f=""L66" class="lidevme="L68">  68        char     18    */
  26static sn181" class="sref">buf_by_ss=""L66" class="lidev_ge>_by_ss="
  68        char buf(CONFIGNULLme=")+L29">  29        const str18pc/addr.18#L64" id="L64" class="l18ne" 183" class="sref">buf, constring">"&#"
	  _"+code=sockaddr" rsock_"+me="inca href="+code=af=""L66" class="lidevme="href="net/sunrpc/addifindexss="sref">addr  68        char size_t<18a> <184ref">buf, const f">bufbuflen)
  68        char buf, const } else L29">  29        const str18rpc/addr18c#L67" id="L67" class="18ine"186ref">sockaddass="sref">buf(  29        const str18nt"> */buf, const int   68        char snprintf(  62}
    18    * RFC 4291, Section182.2.189" class="sref">buf  62}
    19    */
buf  62}
sn19me="L32">  32        buf  68        char   64static size_t<19a> <194ref">buf, const sin6_addr" class="sref">sin6_addr;
sock_"+me="instring">"&#"
	  _"+code=sockaddr" rsock_"+me="L68">  68        char snprintf(  68        char sockadd}62">  62}
 */  58         * rec19ent RFCs describing NFS19scop19ef">snprintf  62}
 * of 1tthe external (network) 1i2.2.199ntf<}62">  62}
 * a2dd 4, and by NFSv4.  Suc2 et/s200e="L26">  26static  * p20esentation format IP ad201t/s2 me="L"+code=rpc_ntop6" class="sref">rpc_ntop6(const struct sptona
 *)buflen)
drsize_t buflen)
  65                 20nt"> * &20uot;hibyte.lobyte"202t/s202" class="sref">bufsockaddsref="+code=sap" class="sref">sap,
buflen)
  66{
 *
  29        const stru0nt"> * I20v6 addresses can also i204t/s204ref">buf/a> *sin6 = (struct sockaddr_in6 *)sap;
  68        char  * a20'%' followe205t/s205ref">bufa href="+code=au88" class="line"u8href="+code=sockaddr_id="L62" class="line" name=in6sin6_addr;
addr  68        char sockadd"code="+code=size_t" class=delim"L66" class="lidelimhrefL68">  68        char 
  58        ipv6_addr_v4mapped(CONFIG_NET66ADDRSTRPENme="i+string">"&#.6.16.40"
	 R_PENs="sref">CONFIG_6.16.40"
	 R_PEN
  <) ||58">  58        bunrpc/addr.c#L6said="L66" class="lisaid=me="t.h *)sap;
  32         * a2nd 4, and by NFSv4.  Suc2h an 210" class="sref">buf  62}
 * p2eesentation format IP ad2r1t/s21me="L32">  32         * &2quot;hibyte.lobyte"2 form212ref">sockaddbuflen" class="memse>buflen)
drsap;
  62}
 *
  24#if  * I2Pv6 addresses can also i2nclud21f">ipv6_addr_v4mapped(sap;
buflen, "%pI6c", CONFIG_6.16.40"
	DELIMITERass=L+code=sin6_addr" clasdelim"L66" class="lidelimhrefL+n= 0"68">  68        char  * a2 '%' followe2d by 21ef">snprintf(  62}
  62}
(sock_"+code=sockaddr" r">sparseL>sock_"+
buflen, "%pI6c", sin6_addr;
  32        snprintf(  62}
21me="L40">  40         * a2ude/linux/sunrpc/clnt.h"2 clas220ref">sockaddbuflen" class="s="sref">sin6_addr;
addr))r.c6Lfamilsame=in6"net/sunrpc/addAF_INETaddr" class="sreAF_INETa>in6L62">  62}
 * p2ude/linux/slab.h" class=2"fref22intf(sap;
  62}
 * &2ude/linux/export.h" clas2s="fr22ame="L63">  63
 *  63
 * I2LED" class="sref">IS_ENA2BLED<22href="+code=rpc_ntop6" class="sref">rpc_ntop6(const struct sptona
 *)buflen)
drsize_t buflen)
  65                 2ent"> * a2c#L26" id="L26" class="l2ine" 22sref">buf, const sap,
buflen)
  66{
size_t<2/a> <22ame="L67">  67        const str2         2        char *  62}
  63
63">  63
  26static  * p2c#L32" id="L32" class="l2ine" 23ollowed by a port number in/* name="L14">  14/*
spton - C_in6> *)  14 *
<: applicable a>  14 * I2     *
  12    2     * Shorthanded ANY a2ddres23device name or a non-negative @   12    2     */
  122pv6_adIPv6 presentation formata@ n hr: hrefon 3   12  14(succnetful; oclaswisename="L14">  14/*
   3    2     * RFC 4291, Section2 2.2.24ollowed by a port number in   3
   3 *(succnetful. oRef="+s3zero1"l>
< errorme="L3">   3 * I2     */
   3    2=ipv6_addr_loopback" cla2ss="s24device name or a non-negative name="L61">  61        return iprpc_ntop6" class="sref">rpc_ntop6(const struct spton
 *)buflen)
drsize_t buflen)
  65        return bufsap,
buflen)
  66{
/*
  29        const str2ent">    2     * RFC 4291, Section2 2.2.24sref">sockaddunsign"L4et/sunrpc/addr.c#L2iref">sap;
in6L62">  62}
    2     *
  26static     2     * Special presentat2ion a251">ipv6_addr_="Lmapped(sap;
in6inc0Lsunrpc/addr.c#L2iref">sap;
in6t.hsap;
in6++L66">  66{
    2     * addresses.2
buf(size_t sap;
in6]+n= =de=addr" class="sref"er t:"er t"net/suL66">  66{
 *
buf, consref="+ccopeid(consr">sptonaddr" class="sref">sptona
buflen, "%pI6c",   62}
 * I2=ipv6_addr_v4mapped" cla2ss="s254ref">bufref="+ccopeid(consr">spton4ddr" class="sref">spton4dr"%pI6c",   62}
    2href="+code=snprintf" cl2ass="255ntf  63
iprpc_ntop6" clasEXPORT_SYMBOL_GPLs="sref">CONFIGEXPORT_SYMBOL_GPLdrspton
  62}
  58        /*
  14    2     * RFC 4291, Section2 2.2.25ace provided by rpcbind versiof">sf="net/s2uet/sc- C_in6> *)   3    2     */
  12    2ode=snprintf" class="sre2f">sn26ollowed by a port number in  12    2.c#L63" id="L63" class="2line"26.
  12 *  12 * I2_t" class="sref">size_t<2/a> <26a scope ID, typically denoted oclaswise NULL1" iref="+ n1"l>
< error occurr na  Caller mustasme="L12">  12    2ar *   3  61        return sf="net/s2uet/sddr" class="sref">sf="net/s2uet/sdr *sap,
buflen)
net/sunrpc/addr.c#L6gfp_flagsbuflen)
  66{
scop26ame="L29">  29        const str2rnt">    26    * RFC 4291, Section262.2.26sref">sockadd"+codunrpc/addr.c#L6port>buflen, buhrefoption value="v2RPCBIND_MAXUADDRPPENs="sref">CONFIGRPCBIND_MAXUADDRPPEN>in6]L62">  62}
    27    */
buhrefoption value="v2RPCBIND_MAXUADDRPENs="sref">CONFIGRPCBIND_MAXUADDRPEN>in6]L62">  62}
    27de=snprintf" class="sre27">sn271">ipv6_addr_unsign"L4shortdunrpc/addr.c#L6portflen, in6L62">  62}
  62}
 *(addr))ra_familsme=")+L29">  29        const str27ode=size27t" class="sref">size_t<27a> <274ref">buf>ase "net/sunrpc/addAF_INETref">addr))AF_INET>in6:29">  29        const str27      ch27r *buf, const v4mapped(socka4ddr" class="sref">socka4drbuflen, buhref, hrefofen" class="sref"="ne>buflen, buhref)L+n= 0"68">  68        char sockaddf">buf, consref="+ccopeid(consNULLs="sref">CONFIGNULLme="L62">  62}
buf, in6in6"net/sunrpc/addockhsbuflen)
 *)sap;
,   62}
snprintf(  62}
    27    * RFC 4291, Section272.2.279" class="sre>ase "net/sunrpc/addAF_INETaddr" class="sreAF_INETa>in6:29">  29        const str28nt">    28    */
buf(socka sockaddrbuflen, buhref, hrefofen" class="sref"="ne>buflen, buhref)L+n= 0"68">  68        char sn281" class="sref">buf, consref="+ccopeid(consNULLs="sref">CONFIGNULLme="L62">  62}
buf, in6in6"net/sunrpc/addockhsbuflen)
 *)sap;
,   62}
buf  62}
size_t<28a> <284ref">bufdefault:29">  29        const str28      ch28r *buf, const ref="+ccopeid(consNULLs="sref">CONFIGNULLme="L62">  62}
sockaddL63">  63
 */<28versal addresses are in28lass28me="L58">  58        ipv6_addr_v4mapped(buf, buflen, buhref, hrefofen" class="sref"port>buflen, buhref)L65">  65        return     28    * RFC 4291, Section282.2.289" class="sref">bufaddr.teg7;u.teg7;u"line" name="L+unrpc/addr.c#L6portflen, in6iref=ref= 8L+unrpc/addr.c#L6portflen, in6irode=f0xff)iref= aode)hrefofen" class="sref"port>buflen, buhref)"68">  68        char     29    */
buf(consNULLs="sref">CONFIGNULLme="L62">  62}
sn29me="L32">  32        sockaddv4mapped(, buflen, buhref, n" class="sref"port>buflen, buhref, hrefofen" class="sref"="ne>buflen, buhref)L+ref= hrefofen" class="sref"="ne>buflen, buhref)L32">  32        buf(consNULLs="sref">CONFIGNULLme="L62">  62}
size_t<29a> <29a sco68">  68        char (du6
buflen, buhref, n" class="sref"gfp_flagsbuflen)
  62}
  63
 */<29versal addresses are in29lass29me="L58">  58         * rec29ent RFCs describing NFS29scop29he universal address format/* name="L14">  14 * of 2tthe external (network) 2i2.2.29ace provided by rpcbind versiof">suet/s2f="net/sc-er_iver)   3 * a3dd 4, and by NFSv4.  Suc3 et/s30dress is a string containing a@a><: applicable a>  14 * p30esentation format IP ad301t/s30ollowed by a port number in  14 * p30c#L63" id="L63" class="302t/s30.
  14 * p30#L64" id="L64" class="l303t/s30c#L14" id="L14" class="line"  @ na:n 
  12 * I30v6 addresses can also i304t/s30a scope ID, typically denoted @ n hr: hrefon 3   12 * I30r *  12 * I30c#L67" id="L67" class="306t/s30s on IPv6 presentation formata@uet/scdoes not have to bspteg t\0"er t-terminalin,3 
  12 * I30versal addresses are in307t/s30v6_adIPv6 presentation formataf">spton()>require propesc"L11" cterminaldr.cto bspsuccnetful.asme="L12">  12 * I30ent RFCs describing NFS308t/s30he universal address format" name="L14">  14  14 * a3nd 4, and by NFSv4.  Suc3h an 31dress is a string containing azero1" iref="+ name="L3">   3 * p3eesentation format IP ad3r1t/s31ollowed by a port number in  61        return  * &3quot;hibyte.lobyte"3 form312ref""net/sunrpc/addr."sref">rpc_ntop6(const struct buflen)
drbuflen)
dr  65        return  *
buf, cons//+code=buflen" class="sref">buflen)
sap,
  65        return  * I3Pv6 addresses can also i3nclud31f">ipv6_addr_f">buf, cons//+code=buflen" class="sref">buflen)
  66{
 * a3 '%' followe3d by 31ef">sL29">  29        const str3eode=size3FC 4291, Section 2.2 for3 deta316ref">sockadd"+code=size_t" class=c"L66" class="lichref, n" class="sref"6" ef">size_t CONFIGRPCBIND_MAXUADDRPEN>in6 + hrefofende=addr" class="sref"er t\0"er t"net/su)]L62">  62}
"&#portloflen, sap;
  62}
snprintf, in6L62">  62}
31me="L40">  40         * a3ude/linux/sunrpc/clnt.h"3 clas320ref">sockaddv4mapped("&#RPCBIND_MAXUADDRPENs="sref">CONFIGRPCBIND_MAXUADDRPEN>in6L66">  66{
 * p3ude/linux/slab.h" class=3"fref321" class="sref">buf  62}
 * &3ude/linux/export.h" clas3s="fr322ref"62">  62}
 *"&#memcpsref">addr))memcps
"&#uet/sddr" class="sreuet/sdr  62}
 * I3LED" class="sref">IS_ENA3BLED<32a sco68">  68        char  * a3c#L26" id="L26" class="l3ine" 325ref">bufa href="+code=a6" ef">size_t   62}
size_t<3/a> <326ref">sockaddbuflen" class="c"L66" class="lichrefinstring">"&#"trrch>sap,

  62}
(addr))unlikels
CONFIGNULLme=")L66">  66{
snprintf(  62}
sockaddv4maa href="+code=aunlikelsref">addr))unlikels
,   66{
buf  62}
 * p3c#L32" id="L32" class="l3ine" 331">ipv6_addr_v4maunrpc/addr.c#L6unlikelsref">addr))unlikels
  66{
 * &3nt">/*
buf  62}
 *
  24#if  * I3     *
ipv6_addr_e=size_t" class=c"L66" class="lichref = =de=addr" class="sref"er t\0"er t"net/suL62">  62}
    3     * Shorthanded ANY a3ddres335ref">bufa href="+code=ac"L66" class="lichrefinstring">"&#"trrch>sap,

  62}
    3     */
ipv6_addr_v4maunrpc/addr.c#L6unlikelsref">addr))unlikels
CONFIGNULLme=")L66">  66{
33f" class="sref">buf  62}
ipv6_addr_v4mapped(addr))unlikels
sap;
  66{
buf  62}
/*
sockaddv4mapped(addr))unlikels
sap;
  66{
    3     * RFC 4291, Section3 2.2.341" class="sref">buf  62}

  62}
 *"&#portflen, in6in6(unsign"L4short)aen" class="sref"porthiref">sap;
"&#portloflen,   62}
 * I3     */
  68        char     3=ipv6_addr_loopback" cla3ss="s345">ipv6_addr_e=size_t" class=c"L66" class="lichref = =de=addr" class="sref"er t\0"er t"net/suL62">  62}
ipv6_addr_v4maunrpc/addr.c#L6ode=ptonddr" class="sref">spton
buflen)
drbuflen, "&#rtrld="L66" class="listrld=
  68        char buf  62}
/*
  19#include <    3     * RFC 4291, Section3 2.2.34sref">sockaddswitchmapped(addr))ra_familsme=")+L29">  29        const str3ent">    3     *
addr))AF_INET>in6:29">  29        const str3ent">    3     * Special presentat3ion a351" class="sref">buf *)sap;
, "&#htonsbuflen)
  62}
    3     * addresses.3
buf *)sap;
  62}
 *
  29        const str3ent"> * I3=ipv6_addr_v4mapped" cla3ss="s35f">ipv6_addr_f">buf *)sap;
, "&#htonsbuflen)
  62}
    3href="+code=snprintf" cl3ass="35sref">buf, const ref="+chrefofe/a> *)sap;
  62}
sockaddL63">  63
  58        /*
snprintf  62}
    3     * RFC 4291, Section3 2.2.359ntf<}62">  62}
    3     */
CONFIGEXPORT_SYMBOL_GPLdr  62}
    3ode=snprintf" class="sre3f">sn36ollowe/prewe/div>


e/div>


The original LXR software by3  62}
projects/lxr">LXR numbunityme="Lcthis experiber al versdr.cby32">  62lxr@f" ux.nome=".
e/div>

lxr.f" ux.no kindly hosdineby32">  62Redpill L" pro ASme="Lcprovideron 3L" ux/+codult1" c