root/fs/afs/afs_vl.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */