diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 06:03:02 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 06:03:02 +0000 |
commit | 4897093455a2bf08f3db3a1132cc2f6f5484d77c (patch) | |
tree | 9e6373544263f003139431fb4b08f9766e1ed530 /support/include/junction.h | |
parent | Initial commit. (diff) | |
download | nfs-utils-upstream.tar.xz nfs-utils-upstream.zip |
Adding upstream version 1:2.6.4.upstream/1%2.6.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'support/include/junction.h')
-rw-r--r-- | support/include/junction.h | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/support/include/junction.h b/support/include/junction.h new file mode 100644 index 0000000..7257d80 --- /dev/null +++ b/support/include/junction.h @@ -0,0 +1,167 @@ +/* + * @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> + +/* + * The libjunction APIs use the status codes from the FedFS ADMIN + * protocol, which includes non-errno codes like FEDFS_ERR_NOTJUNCT. + */ +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; + +/** + * 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_fedfsstatus(const FedFsStatus status); +void nsdb_print_fedfsstatus(const FedFsStatus status); + +#endif /* !_NFS_JUNCTION_H_ */ |