linux/fs/afs/afs_vl.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/* AFS Volume Location Service client interface
   3 *
   4 * Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved.
   5 * Written by David Howells (dhowells@redhat.com)
   6 */
   7
   8#ifndef AFS_VL_H
   9#define AFS_VL_H
  10
  11#include "afs.h"
  12
  13#define AFS_VL_PORT             7003    /* volume location service port */
  14#define VL_SERVICE              52      /* RxRPC service ID for the Volume Location service */
  15#define YFS_VL_SERVICE          2503    /* Service ID for AuriStor upgraded VL service */
  16
  17enum AFSVL_Operations {
  18        VLGETENTRYBYID          = 503,  /* AFS Get VLDB entry by ID */
  19        VLGETENTRYBYNAME        = 504,  /* AFS Get VLDB entry by name */
  20        VLPROBE                 = 514,  /* AFS probe VL service */
  21        VLGETENTRYBYIDU         = 526,  /* AFS Get VLDB entry by ID (UUID-variant) */
  22        VLGETENTRYBYNAMEU       = 527,  /* AFS Get VLDB entry by name (UUID-variant) */
  23        VLGETADDRSU             = 533,  /* AFS Get addrs for fileserver */
  24        YVLGETENDPOINTS         = 64002, /* YFS Get endpoints for file/volume server */
  25        YVLGETCELLNAME          = 64014, /* YFS Get actual cell name */
  26        VLGETCAPABILITIES       = 65537, /* AFS Get server capabilities */
  27};
  28
  29enum AFSVL_Errors {
  30        AFSVL_IDEXIST           = 363520,       /* Volume Id entry exists in vl database */
  31        AFSVL_IO                = 363521,       /* I/O related error */
  32        AFSVL_NAMEEXIST         = 363522,       /* Volume name entry exists in vl database */
  33        AFSVL_CREATEFAIL        = 363523,       /* Internal creation failure */
  34        AFSVL_NOENT             = 363524,       /* No such entry */
  35        AFSVL_EMPTY             = 363525,       /* Vl database is empty */
  36        AFSVL_ENTDELETED        = 363526,       /* Entry is deleted (soft delete) */
  37        AFSVL_BADNAME           = 363527,       /* Volume name is illegal */
  38        AFSVL_BADINDEX          = 363528,       /* Index is out of range */
  39        AFSVL_BADVOLTYPE        = 363529,       /* Bad volume type */
  40        AFSVL_BADSERVER         = 363530,       /* Illegal server number (out of range) */
  41        AFSVL_BADPARTITION      = 363531,       /* Bad partition number */
  42        AFSVL_REPSFULL          = 363532,       /* Run out of space for Replication sites */
  43        AFSVL_NOREPSERVER       = 363533,       /* No such Replication server site exists */
  44        AFSVL_DUPREPSERVER      = 363534,       /* Replication site already exists */
  45        AFSVL_RWNOTFOUND        = 363535,       /* Parent R/W entry not found */
  46        AFSVL_BADREFCOUNT       = 363536,       /* Illegal Reference Count number */
  47        AFSVL_SIZEEXCEEDED      = 363537,       /* Vl size for attributes exceeded */
  48        AFSVL_BADENTRY          = 363538,       /* Bad incoming vl entry */
  49        AFSVL_BADVOLIDBUMP      = 363539,       /* Illegal max volid increment */
  50        AFSVL_IDALREADYHASHED   = 363540,       /* RO/BACK id already hashed */
  51        AFSVL_ENTRYLOCKED       = 363541,       /* Vl entry is already locked */
  52        AFSVL_BADVOLOPER        = 363542,       /* Bad volume operation code */
  53        AFSVL_BADRELLOCKTYPE    = 363543,       /* Bad release lock type */
  54        AFSVL_RERELEASE         = 363544,       /* Status report: last release was aborted */
  55        AFSVL_BADSERVERFLAG     = 363545,       /* Invalid replication site server flag */
  56        AFSVL_PERM              = 363546,       /* No permission access */
  57        AFSVL_NOMEM             = 363547,       /* malloc/realloc failed to alloc enough memory */
  58};
  59
  60enum {
  61        YFS_SERVER_INDEX        = 0,
  62        YFS_SERVER_UUID         = 1,
  63        YFS_SERVER_ENDPOINT     = 2,
  64};
  65
  66enum {
  67        YFS_ENDPOINT_IPV4       = 0,
  68        YFS_ENDPOINT_IPV6       = 1,
  69};
  70
  71#define YFS_MAXENDPOINTS        16
  72
  73/*
  74 * maps to "struct vldbentry" in vvl-spec.pdf
  75 */
  76struct afs_vldbentry {
  77        char            name[65];               /* name of volume (with NUL char) */
  78        afs_voltype_t   type;                   /* volume type */
  79        unsigned        num_servers;            /* num servers that hold instances of this vol */
  80        unsigned        clone_id;               /* cloning ID */
  81
  82        unsigned        flags;
  83#define AFS_VLF_RWEXISTS        0x1000          /* R/W volume exists */
  84#define AFS_VLF_ROEXISTS        0x2000          /* R/O volume exists */
  85#define AFS_VLF_BACKEXISTS      0x4000          /* backup volume exists */
  86
  87        afs_volid_t     volume_ids[3];          /* volume IDs */
  88
  89        struct {
  90                struct in_addr  addr;           /* server address */
  91                unsigned        partition;      /* partition ID on this server */
  92                unsigned        flags;          /* server specific flags */
  93#define AFS_VLSF_NEWREPSITE     0x0001  /* Ignore all 'non-new' servers */
  94#define AFS_VLSF_ROVOL          0x0002  /* this server holds a R/O instance of the volume */
  95#define AFS_VLSF_RWVOL          0x0004  /* this server holds a R/W instance of the volume */
  96#define AFS_VLSF_BACKVOL        0x0008  /* this server holds a backup instance of the volume */
  97#define AFS_VLSF_UUID           0x0010  /* This server is referred to by its UUID */
  98#define AFS_VLSF_DONTUSE        0x0020  /* This server ref should be ignored */
  99        } servers[8];
 100};
 101
 102#define AFS_VLDB_MAXNAMELEN 65
 103
 104
 105struct afs_ListAddrByAttributes__xdr {
 106        __be32                  Mask;
 107#define AFS_VLADDR_IPADDR       0x1     /* Match by ->ipaddr */
 108#define AFS_VLADDR_INDEX        0x2     /* Match by ->index */
 109#define AFS_VLADDR_UUID         0x4     /* Match by ->uuid */
 110        __be32                  ipaddr;
 111        __be32                  index;
 112        __be32                  spare;
 113        struct afs_uuid__xdr    uuid;
 114};
 115
 116struct afs_uvldbentry__xdr {
 117        __be32                  name[AFS_VLDB_MAXNAMELEN];
 118        __be32                  nServers;
 119        struct afs_uuid__xdr    serverNumber[AFS_NMAXNSERVERS];
 120        __be32                  serverUnique[AFS_NMAXNSERVERS];
 121        __be32                  serverPartition[AFS_NMAXNSERVERS];
 122        __be32                  serverFlags[AFS_NMAXNSERVERS];
 123        __be32                  volumeId[AFS_MAXTYPES];
 124        __be32                  cloneId;
 125        __be32                  flags;
 126        __be32                  spares1;
 127        __be32                  spares2;
 128        __be32                  spares3;
 129        __be32                  spares4;
 130        __be32                  spares5;
 131        __be32                  spares6;
 132        __be32                  spares7;
 133        __be32                  spares8;
 134        __be32                  spares9;
 135};
 136
 137struct afs_address_list {
 138        refcount_t              usage;
 139        unsigned int            version;
 140        unsigned int            nr_addrs;
 141        struct sockaddr_rxrpc   addrs[];
 142};
 143
 144extern void afs_put_address_list(struct afs_address_list *alist);
 145
 146#endif /* AFS_VL_H */
 147