version 1.21, 2004/05/07 15:06:15 |
version 1.22, 2004/05/07 15:33:17 |
|
|
KFSipsecspdir, /* ipsec security policy (top dir) */ |
KFSipsecspdir, /* ipsec security policy (top dir) */ |
KFSipsecsa, /* ipsec security association entry */ |
KFSipsecsa, /* ipsec security association entry */ |
KFSipsecsp, /* ipsec security policy entry */ |
KFSipsecsp, /* ipsec security policy entry */ |
|
KFSsubdir, /* directory */ |
|
KFSlasttype, /* last used type */ |
|
KFSmaxtype = (1<<6) - 1 /* last possible type */ |
} kfstype; |
} kfstype; |
|
|
/* |
/* |
* control data for the kern file system. |
* Control data for the kern file system. |
*/ |
*/ |
struct kern_target { |
struct kern_target { |
u_char kt_type; |
u_char kt_type; |
Line 72 struct kern_target { |
|
Line 75 struct kern_target { |
|
mode_t kt_mode; |
mode_t kt_mode; |
}; |
}; |
|
|
|
struct dyn_kern_target { |
|
struct kern_target dkt_kt; |
|
SIMPLEQ_ENTRY(dyn_kern_target) dkt_queue; |
|
}; |
|
|
|
struct kernfs_subdir { |
|
SIMPLEQ_HEAD(,dyn_kern_target) ks_entries; |
|
unsigned int ks_nentries; |
|
unsigned int ks_dirs; |
|
const struct kern_target *ks_parent; |
|
}; |
|
|
struct kernfs_node { |
struct kernfs_node { |
LIST_ENTRY(kernfs_node) kfs_hash; /* hash chain */ |
LIST_ENTRY(kernfs_node) kfs_hash; /* hash chain */ |
TAILQ_ENTRY(kernfs_node) kfs_list; /* flat list */ |
TAILQ_ENTRY(kernfs_node) kfs_list; /* flat list */ |
Line 93 struct kernfs_mount { |
|
Line 108 struct kernfs_mount { |
|
#define UIO_MX 32 |
#define UIO_MX 32 |
|
|
#define KERNFS_FILENO(kt, typ, cookie) \ |
#define KERNFS_FILENO(kt, typ, cookie) \ |
((kt >= &kern_targets[0] && kt < &kern_targets[nkern_targets]) ? \ |
((kt >= &kern_targets[0] && kt < &kern_targets[static_nkern_targets]) \ |
2 + ((kt) - &kern_targets[0]) \ |
? 2 + ((kt) - &kern_targets[0]) \ |
: (((cookie + 1) << 6) | (typ))) |
: (((cookie + 1) << 6) | (typ))) |
|
#define KERNFS_TYPE_FILENO(typ, cookie) \ |
|
(((cookie + 1) << 6) | (typ)) |
|
|
#define VFSTOKERNFS(mp) ((struct kernfs_mount *)((mp)->mnt_data)) |
#define VFSTOKERNFS(mp) ((struct kernfs_mount *)((mp)->mnt_data)) |
#define VTOKERN(vp) ((struct kernfs_node *)(vp)->v_data) |
#define VTOKERN(vp) ((struct kernfs_node *)(vp)->v_data) |
Line 103 struct kernfs_mount { |
|
Line 120 struct kernfs_mount { |
|
|
|
extern const struct kern_target kern_targets[]; |
extern const struct kern_target kern_targets[]; |
extern int nkern_targets; |
extern int nkern_targets; |
|
extern const int static_nkern_targets; |
extern int (**kernfs_vnodeop_p) __P((void *)); |
extern int (**kernfs_vnodeop_p) __P((void *)); |
extern struct vfsops kernfs_vfsops; |
extern struct vfsops kernfs_vfsops; |
extern dev_t rrootdev; |
extern dev_t rrootdev; |
Line 121 int kernfs_allocvp __P((struct mount *, |
|
Line 139 int kernfs_allocvp __P((struct mount *, |
|
|
|
void kernfs_revoke_sa __P((struct secasvar *)); |
void kernfs_revoke_sa __P((struct secasvar *)); |
void kernfs_revoke_sp __P((struct secpolicy *)); |
void kernfs_revoke_sp __P((struct secpolicy *)); |
|
|
|
/* |
|
* Data types for the kernfs file operations. |
|
*/ |
|
typedef enum { |
|
KERNFS_XWRITE, |
|
KERNFS_FILEOP_CLOSE, |
|
KERNFS_FILEOP_GETATTR, |
|
KERNFS_FILEOP_IOCTL, |
|
KERNFS_FILEOP_MMAP, |
|
KERNFS_FILEOP_OPEN, |
|
KERNFS_FILEOP_WRITE, |
|
} kfsfileop; |
|
|
|
struct kernfs_fileop { |
|
kfstype kf_type; |
|
kfsfileop kf_fileop; |
|
union { |
|
void *_kf_genop; |
|
int (*_kf_vop)(void *); |
|
int (*_kf_xwrite) |
|
(const struct kernfs_node *, char *, size_t); |
|
} _kf_opfn; |
|
SPLAY_ENTRY(kernfs_fileop) kf_node; |
|
}; |
|
#define kf_genop _kf_opfn |
|
#define kf_vop _kf_opfn._kf_vop |
|
#define kf_xwrite _kf_opfn._kf_xwrite |
|
|
|
typedef struct kern_target kernfs_parentdir_t; |
|
typedef struct dyn_kern_target kernfs_entry_t; |
|
|
|
/* |
|
* Functions for adding kernfs datatypes and nodes. |
|
*/ |
|
kfstype kernfs_alloctype(int, const struct kernfs_fileop *); |
|
#define KERNFS_ALLOCTYPE(kf) kernfs_alloctype(sizeof((kf)) / \ |
|
sizeof((kf)[0]), (kf)) |
|
#define KERNFS_ALLOCENTRY(dkt, m_type, m_flags) \ |
|
dkt = (struct dyn_kern_target *)malloc( \ |
|
sizeof(struct dyn_kern_target), (m_type), (m_flags)) |
|
#define KERNFS_INITENTRY(dkt, type, name, data, tag, vtype, mode) do { \ |
|
(dkt)->dkt_kt.kt_type = (type); \ |
|
(dkt)->dkt_kt.kt_namlen = strlen((name)); \ |
|
(dkt)->dkt_kt.kt_name = (name); \ |
|
(dkt)->dkt_kt.kt_data = (data); \ |
|
(dkt)->dkt_kt.kt_tag = (tag); \ |
|
(dkt)->dkt_kt.kt_vtype = (vtype); \ |
|
(dkt)->dkt_kt.kt_mode = (mode); \ |
|
} while (/*CONSTCOND*/0) |
|
#define KERNFS_ENTOPARENTDIR(dkt) &(dkt)->dkt_kt |
|
int kernfs_addentry __P((kernfs_parentdir_t *, kernfs_entry_t *)); |
|
|
#endif /* _KERNEL */ |
#endif /* _KERNEL */ |