]> www.infradead.org Git - users/dhowells/kafs-utils.git/commitdiff
xg: Add YFS VL server operations
authorDavid Howells <dhowells@redhat.com>
Mon, 29 Jun 2020 08:57:54 +0000 (09:57 +0100)
committerDavid Howells <dhowells@redhat.com>
Fri, 10 Jul 2020 20:24:50 +0000 (21:24 +0100)
Signed-off-by: David Howells <dhowells@redhat.com>
rpc-api/yfs.xg
rpc-api/yfs_common.h [new file with mode: 0644]
rpc-api/yfs_vldb.xg [new file with mode: 0644]

index e10cf1b5c805779a36f0fb9f4a6dec5ae5850f28..d37f9d0c49149bc6413665791121b503b72f5ad7 100644 (file)
@@ -30,7 +30,6 @@ typedef uint64_t YFSSize;     /* in bytes */
 typedef uint64_t YFSVolSize;   /* in KiB */
 typedef int64_t  YFSUserId;
 typedef uint64_t YFSIndex;
-typedef uint64_t YFSVolumeId;
 typedef struct opr_time YFSRelTime64;
 typedef struct opr_time YFSAbsTime64;
 
@@ -354,16 +353,10 @@ UpdateSymlink(
 
 /* 64163 was older revision of RemoveACL */
 
-#define ENDPOINT_IPV4   0
-#define ENDPOINT_IPV6   1
-struct endpoint {
-       uint32_t        Type;
-       opaque          Data;
-};
-typedef endpoint eplist<FLUSHMAX>;
 
 /* 64164 was an older revision of WhoAmI */
 
+typedef endpoint eplist<FLUSHMAX>;
 FlushCPS(
        IN  RPCFlags Flags,
        IN  YFSViceIds *IdsArray,
diff --git a/rpc-api/yfs_common.h b/rpc-api/yfs_common.h
new file mode 100644 (file)
index 0000000..6ae4eeb
--- /dev/null
@@ -0,0 +1,26 @@
+/* -*- c -*-
+ *
+ * Auristor/YFS fileserver and cache manager opcodes.  Please do not add or
+ * modify opcodes here without consulting Auristor, Inc..
+ *
+ * Copyright (c) 2015-2020 AuriStor, Inc. <https://www.auristor.com/>
+ * 255 W 94th St, New York NY 10025-6985 United States, Earth, Sol, Milky Way
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public Licence
+ * as published by the Free Software Foundation; either version
+ * 2 of the Licence, or (at your option) any later version.
+ */
+
+typedef uint32_t       afs_uint32;
+typedef int32_t                afs_int32;
+typedef uint64_t       afs_uint64;
+typedef int64_t                afs_int64;
+typedef afs_uint64     YFSVolumeId;
+
+const ENDPOINT_IPV4 = 0;
+const ENDPOINT_IPV6 = 1;
+struct endpoint {
+       uint32_t        Type;
+       opaque          Data; /* Address and port */
+};
diff --git a/rpc-api/yfs_vldb.xg b/rpc-api/yfs_vldb.xg
new file mode 100644 (file)
index 0000000..ff80240
--- /dev/null
@@ -0,0 +1,217 @@
+/* -*- c -*-
+ *
+ * Auristor/YFS Volume Location server opcodes.  Please do not add or modify
+ * opcodes here without consulting Auristor, Inc..
+ *
+ * Copyright (c) 2015-2020 AuriStor, Inc. <https://www.auristor.com/>
+ * 255 W 94th St, New York NY 10025-6985 United States, Earth, Sol, Milky Way
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public Licence
+ * as published by the Free Software Foundation; either version
+ * 2 of the Licence, or (at your option) any later version.
+ */
+
+package YFSVL_
+
+const YFSVL_SERVICEID = 2503;
+const   YVL_MAXNAMELEN  =      512;
+const   YVL_MAXNSERVERS =       128;
+
+/*
+ * VL_MINVOLUMEID represents the lowest volume id that can be issued
+ * by the Location Service.  All volume ids smaller than the
+ * VL_MINVOLUMEID are reserved for allocation and internal use by
+ * individual volservers.
+ */
+const VL_MINVOLUMEID    =      0x100002;
+
+
+/*
+ * When vldbentry_location.partition is VLPART_UUID the uuid field is a
+ * partition uuid instead of a fileserver uuid.
+ */
+const VLPART_UUID     = 0xFFFFFFFF;
+
+struct vldbentry64_location {
+       afsUUID         uuid;
+       afs_uint32      unique;
+       afs_uint32      partition;
+       afs_uint32      flags;
+};
+typedef vldbentry64_location vldbentry64_locations<YVL_MAXNSERVERS>;
+
+struct vldbentry64   {
+       string                  name<YVL_MAXNAMELEN>;
+       vldbentry64_locations   locations;
+       YFSVolumeId             volumeId[MAXTYPES];
+       YFSVolumeId             cloneId;
+       afs_uint32              flags;
+       afs_uint32              matchType;
+       afs_uint32              matchLocation;
+};
+
+const NMAXBULKENTRIES64 = 10000000;
+typedef vldbentry64 bulkentries64<NMAXBULKENTRIES64>;
+
+const MAXENDPOINTS = 16;
+typedef endpoint endpoints<MAXENDPOINTS>;
+
+/* Security flags */
+const VLF_SEC_RXNULL           = 0x010000;
+const VLF_SEC_RXKAD_CLEAR      = 0x020000;
+const VLF_SEC_RXKAD_AUTH       = 0x040000;
+const VLF_SEC_RXKAD_CRYPT      = 0x080000;
+const VLF_SEC_YFS_RXGK_CLEAR   = 0x100000;
+const VLF_SEC_YFS_RXGK_AUTH    = 0x200000;
+const VLF_SEC_YFS_RXGK_CRYPT   = 0x400000;
+
+const VLF_SEC_MASK             = 0x0fff0000;
+
+/* RegisterAddrs flags */
+const VLREGADDR_CLASS_RXNULL           = 0x01;
+const VLREGADDR_CLASS_RXKAD            = 0x02;
+const VLREGADDR_CLASS_YFS_RXGK         = 0x03;
+
+const VLREGADDR_LEVEL_RXNULL_CLEAR     = 0x00;
+
+const VLREGADDR_LEVEL_RXKAD_CLEAR      = 0x01;
+const VLREGADDR_LEVEL_RXKAD_AUTH       = 0x02;
+const VLREGADDR_LEVEL_RXKAD_CRYPT      = 0x03;
+
+const VLREGADDR_LEVEL_YFS_RXGK_CLEAR   = 0x01;
+const VLREGADDR_LEVEL_YFS_RXGK_AUTH    = 0x02;
+const VLREGADDR_LEVEL_YFS_RXGK_CRYPT   = 0x03;
+
+const MAX_SEC_LEVELS = 16;
+struct sec_level {
+    afs_uint32 sec_class;
+    afs_uint32 level;
+};
+typedef struct sec_level sec_levels<MAX_SEC_LEVELS>;
+
+
+RegisterAddrs(
+  IN afsUUID *uuidp,
+  IN sec_levels *levels,
+  IN endpoints *addrs
+) = 64001;
+
+const YFS_SERVER_INDEX = 0;
+const YFS_SERVER_UUID = 1;
+const YFS_SERVER_ENDPOINT = 2;
+
+union yfsServerAttributes switch (afs_int32 type) {
+  case YFS_SERVER_INDEX:
+    afs_int32 index;
+  case YFS_SERVER_UUID:
+    opr_uuid uuid;
+  case YFS_SERVER_ENDPOINT:
+    endpoint endpoint;
+};
+
+altonly GetEndpoints(
+  IN yfsServerAttributes *attr,
+  OUT opr_uuid *uuid,
+  OUT afs_int32 *uniquifier,
+  OUT endpoints *fsEndpoints,
+  OUT endpoints *volEndpoints
+) = 64002;
+
+CreateEntryU(
+  IN uvldbentry *newentry
+) = 64003;
+
+ReplaceEntryU(
+  IN afs_uint32 Volid,
+  IN afs_int32 voltype,
+  IN uvldbentry *newentry,
+  IN afs_int32 ReleaseType
+) = 64004;
+
+ListAttributesU2(
+  IN VldbListByAttributes *attributes,
+  IN string volumename<YVL_MAXNAMELEN>,
+  IN  afs_int32 startindex,
+  OUT afs_int32 *nentries,
+  OUT ubulkentries *blkentries,
+  OUT afs_int32 *nextstartindex
+) = 64005;
+
+CreateEntry64(
+  IN vldbentry64 *newentry
+) = 64006;
+
+ReplaceEntry64(
+  IN  YFSVolumeId volId,
+  IN  afs_int32 voltype,
+  IN  vldbentry64 *newentry,
+  IN  afs_int32 ReleaseType
+) = 64007;
+
+DeleteEntry64(
+  IN  YFSVolumeId volId,
+  IN  afs_int32 voltype
+) = 64008;
+
+GetNewVolumeId64(
+  IN  afs_uint64 bumpcount,
+  OUT YFSVolumeId *newvolId
+) = 64009;
+
+SetLock64(
+  IN  YFSVolumeId volId,
+  IN  afs_int32 voltype,
+  IN  afs_int32 voloper
+) = 64010;
+
+ReleaseLock64(
+  IN  YFSVolumeId volId,
+  IN  afs_int32 voltype,
+  IN  afs_int32 ReleaseType
+) = 64011;
+
+/*
+ * If bit one is unset, return FS UUIDs in vldbentry64_location.uuid
+ */
+const VLGET_FS_UUID    = 0x0;
+const VLGET_PART_UUID  = 0x1;
+
+GetEntryByName64(
+  IN  string volumename<YVL_MAXNAMELEN>,
+  IN afs_uint32 flags,                 /* VLGET flags */
+  OUT vldbentry64 *entry
+) = 64012;
+
+GetEntryByID64(
+  IN  YFSVolumeId volId,
+  IN  afs_int32 voltype,
+  IN afs_uint32 flags,                 /* VLGET flags */
+  OUT vldbentry64 *entry
+) = 64013;
+
+const YVL_MAXCELLNAME = 256;
+
+GetCellName(
+  OUT string cellName<YVL_MAXCELLNAME>
+) = 64014;
+
+altonly GetFSSecLevels(
+  IN  afsUUID *fs_uuid,
+  OUT sec_levels *fs_sec_levels
+) = 64015;
+
+altonly RemoveFS(
+  IN  afsUUID *fs_uuid
+) = 64816;
+
+altonly RegisterEndpoints(
+  IN  afsUUID *uuidp,
+  IN  sec_levels *levels,
+  IN  endpoints *addrs,
+  OUT string cellName<YVL_MAXCELLNAME>
+) = 64817;
+
+EchoEndpoint(
+  OUT endpoint ep
+) multi = 64818;