linux/include/linux/auto_fs4.h
<<
>>
Prefs
   1/* -*- c -*-
   2 * linux/include/linux/auto_fs4.h
   3 *
   4 * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
   5 *
   6 * This file is part of the Linux kernel and is made available under
   7 * the terms of the GNU General Public License, version 2, or at your
   8 * option, any later version, incorporated herein by reference.
   9 */
  10
  11#ifndef _LINUX_AUTO_FS4_H
  12#define _LINUX_AUTO_FS4_H
  13
  14/* Include common v3 definitions */
  15#include <linux/types.h>
  16#include <linux/auto_fs.h>
  17
  18/* autofs v4 definitions */
  19#undef AUTOFS_PROTO_VERSION
  20#undef AUTOFS_MIN_PROTO_VERSION
  21#undef AUTOFS_MAX_PROTO_VERSION
  22
  23#define AUTOFS_PROTO_VERSION            5
  24#define AUTOFS_MIN_PROTO_VERSION        3
  25#define AUTOFS_MAX_PROTO_VERSION        5
  26
  27#define AUTOFS_PROTO_SUBVERSION         1
  28
  29/* Mask for expire behaviour */
  30#define AUTOFS_EXP_IMMEDIATE            1
  31#define AUTOFS_EXP_LEAVES               2
  32
  33#define AUTOFS_TYPE_ANY                 0U
  34#define AUTOFS_TYPE_INDIRECT            1U
  35#define AUTOFS_TYPE_DIRECT              2U
  36#define AUTOFS_TYPE_OFFSET              4U
  37
  38static inline void set_autofs_type_indirect(unsigned int *type)
  39{
  40        *type = AUTOFS_TYPE_INDIRECT;
  41        return;
  42}
  43
  44static inline unsigned int autofs_type_indirect(unsigned int type)
  45{
  46        return (type == AUTOFS_TYPE_INDIRECT);
  47}
  48
  49static inline void set_autofs_type_direct(unsigned int *type)
  50{
  51        *type = AUTOFS_TYPE_DIRECT;
  52        return;
  53}
  54
  55static inline unsigned int autofs_type_direct(unsigned int type)
  56{
  57        return (type == AUTOFS_TYPE_DIRECT);
  58}
  59
  60static inline void set_autofs_type_offset(unsigned int *type)
  61{
  62        *type = AUTOFS_TYPE_OFFSET;
  63        return;
  64}
  65
  66static inline unsigned int autofs_type_offset(unsigned int type)
  67{
  68        return (type == AUTOFS_TYPE_OFFSET);
  69}
  70
  71static inline unsigned int autofs_type_trigger(unsigned int type)
  72{
  73        return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET);
  74}
  75
  76/*
  77 * This isn't really a type as we use it to say "no type set" to
  78 * indicate we want to search for "any" mount in the
  79 * autofs_dev_ioctl_ismountpoint() device ioctl function.
  80 */
  81static inline void set_autofs_type_any(unsigned int *type)
  82{
  83        *type = AUTOFS_TYPE_ANY;
  84        return;
  85}
  86
  87static inline unsigned int autofs_type_any(unsigned int type)
  88{
  89        return (type == AUTOFS_TYPE_ANY);
  90}
  91
  92/* Daemon notification packet types */
  93enum autofs_notify {
  94        NFY_NONE,
  95        NFY_MOUNT,
  96        NFY_EXPIRE
  97};
  98
  99/* Kernel protocol version 4 packet types */
 100
 101/* Expire entry (umount request) */
 102#define autofs_ptype_expire_multi       2
 103
 104/* Kernel protocol version 5 packet types */
 105
 106/* Indirect mount missing and expire requests. */
 107#define autofs_ptype_missing_indirect   3
 108#define autofs_ptype_expire_indirect    4
 109
 110/* Direct mount missing and expire requests */
 111#define autofs_ptype_missing_direct     5
 112#define autofs_ptype_expire_direct      6
 113
 114/* v4 multi expire (via pipe) */
 115struct autofs_packet_expire_multi {
 116        struct autofs_packet_hdr hdr;
 117        autofs_wqt_t wait_queue_token;
 118        int len;
 119        char name[NAME_MAX+1];
 120};
 121
 122union autofs_packet_union {
 123        struct autofs_packet_hdr hdr;
 124        struct autofs_packet_missing missing;
 125        struct autofs_packet_expire expire;
 126        struct autofs_packet_expire_multi expire_multi;
 127};
 128
 129/* autofs v5 common packet struct */
 130struct autofs_v5_packet {
 131        struct autofs_packet_hdr hdr;
 132        autofs_wqt_t wait_queue_token;
 133        __u32 dev;
 134        __u64 ino;
 135        __u32 uid;
 136        __u32 gid;
 137        __u32 pid;
 138        __u32 tgid;
 139        __u32 len;
 140        char name[NAME_MAX+1];
 141};
 142
 143typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
 144typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
 145typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
 146typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
 147
 148union autofs_v5_packet_union {
 149        struct autofs_packet_hdr hdr;
 150        struct autofs_v5_packet v5_packet;
 151        autofs_packet_missing_indirect_t missing_indirect;
 152        autofs_packet_expire_indirect_t expire_indirect;
 153        autofs_packet_missing_direct_t missing_direct;
 154        autofs_packet_expire_direct_t expire_direct;
 155};
 156
 157#define AUTOFS_IOC_EXPIRE_MULTI         _IOW(0x93,0x66,int)
 158#define AUTOFS_IOC_EXPIRE_INDIRECT      AUTOFS_IOC_EXPIRE_MULTI
 159#define AUTOFS_IOC_EXPIRE_DIRECT        AUTOFS_IOC_EXPIRE_MULTI
 160#define AUTOFS_IOC_PROTOSUBVER          _IOR(0x93,0x67,int)
 161#define AUTOFS_IOC_ASKUMOUNT            _IOR(0x93,0x70,int)
 162
 163
 164#endif /* _LINUX_AUTO_FS4_H */
 165