Annotation of src/sys/sys/caps.h, revision 1.1
1.1 ! dillon 1: /*
! 2: * SYS/CAPS.H
! 3: *
! 4: * Implements an architecture independant Capability Service API
! 5: *
! 6: * $DragonFly$
! 7: */
! 8:
! 9: #ifndef _SYS_CAPS_H_
! 10: #define _SYS_CAPS_H_
! 11:
! 12: #ifndef _SYS_TYPES_H_
! 13: #include <sys/types.h>
! 14: #endif
! 15: #ifndef _SYS_MSGPORT_H_
! 16: #include <sys/msgport.h>
! 17: #endif
! 18:
! 19: #define CAPS_USER 0x00000001
! 20: #define CAPS_GROUP 0x00000002
! 21: #define CAPS_WORLD 0x00000004
! 22: #define CAPS_EXCL 0x00000008
! 23: #define CAPS_ANYCLIENT (CAPS_USER|CAPS_GROUP|CAPS_WORLD)
! 24: #define CAPS_WCRED 0x00000010 /* waiting for cred */
! 25:
! 26: /*
! 27: * caps_type associated with caps_port:
! 28: *
! 29: * CAPT_CLIENT port returned to client representing connection to
! 30: * service.
! 31: * CAPT_SERVICE port returned to service representing namespace
! 32: * CAPT_REMOTE temporary port used by service to represent
! 33: * client connections to service (set as replyport for
! 34: * messages)
! 35: *
! 36: */
! 37: enum caps_type { CAPT_UNKNOWN, CAPT_CLIENT, CAPT_SERVICE, CAPT_REMOTE };
! 38:
! 39: #define CAPS_MAXGROUPS 16
! 40:
! 41: struct thread;
! 42: struct caps_port;
! 43:
! 44: typedef struct caps_port *caps_port_t;
! 45:
! 46: struct caps_cred {
! 47: pid_t pid;
! 48: uid_t uid;
! 49: uid_t euid;
! 50: gid_t gid;
! 51: int ngroups;
! 52: gid_t groups[CAPS_MAXGROUPS];
! 53: };
! 54:
! 55: struct caps_port {
! 56: struct lwkt_port lport;
! 57: caps_port_t server; /* if CAPT_REMOTE, pointer to server */
! 58: enum caps_type type;
! 59: int kqfd; /* kqueue to collect active connects */
! 60: int lfd; /* server: listening on (server) */
! 61: int cfd; /* client/remote connection fd */
! 62: int flags;
! 63: TAILQ_HEAD(, caps_port) clist; /* server: client client connections */
! 64: TAILQ_ENTRY(caps_port) centry;
! 65: TAILQ_HEAD(, lwkt_msg) wlist; /* queue of outgoing messages */
! 66: TAILQ_HEAD(, lwkt_msg) mlist; /* written message waiting for reply */
! 67: struct lwkt_msg rmsg_static;
! 68: lwkt_msg_t rmsg; /* read message in progress */
! 69: struct caps_cred cred; /* cred of owner of port */
! 70: int rbytes; /* read in progress byte count */
! 71: int wbytes; /* write in progress byte count */
! 72: };
! 73:
! 74: #define CAPPF_WAITCRED 0x0001
! 75: #define CAPPF_ONLIST 0x0002
! 76: #define CAPPF_WREQUESTED 0x0004 /* write event requested */
! 77: #define CAPPF_SHUTDOWN 0x0008 /* terminated/failed */
! 78:
! 79: #define CAPMSG_MAXSIZE (1024+64*1024)
! 80:
! 81: /*
! 82: * API
! 83: */
! 84: caps_port_t caps_service(const char *name, gid_t gid, mode_t modes, int flags);
! 85: caps_port_t caps_client(const char *name, uid_t uid, int flags);
! 86:
! 87: /*
! 88: * Temporary hack until LWKT threading is integrated.
! 89: */
! 90: void *caps_client_waitreply(caps_port_t port, lwkt_msg_t msg);
! 91:
! 92: #endif
! 93: