diff options
| -rw-r--r-- | support/include/Makefile.am | 2 | ||||
| -rw-r--r-- | support/include/fedfs_admin.h | 342 | ||||
| -rw-r--r-- | support/include/junction.h | 125 |
3 files changed, 469 insertions, 0 deletions
diff --git a/support/include/Makefile.am b/support/include/Makefile.am index 5c80c8b..11cb162 100644 --- a/support/include/Makefile.am +++ b/support/include/Makefile.am @@ -5,7 +5,9 @@ SUBDIRS = nfs rpcsvc sys noinst_HEADERS = \ cld.h \ exportfs.h \ + fedfs_admin.h \ ha-callout.h \ + junction.h \ misc.h \ nfs_mntent.h \ nfs_paths.h \ diff --git a/support/include/fedfs_admin.h b/support/include/fedfs_admin.h new file mode 100644 index 0000000..d8b6715 --- /dev/null +++ b/support/include/fedfs_admin.h @@ -0,0 +1,342 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#ifndef _FEDFS_ADMIN_H_RPCGEN +#define _FEDFS_ADMIN_H_RPCGEN + +#include <rpc/rpc.h> + + +#ifdef __cplusplus +extern "C" { +#endif + + +enum FedFsStatus { + FEDFS_OK = 0, + FEDFS_ERR_ACCESS = 1, + FEDFS_ERR_BADCHAR = 2, + FEDFS_ERR_BADNAME = 3, + FEDFS_ERR_NAMETOOLONG = 4, + FEDFS_ERR_LOOP = 5, + FEDFS_ERR_BADXDR = 6, + FEDFS_ERR_EXIST = 7, + FEDFS_ERR_INVAL = 8, + FEDFS_ERR_IO = 9, + FEDFS_ERR_NOSPC = 10, + FEDFS_ERR_NOTJUNCT = 11, + FEDFS_ERR_NOTLOCAL = 12, + FEDFS_ERR_PERM = 13, + FEDFS_ERR_ROFS = 14, + FEDFS_ERR_SVRFAULT = 15, + FEDFS_ERR_NOTSUPP = 16, + FEDFS_ERR_NSDB_ROUTE = 17, + FEDFS_ERR_NSDB_DOWN = 18, + FEDFS_ERR_NSDB_CONN = 19, + FEDFS_ERR_NSDB_AUTH = 20, + FEDFS_ERR_NSDB_LDAP = 21, + FEDFS_ERR_NSDB_LDAP_VAL = 22, + FEDFS_ERR_NSDB_NONCE = 23, + FEDFS_ERR_NSDB_NOFSN = 24, + FEDFS_ERR_NSDB_NOFSL = 25, + FEDFS_ERR_NSDB_RESPONSE = 26, + FEDFS_ERR_NSDB_FAULT = 27, + FEDFS_ERR_NSDB_PARAMS = 28, + FEDFS_ERR_NSDB_LDAP_REFERRAL = 29, + FEDFS_ERR_NSDB_LDAP_REFERRAL_VAL = 30, + FEDFS_ERR_NSDB_LDAP_REFERRAL_NOTFOLLOWED = 31, + FEDFS_ERR_NSDB_PARAMS_LDAP_REFERRAL = 32, + FEDFS_ERR_PATH_TYPE_UNSUPP = 33, + FEDFS_ERR_DELAY = 34, + FEDFS_ERR_NO_CACHE = 35, + FEDFS_ERR_UNKNOWN_CACHE = 36, + FEDFS_ERR_NO_CACHE_UPDATE = 37, +}; +typedef enum FedFsStatus FedFsStatus; + +typedef struct { + u_int utf8string_len; + char *utf8string_val; +} utf8string; + +typedef utf8string ascii_REQUIRED4; + +typedef utf8string utf8val_REQUIRED4; + +typedef char FedFsUuid[16]; + +struct FedFsNsdbName { + u_int port; + utf8val_REQUIRED4 hostname; +}; +typedef struct FedFsNsdbName FedFsNsdbName; + +typedef ascii_REQUIRED4 FedFsPathComponent; + +typedef struct { + u_int FedFsPathName_len; + FedFsPathComponent *FedFsPathName_val; +} FedFsPathName; + +struct FedFsFsn { + FedFsUuid fsnUuid; + FedFsNsdbName nsdbName; +}; +typedef struct FedFsFsn FedFsFsn; + +enum FedFsFslType { + FEDFS_NFS_FSL = 0, +}; +typedef enum FedFsFslType FedFsFslType; + +struct FedFsNfsFsl { + FedFsUuid fslUuid; + u_int port; + utf8val_REQUIRED4 hostname; + FedFsPathName path; +}; +typedef struct FedFsNfsFsl FedFsNfsFsl; + +struct FedFsFsl { + FedFsFslType type; + union { + FedFsNfsFsl nfsFsl; + } FedFsFsl_u; +}; +typedef struct FedFsFsl FedFsFsl; + +enum FedFsPathType { + FEDFS_PATH_SYS = 0, + FEDFS_PATH_NFS = 1, +}; +typedef enum FedFsPathType FedFsPathType; + +struct FedFsPath { + FedFsPathType type; + union { + FedFsPathName adminPath; + FedFsPathName nfsPath; + } FedFsPath_u; +}; +typedef struct FedFsPath FedFsPath; + +struct FedFsCreateArgs { + FedFsPath path; + FedFsFsn fsn; +}; +typedef struct FedFsCreateArgs FedFsCreateArgs; + +enum FedFsResolveType { + FEDFS_RESOLVE_NONE = 0, + FEDFS_RESOLVE_CACHE = 1, + FEDFS_RESOLVE_NSDB = 2, +}; +typedef enum FedFsResolveType FedFsResolveType; + +struct FedFsLookupArgs { + FedFsPath path; + FedFsResolveType resolve; +}; +typedef struct FedFsLookupArgs FedFsLookupArgs; + +struct FedFsLookupResOk { + FedFsFsn fsn; + struct { + u_int fsl_len; + FedFsFsl *fsl_val; + } fsl; +}; +typedef struct FedFsLookupResOk FedFsLookupResOk; + +struct FedFsLookupResReferralVal { + FedFsNsdbName targetNsdb; + u_int ldapResultCode; +}; +typedef struct FedFsLookupResReferralVal FedFsLookupResReferralVal; + +struct FedFsLookupRes { + FedFsStatus status; + union { + FedFsLookupResOk resok; + u_int ldapResultCode; + FedFsNsdbName targetNsdb; + FedFsLookupResReferralVal resReferralVal; + } FedFsLookupRes_u; +}; +typedef struct FedFsLookupRes FedFsLookupRes; + +enum FedFsConnectionSec { + FEDFS_SEC_NONE = 0, + FEDFS_SEC_TLS = 1, +}; +typedef enum FedFsConnectionSec FedFsConnectionSec; + +struct FedFsNsdbParams { + FedFsConnectionSec secType; + union { + struct { + u_int secData_len; + char *secData_val; + } secData; + } FedFsNsdbParams_u; +}; +typedef struct FedFsNsdbParams FedFsNsdbParams; + +struct FedFsSetNsdbParamsArgs { + FedFsNsdbName nsdbName; + FedFsNsdbParams params; +}; +typedef struct FedFsSetNsdbParamsArgs FedFsSetNsdbParamsArgs; + +struct FedFsGetNsdbParamsRes { + FedFsStatus status; + union { + FedFsNsdbParams params; + } FedFsGetNsdbParamsRes_u; +}; +typedef struct FedFsGetNsdbParamsRes FedFsGetNsdbParamsRes; + +struct FedFsGetLimitedNsdbParamsRes { + FedFsStatus status; + union { + FedFsConnectionSec secType; + } FedFsGetLimitedNsdbParamsRes_u; +}; +typedef struct FedFsGetLimitedNsdbParamsRes FedFsGetLimitedNsdbParamsRes; +#define FEDFS_ADMIN_X + +#define FEDFS_PROG 100418 +#define FEDFS_V1 1 + +#if defined(__STDC__) || defined(__cplusplus) +#define FEDFS_NULL 0 +extern void * fedfs_null_1(void *, CLIENT *); +extern void * fedfs_null_1_svc(void *, struct svc_req *); +#define FEDFS_CREATE_JUNCTION 1 +extern FedFsStatus * fedfs_create_junction_1(FedFsCreateArgs *, CLIENT *); +extern FedFsStatus * fedfs_create_junction_1_svc(FedFsCreateArgs *, struct svc_req *); +#define FEDFS_DELETE_JUNCTION 2 +extern FedFsStatus * fedfs_delete_junction_1(FedFsPath *, CLIENT *); +extern FedFsStatus * fedfs_delete_junction_1_svc(FedFsPath *, struct svc_req *); +#define FEDFS_LOOKUP_JUNCTION 3 +extern FedFsLookupRes * fedfs_lookup_junction_1(FedFsLookupArgs *, CLIENT *); +extern FedFsLookupRes * fedfs_lookup_junction_1_svc(FedFsLookupArgs *, struct svc_req *); +#define FEDFS_CREATE_REPLICATION 7 +extern FedFsStatus * fedfs_create_replication_1(FedFsCreateArgs *, CLIENT *); +extern FedFsStatus * fedfs_create_replication_1_svc(FedFsCreateArgs *, struct svc_req *); +#define FEDFS_DELETE_REPLICATION 8 +extern FedFsStatus * fedfs_delete_replication_1(FedFsPath *, CLIENT *); +extern FedFsStatus * fedfs_delete_replication_1_svc(FedFsPath *, struct svc_req *); +#define FEDFS_LOOKUP_REPLICATION 9 +extern FedFsLookupRes * fedfs_lookup_replication_1(FedFsLookupArgs *, CLIENT *); +extern FedFsLookupRes * fedfs_lookup_replication_1_svc(FedFsLookupArgs *, struct svc_req *); +#define FEDFS_SET_NSDB_PARAMS 4 +extern FedFsStatus * fedfs_set_nsdb_params_1(FedFsSetNsdbParamsArgs *, CLIENT *); +extern FedFsStatus * fedfs_set_nsdb_params_1_svc(FedFsSetNsdbParamsArgs *, struct svc_req *); +#define FEDFS_GET_NSDB_PARAMS 5 +extern FedFsGetNsdbParamsRes * fedfs_get_nsdb_params_1(FedFsNsdbName *, CLIENT *); +extern FedFsGetNsdbParamsRes * fedfs_get_nsdb_params_1_svc(FedFsNsdbName *, struct svc_req *); +#define FEDFS_GET_LIMITED_NSDB_PARAMS 6 +extern FedFsGetLimitedNsdbParamsRes * fedfs_get_limited_nsdb_params_1(FedFsNsdbName *, CLIENT *); +extern FedFsGetLimitedNsdbParamsRes * fedfs_get_limited_nsdb_params_1_svc(FedFsNsdbName *, struct svc_req *); +extern int fedfs_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); + +#else /* K&R C */ +#define FEDFS_NULL 0 +extern void * fedfs_null_1(); +extern void * fedfs_null_1_svc(); +#define FEDFS_CREATE_JUNCTION 1 +extern FedFsStatus * fedfs_create_junction_1(); +extern FedFsStatus * fedfs_create_junction_1_svc(); +#define FEDFS_DELETE_JUNCTION 2 +extern FedFsStatus * fedfs_delete_junction_1(); +extern FedFsStatus * fedfs_delete_junction_1_svc(); +#define FEDFS_LOOKUP_JUNCTION 3 +extern FedFsLookupRes * fedfs_lookup_junction_1(); +extern FedFsLookupRes * fedfs_lookup_junction_1_svc(); +#define FEDFS_CREATE_REPLICATION 7 +extern FedFsStatus * fedfs_create_replication_1(); +extern FedFsStatus * fedfs_create_replication_1_svc(); +#define FEDFS_DELETE_REPLICATION 8 +extern FedFsStatus * fedfs_delete_replication_1(); +extern FedFsStatus * fedfs_delete_replication_1_svc(); +#define FEDFS_LOOKUP_REPLICATION 9 +extern FedFsLookupRes * fedfs_lookup_replication_1(); +extern FedFsLookupRes * fedfs_lookup_replication_1_svc(); +#define FEDFS_SET_NSDB_PARAMS 4 +extern FedFsStatus * fedfs_set_nsdb_params_1(); +extern FedFsStatus * fedfs_set_nsdb_params_1_svc(); +#define FEDFS_GET_NSDB_PARAMS 5 +extern FedFsGetNsdbParamsRes * fedfs_get_nsdb_params_1(); +extern FedFsGetNsdbParamsRes * fedfs_get_nsdb_params_1_svc(); +#define FEDFS_GET_LIMITED_NSDB_PARAMS 6 +extern FedFsGetLimitedNsdbParamsRes * fedfs_get_limited_nsdb_params_1(); +extern FedFsGetLimitedNsdbParamsRes * fedfs_get_limited_nsdb_params_1_svc(); +extern int fedfs_prog_1_freeresult (); +#endif /* K&R C */ + +/* the xdr functions */ + +#if defined(__STDC__) || defined(__cplusplus) +extern bool_t xdr_FedFsStatus (XDR *, FedFsStatus*); +extern bool_t xdr_utf8string (XDR *, utf8string*); +extern bool_t xdr_ascii_REQUIRED4 (XDR *, ascii_REQUIRED4*); +extern bool_t xdr_utf8val_REQUIRED4 (XDR *, utf8val_REQUIRED4*); +extern bool_t xdr_FedFsUuid (XDR *, FedFsUuid); +extern bool_t xdr_FedFsNsdbName (XDR *, FedFsNsdbName*); +extern bool_t xdr_FedFsPathComponent (XDR *, FedFsPathComponent*); +extern bool_t xdr_FedFsPathName (XDR *, FedFsPathName*); +extern bool_t xdr_FedFsFsn (XDR *, FedFsFsn*); +extern bool_t xdr_FedFsFslType (XDR *, FedFsFslType*); +extern bool_t xdr_FedFsNfsFsl (XDR *, FedFsNfsFsl*); +extern bool_t xdr_FedFsFsl (XDR *, FedFsFsl*); +extern bool_t xdr_FedFsPathType (XDR *, FedFsPathType*); +extern bool_t xdr_FedFsPath (XDR *, FedFsPath*); +extern bool_t xdr_FedFsCreateArgs (XDR *, FedFsCreateArgs*); +extern bool_t xdr_FedFsResolveType (XDR *, FedFsResolveType*); +extern bool_t xdr_FedFsLookupArgs (XDR *, FedFsLookupArgs*); +extern bool_t xdr_FedFsLookupResOk (XDR *, FedFsLookupResOk*); +extern bool_t xdr_FedFsLookupResReferralVal (XDR *, FedFsLookupResReferralVal*); +extern bool_t xdr_FedFsLookupRes (XDR *, FedFsLookupRes*); +extern bool_t xdr_FedFsConnectionSec (XDR *, FedFsConnectionSec*); +extern bool_t xdr_FedFsNsdbParams (XDR *, FedFsNsdbParams*); +extern bool_t xdr_FedFsSetNsdbParamsArgs (XDR *, FedFsSetNsdbParamsArgs*); +extern bool_t xdr_FedFsGetNsdbParamsRes (XDR *, FedFsGetNsdbParamsRes*); +extern bool_t xdr_FedFsGetLimitedNsdbParamsRes (XDR *, FedFsGetLimitedNsdbParamsRes*); + +#else /* K&R C */ +extern bool_t xdr_FedFsStatus (); +extern bool_t xdr_utf8string (); +extern bool_t xdr_ascii_REQUIRED4 (); +extern bool_t xdr_utf8val_REQUIRED4 (); +extern bool_t xdr_FedFsUuid (); +extern bool_t xdr_FedFsNsdbName (); +extern bool_t xdr_FedFsPathComponent (); +extern bool_t xdr_FedFsPathName (); +extern bool_t xdr_FedFsFsn (); +extern bool_t xdr_FedFsFslType (); +extern bool_t xdr_FedFsNfsFsl (); +extern bool_t xdr_FedFsFsl (); +extern bool_t xdr_FedFsPathType (); +extern bool_t xdr_FedFsPath (); +extern bool_t xdr_FedFsCreateArgs (); +extern bool_t xdr_FedFsResolveType (); +extern bool_t xdr_FedFsLookupArgs (); +extern bool_t xdr_FedFsLookupResOk (); +extern bool_t xdr_FedFsLookupResReferralVal (); +extern bool_t xdr_FedFsLookupRes (); +extern bool_t xdr_FedFsConnectionSec (); +extern bool_t xdr_FedFsNsdbParams (); +extern bool_t xdr_FedFsSetNsdbParamsArgs (); +extern bool_t xdr_FedFsGetNsdbParamsRes (); +extern bool_t xdr_FedFsGetLimitedNsdbParamsRes (); + +#endif /* K&R C */ + +#ifdef __cplusplus +} +#endif + +#endif /* !_FEDFS_ADMIN_H_RPCGEN */ diff --git a/support/include/junction.h b/support/include/junction.h new file mode 100644 index 0000000..a5f3844 --- /dev/null +++ b/support/include/junction.h @@ -0,0 +1,125 @@ +/* + * @file support/include/junction.h + * @brief Declarations for libjunction.a + */ + +/* + * Copyright 2010, 2018 Oracle. All rights reserved. + * + * This file is part of nfs-utils. + * + * nfs-utils is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 as + * published by the Free Software Foundation. + * + * nfs-utils is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License version 2.0 for more details. + * + * You should have received a copy of the GNU General Public License + * version 2.0 along with nfs-utils. If not, see: + * + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + */ + +#ifndef _NFS_JUNCTION_H_ +#define _NFS_JUNCTION_H_ + +#include <stdint.h> + +/* Machine-generated XDR definitions for FedFS Admin protocol */ +#include "fedfs_admin.h" + +/** + * Contains NFS fileset location information + * + * Each of these represents one server:/rootpath pair. The NFS + * implementation can coalesce multiple pairs into a single + * fs_location4 result if jfl_rootpath is the same across + * multiple servers. + * + * The nfl_server field can contain either one presentation format + * IP address or one DNS hostname. + * + * See Section 11.9 and 11.10 of RFC 5661 or section 4.2.2.3 and + * 4.2.2.4 of the NSDB protocol draft for details. + */ + +struct nfs_fsloc { + struct nfs_fsloc *nfl_next; + + char *nfl_hostname; + uint16_t nfl_hostport; + char **nfl_rootpath; + + struct { + _Bool nfl_varsub; + } nfl_flags; + int32_t nfl_currency; + int32_t nfl_validfor; + + struct { + _Bool nfl_writable, nfl_going, nfl_split; + } nfl_genflags; + struct { + _Bool nfl_rdma; + } nfl_transflags; + struct { + uint8_t nfl_simul, nfl_handle, nfl_fileid; + uint8_t nfl_writever, nfl_change, nfl_readdir; + uint8_t nfl_readrank, nfl_writerank; + uint8_t nfl_readorder, nfl_writeorder; + } nfl_info; +}; + + +/** + ** NFS location data management functions + **/ + +void nfs_free_location(struct nfs_fsloc *location); +void nfs_free_locations(struct nfs_fsloc *locations); +struct nfs_fsloc *nfs_new_location(void); + +__attribute_malloc__ +char **nfs_dup_string_array(char **array); +void nfs_free_string_array(char **array); + + +/** + ** NFS junction management functions + **/ + +FedFsStatus nfs_delete_junction(const char *pathname); +FedFsStatus nfs_add_junction(const char *pathname, + struct nfs_fsloc *locations); +FedFsStatus nfs_get_locations(const char *pathname, + struct nfs_fsloc **locations); +FedFsStatus nfs_is_prejunction(const char *pathname); +FedFsStatus nfs_is_junction(const char *pathname); + + +/** + ** Flush kernel NFS server's export cache + **/ +FedFsStatus junction_flush_exports_cache(void); + +/** + ** Pathname conversion helpers + **/ +void nsdb_free_string_array(char **strings); +FedFsStatus nsdb_path_array_to_posix(char * const *path_array, + char **pathname); +FedFsStatus nsdb_posix_to_path_array(const char *pathname, + char ***path_array); + +/** + ** Readability helpers + **/ + +const char *nsdb_display_fedfsconnectionsec(const FedFsConnectionSec sectype); +const char *nsdb_display_fedfsstatus(const FedFsStatus status); +void nsdb_print_fedfsstatus(const FedFsStatus status); + +#endif /* !_NFS_JUNCTION_H_ */ |
