blob: de587a659c6fd1c5fc556232bc0af46a709d07d8 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.nfs.nfs3;
/**
* Some constants for NFSv3
*/
public class Nfs3Constant {
// The local rpcbind/portmapper port.
public final static int SUN_RPCBIND = 111;
// The RPC program number for NFS.
public final static int PROGRAM = 100003;
// The program version number that this server implements.
public final static int VERSION = 3;
// The procedures
public static enum NFSPROC3 {
// the order of the values below are significant.
NULL,
GETATTR,
SETATTR,
LOOKUP,
ACCESS,
READLINK,
READ,
WRITE,
CREATE(false),
MKDIR(false),
SYMLINK(false),
MKNOD(false),
REMOVE(false),
RMDIR(false),
RENAME(false),
LINK(false),
READDIR,
READDIRPLUS,
FSSTAT,
FSINFO,
PATHCONF,
COMMIT;
private final boolean isIdempotent;
private NFSPROC3(boolean isIdempotent) {
this.isIdempotent = isIdempotent;
}
private NFSPROC3() {
this(true);
}
public boolean isIdempotent() {
return isIdempotent;
}
/** @return the int value representing the procedure. */
public int getValue() {
return ordinal();
}
/**
* Convert to NFS procedure.
* @param value specify the index of NFS procedure
* @return the procedure corresponding to the value.
*/
public static NFSPROC3 fromValue(int value) {
if (value < 0 || value >= values().length) {
return null;
}
return values()[value];
}
}
// The maximum size in bytes of the opaque file handle.
public final static int NFS3_FHSIZE = 64;
// The byte size of cookie verifier passed by READDIR and READDIRPLUS.
public final static int NFS3_COOKIEVERFSIZE = 8;
// The size in bytes of the opaque verifier used for exclusive CREATE.
public final static int NFS3_CREATEVERFSIZE = 8;
// The size in bytes of the opaque verifier used for asynchronous WRITE.
public final static int NFS3_WRITEVERFSIZE = 8;
/** Access call request mode */
// File access mode
public static final int ACCESS_MODE_READ = 0x04;
public static final int ACCESS_MODE_WRITE = 0x02;
public static final int ACCESS_MODE_EXECUTE = 0x01;
/** Access call response rights */
// Read data from file or read a directory.
public final static int ACCESS3_READ = 0x0001;
// Look up a name in a directory (no meaning for non-directory objects).
public final static int ACCESS3_LOOKUP = 0x0002;
// Rewrite existing file data or modify existing directory entries.
public final static int ACCESS3_MODIFY = 0x0004;
// Write new data or add directory entries.
public final static int ACCESS3_EXTEND = 0x0008;
// Delete an existing directory entry.
public final static int ACCESS3_DELETE = 0x0010;
// Execute file (no meaning for a directory).
public final static int ACCESS3_EXECUTE = 0x0020;
/** File and directory attribute mode bits */
// Set user ID on execution.
public final static int MODE_S_ISUID = 0x00800;
// Set group ID on execution.
public final static int MODE_S_ISGID = 0x00400;
// Save swapped text (not defined in POSIX).
public final static int MODE_S_ISVTX = 0x00200;
// Read permission for owner.
public final static int MODE_S_IRUSR = 0x00100;
// Write permission for owner.
public final static int MODE_S_IWUSR = 0x00080;
// Execute permission for owner on a file. Or lookup (search) permission for
// owner in directory.
public final static int MODE_S_IXUSR = 0x00040;
// Read permission for group.
public final static int MODE_S_IRGRP = 0x00020;
// Write permission for group.
public final static int MODE_S_IWGRP = 0x00010;
// Execute permission for group on a file. Or lookup (search) permission for
// group in directory.
public final static int MODE_S_IXGRP = 0x00008;
// Read permission for others.
public final static int MODE_S_IROTH = 0x00004;
// Write permission for others.
public final static int MODE_S_IWOTH = 0x00002;
// Execute permission for others on a file. Or lookup (search) permission for
// others in directory.
public final static int MODE_S_IXOTH = 0x00001;
public final static int MODE_ALL = MODE_S_ISUID | MODE_S_ISGID | MODE_S_ISVTX
| MODE_S_ISVTX | MODE_S_IRUSR | MODE_S_IRUSR | MODE_S_IWUSR
| MODE_S_IXUSR | MODE_S_IRGRP | MODE_S_IWGRP | MODE_S_IXGRP
| MODE_S_IROTH | MODE_S_IWOTH | MODE_S_IXOTH;
/** Write call flavors */
public enum WriteStableHow {
// the order of the values below are significant.
UNSTABLE,
DATA_SYNC,
FILE_SYNC;
public int getValue() {
return ordinal();
}
public static WriteStableHow fromValue(int id) {
return values()[id];
}
}
/**
* This is a cookie that the client can use to determine whether the server
* has changed state between a call to WRITE and a subsequent call to either
* WRITE or COMMIT. This cookie must be consistent during a single instance of
* the NFS version 3 protocol service and must be unique between instances of
* the NFS version 3 protocol server, where uncommitted data may be lost.
*/
public final static long WRITE_COMMIT_VERF = System.currentTimeMillis();
/** FileSystemProperties */
public final static int FSF3_LINK = 0x0001;
public final static int FSF3_SYMLINK = 0x0002;
public final static int FSF3_HOMOGENEOUS = 0x0008;
public final static int FSF3_CANSETTIME = 0x0010;
/** Create options */
public final static int CREATE_UNCHECKED = 0;
public final static int CREATE_GUARDED = 1;
public final static int CREATE_EXCLUSIVE = 2;
/** Size for nfs exports cache */
public static final String NFS_EXPORTS_CACHE_SIZE_KEY = "nfs.exports.cache.size";
public static final int NFS_EXPORTS_CACHE_SIZE_DEFAULT = 512;
/** Expiration time for nfs exports cache entry */
public static final String NFS_EXPORTS_CACHE_EXPIRYTIME_MILLIS_KEY = "nfs.exports.cache.expirytime.millis";
public static final long NFS_EXPORTS_CACHE_EXPIRYTIME_MILLIS_DEFAULT = 15 * 60 * 1000; // 15 min
}