]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - support/include/exportfs.h
libexport.a: Add helpers to manage DNS lookups
[nfs-utils.git] / support / include / exportfs.h
index 9a19cbb68b7c13afeacfdd64b642d4506d8a5ccb..97bb68ef203cdb9992e522b5ad79ac551941e333 100644 (file)
@@ -10,6 +10,8 @@
 #define EXPORTFS_H
 
 #include <netdb.h>
+
+#include "sockaddr.h"
 #include "nfslib.h"
 
 enum {
@@ -35,11 +37,56 @@ typedef struct mclient {
        char *                  m_hostname;
        int                     m_type;
        int                     m_naddr;
-       struct in_addr          m_addrlist[NFSCLNT_ADDRMAX];
+       union nfs_sockaddr      m_addrlist[NFSCLNT_ADDRMAX];
        int                     m_exported;     /* exported to nfsd */
        int                     m_count;
 } nfs_client;
 
+static inline const struct sockaddr *
+get_addrlist(const nfs_client *clp, const int i)
+{
+       return &clp->m_addrlist[i].sa;
+}
+
+static inline const struct sockaddr_in *
+get_addrlist_in(const nfs_client *clp, const int i)
+{
+       return &clp->m_addrlist[i].s4;
+}
+
+static inline const struct sockaddr_in6 *
+get_addrlist_in6(const nfs_client *clp, const int i)
+{
+       return &clp->m_addrlist[i].s6;
+}
+
+static inline void
+set_addrlist_in(nfs_client *clp, const int i, const struct sockaddr_in *sin)
+{
+       memcpy(&clp->m_addrlist[i].s4, sin, sizeof(*sin));
+}
+
+static inline void
+set_addrlist_in6(nfs_client *clp, const int i, const struct sockaddr_in6 *sin6)
+{
+       memcpy(&clp->m_addrlist[i].s6, sin6, sizeof(*sin6));
+}
+
+static inline void
+set_addrlist(nfs_client *clp, const int i, const struct sockaddr *sap)
+{
+       switch (sap->sa_family) {
+       case AF_INET:
+               memcpy(&clp->m_addrlist[i].s4, sap, sizeof(struct sockaddr_in));
+               break;
+#ifdef IPV6_SUPPORTED
+       case AF_INET6:
+               memcpy(&clp->m_addrlist[i].s6, sap, sizeof(struct sockaddr_in6));
+               break;
+#endif
+       }
+}
+
 typedef struct mexport {
        struct mexport *        m_next;
        struct mclient *        m_client;
@@ -69,7 +116,6 @@ extern exp_hash_table exportlist[MCL_MAXTYPES];
 extern nfs_client *            clientlist[MCL_MAXTYPES];
 
 nfs_client *                   client_lookup(char *hname, int canonical);
-void                           client_add(nfs_client *);
 nfs_client *                   client_dup(nfs_client *, struct hostent *);
 int                            client_gettype(char *hname);
 int                            client_check(nfs_client *, struct hostent *);
@@ -100,6 +146,19 @@ void                               xtab_append(nfs_export *);
 
 int                            secinfo_addflavor(struct flav_info *, struct exportent *);
 
+char *                         host_ntop(const struct sockaddr *sap,
+                                               char *buf, const size_t buflen);
+__attribute_malloc__
+struct addrinfo *              host_pton(const char *paddr);
+__attribute_malloc__
+struct addrinfo *              host_addrinfo(const char *hostname);
+__attribute_malloc__
+char *                         host_canonname(const struct sockaddr *sap);
+__attribute_malloc__
+struct addrinfo *              host_reliable_addrinfo(const struct sockaddr *sap);
+__attribute_malloc__
+struct addrinfo *              host_numeric_addrinfo(const struct sockaddr *sap);
+
 int                            rmtab_read(void);
 
 struct nfskey *                        key_lookup(char *hname);