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        VLGETCAPABILITIES       = 65537, /* AFS Get server capabilities */
  26};
  27
  28enum 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
  59enum {
  60        YFS_SERVER_INDEX        = 0,
  61        YFS_SERVER_UUID         = 1,
  62        YFS_SERVER_ENDPOINT     = 2,
  63};
  64
  65enum {
  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 */
  75struct 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
 104struct 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
 115struct 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
 136struct afs_address_list {
 137        refcount_t              usage;
 138        unsigned int            version;
 139        unsigned int            nr_addrs;
 140        struct sockaddr_rxrpc   addrs[];
 141};
 142
 143extern void afs_put_address_list(struct afs_address_list *alist);
 144
 145#endif /* AFS_VL_H */
 146