libc {
  GLIBC_2.0 {
    # functions with required interface outside normal name space
    __ivaliduser; __check_rhosts_file; __rcmd_errstr;

    # variables in normal name space
    rexecoptions;

    # e*
    endaliasent; endhostent; endnetent; endnetgrent; endprotoent; endservent;

    # e*
    ether_aton; ether_aton_r; ether_hostton; ether_line; ether_ntoa;
    ether_ntoa_r; ether_ntohost;

    # g*
    getaliasbyname; getaliasbyname_r; getaliasent; getaliasent_r;
    getdomainname; gethostbyaddr; gethostbyaddr_r; gethostbyname;
    gethostbyname2; gethostbyname2_r; gethostbyname_r; gethostent;
    gethostent_r; getnetbyaddr; getnetbyaddr_r; getnetbyname;
    getnetbyname_r; getnetent; getnetent_r; getnetgrent; getnetgrent_r;
    getprotobyname; getprotobyname_r; getprotobynumber;
    getprotobynumber_r; getprotoent; getprotoent_r;
    getservbyname; getservbyname_r; getservbyport;
    getservbyport_r; getservent; getservent_r;

    # h*
    htonl; htons;

    # i*
    inet_addr; inet_aton; inet_lnaof; inet_makeaddr; inet_netof; inet_network;
    inet_nsap_addr; inet_nsap_ntoa; inet_ntoa; inet_ntop; inet_pton; innetgr;
    iruserok;

    # n*
    ntohl; ntohs;

    # r*
    rcmd; rexec; rresvport; ruserok; ruserpass;

    # s*
    setaliasent; setnetent; setnetgrent; setprotoent; setservent;
  }
  GLIBC_2.1 {
    # variables in normal name space
    in6addr_any; in6addr_loopback;

    # i*
    if_freenameindex; if_indextoname; if_nameindex; if_nametoindex;
  }
  GLIBC_2.1.2 {
    # g*
    getaliasbyname_r; getaliasent_r; gethostbyaddr_r; gethostbyname2_r;
    gethostbyname_r; gethostent_r; getnetbyaddr_r; getnetbyname_r;
    getnetent_r; getnetgrent_r; getprotobyname_r; getprotobynumber_r;
    getprotoent_r; getservbyname_r;
  }
  GLIBC_2.2 {
    # i*
    iruserok_af;
    # r*
    rcmd_af; rexec_af; rresvport_af; ruserok_af;
  }
  GLIBC_2.3 {
    # f*
    freeifaddrs;
    # g*
    getifaddrs;
  }
  GLIBC_2.3.3 {
    inet6_option_space; inet6_option_init; inet6_option_append;
    inet6_option_alloc; inet6_option_next; inet6_option_find;
  }
  GLIBC_2.3.4 {
    getipv4sourcefilter; setipv4sourcefilter;
    getsourcefilter; setsourcefilter;
  }
  GLIBC_2.5 {
    inet6_opt_init; inet6_opt_append; inet6_opt_finish; inet6_opt_set_val;
    inet6_opt_next; inet6_opt_find; inet6_opt_get_val;
    inet6_rth_space; inet6_rth_init; inet6_rth_add; inet6_rth_reverse;
    inet6_rth_segments; inet6_rth_getaddr;
  }
  GLIBC_PRIVATE {
    # functions used in other libraries
    __internal_endnetgrent; __internal_getnetgrent_r;
    __internal_setnetgrent;

    # Used from nscd.
    __inet6_scopeid_pton;
  }
}
