mqueues: Add system calls.
authorStathis Kamperis <beket@dragonflybsd.org>
Wed, 7 Oct 2009 19:37:36 +0000 (19:37 +0000)
committerStathis Kamperis <beket@dragonflybsd.org>
Sun, 11 Oct 2009 16:12:07 +0000 (19:12 +0300)
sys/kern/init_sysent.c
sys/kern/syscalls.c
sys/kern/syscalls.master
sys/sys/syscall-hide.h
sys/sys/syscall.h
sys/sys/syscall.mk
sys/sys/sysproto.h
sys/sys/sysunion.h

index ab1d615..f9eda3d 100644 (file)
@@ -543,4 +543,14 @@ struct sysent sysent[] = {
        { AS(fchownat_args), (sy_call_t *)sys_fchownat },       /* 507 = fchownat */
        { AS(unlinkat_args), (sy_call_t *)sys_unlinkat },       /* 508 = unlinkat */
        { AS(faccessat_args), (sy_call_t *)sys_faccessat },     /* 509 = faccessat */
+       { AS(mq_open_args), (sy_call_t *)sys_mq_open }, /* 510 = mq_open */
+       { AS(mq_close_args), (sy_call_t *)sys_mq_close },       /* 511 = mq_close */
+       { AS(mq_unlink_args), (sy_call_t *)sys_mq_unlink },     /* 512 = mq_unlink */
+       { AS(mq_getattr_args), (sy_call_t *)sys_mq_getattr },   /* 513 = mq_getattr */
+       { AS(mq_setattr_args), (sy_call_t *)sys_mq_setattr },   /* 514 = mq_setattr */
+       { AS(mq_notify_args), (sy_call_t *)sys_mq_notify },     /* 515 = mq_notify */
+       { AS(mq_send_args), (sy_call_t *)sys_mq_send }, /* 516 = mq_send */
+       { AS(mq_receive_args), (sy_call_t *)sys_mq_receive },   /* 517 = mq_receive */
+       { AS(mq_timedsend_args), (sy_call_t *)sys_mq_timedsend },       /* 518 = mq_timedsend */
+       { AS(mq_timedreceive_args), (sy_call_t *)sys_mq_timedreceive }, /* 519 = mq_timedreceive */
 };
index 5c08917..5436705 100644 (file)
@@ -517,4 +517,14 @@ const char *syscallnames[] = {
        "fchownat",                     /* 507 = fchownat */
        "unlinkat",                     /* 508 = unlinkat */
        "faccessat",                    /* 509 = faccessat */
+       "mq_open",                      /* 510 = mq_open */
+       "mq_close",                     /* 511 = mq_close */
+       "mq_unlink",                    /* 512 = mq_unlink */
+       "mq_getattr",                   /* 513 = mq_getattr */
+       "mq_setattr",                   /* 514 = mq_setattr */
+       "mq_notify",                    /* 515 = mq_notify */
+       "mq_send",                      /* 516 = mq_send */
+       "mq_receive",                   /* 517 = mq_receive */
+       "mq_timedsend",                 /* 518 = mq_timedsend */
+       "mq_timedreceive",                      /* 519 = mq_timedreceive */
 };
index dc3e09a..2184266 100644 (file)
 508    STD     POSIX   { int unlinkat(int fd, char *path, int flags); }
 509    STD     POSIX   { int faccessat(int fd, char *path, int amode, \
                                        int flags); }
+
+; Revisit later the MPSAFE-ness of the following calls
+510    STD     POSIX   { mqd_t mq_open(const char * name, int oflag, \
+                           mode_t mode, struct mq_attr *attr); }
+511    STD     POSIX   { int mq_close(mqd_t mqdes); }
+512    STD     POSIX   { int mq_unlink(const char *name); }
+513    STD     POSIX   { int mq_getattr(mqd_t mqdes, \
+                           struct mq_attr *mqstat); }
+514    STD     POSIX   { int mq_setattr(mqd_t mqdes, \
+                           const struct mq_attr *mqstat, \
+                           struct mq_attr *omqstat); }
+515    STD     POSIX   { int mq_notify(mqd_t mqdes, \
+                           const struct sigevent *notification); }
+516    STD     POSIX   { int mq_send(mqd_t mqdes, const char *msg_ptr, \
+                           size_t msg_len, unsigned msg_prio); }
+517    STD     POSIX   { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, \
+                           size_t msg_len, unsigned *msg_prio); }
+518    STD     POSIX   { int mq_timedsend(mqd_t mqdes, \
+                           const char *msg_ptr, size_t msg_len, \
+                           unsigned msg_prio, \
+                           const struct timespec *abs_timeout); }
+519    STD     POSIX   { ssize_t mq_timedreceive(mqd_t mqdes, \
+                           char *msg_ptr, size_t msg_len, unsigned *msg_prio, \
+                           const struct timespec *abs_timeout); }
index cb89a44..cba8709 100644 (file)
@@ -340,3 +340,13 @@ HIDE_POSIX(fchmodat)
 HIDE_POSIX(fchownat)
 HIDE_POSIX(unlinkat)
 HIDE_POSIX(faccessat)
+HIDE_POSIX(mq_open)
+HIDE_POSIX(mq_close)
+HIDE_POSIX(mq_unlink)
+HIDE_POSIX(mq_getattr)
+HIDE_POSIX(mq_setattr)
+HIDE_POSIX(mq_notify)
+HIDE_POSIX(mq_send)
+HIDE_POSIX(mq_receive)
+HIDE_POSIX(mq_timedsend)
+HIDE_POSIX(mq_timedreceive)
index 1a20a1f..edf5f9c 100644 (file)
 #define        SYS_fchownat    507
 #define        SYS_unlinkat    508
 #define        SYS_faccessat   509
-#define        SYS_MAXSYSCALL  510
+#define        SYS_mq_open     510
+#define        SYS_mq_close    511
+#define        SYS_mq_unlink   512
+#define        SYS_mq_getattr  513
+#define        SYS_mq_setattr  514
+#define        SYS_mq_notify   515
+#define        SYS_mq_send     516
+#define        SYS_mq_receive  517
+#define        SYS_mq_timedsend        518
+#define        SYS_mq_timedreceive     519
+#define        SYS_MAXSYSCALL  520
index 97c98cd..5d19987 100644 (file)
@@ -291,4 +291,14 @@ MIASM =  \
        fchmodat.o \
        fchownat.o \
        unlinkat.o \
-       faccessat.o
+       faccessat.o \
+       mq_open.o \
+       mq_close.o \
+       mq_unlink.o \
+       mq_getattr.o \
+       mq_setattr.o \
+       mq_notify.o \
+       mq_send.o \
+       mq_receive.o \
+       mq_timedsend.o \
+       mq_timedreceive.o
index dcae6e9..a8bcb36 100644 (file)
@@ -2213,6 +2213,87 @@ struct   faccessat_args {
        int     amode;  char amode_[PAD_(int)];
        int     flags;  char flags_[PAD_(int)];
 };
+struct mq_open_args {
+#ifdef _KERNEL
+       struct sysmsg sysmsg;
+#endif
+       const char *    name;   char name_[PAD_(const char *)];
+       int     oflag;  char oflag_[PAD_(int)];
+       mode_t  mode;   char mode_[PAD_(mode_t)];
+       struct mq_attr *        attr;   char attr_[PAD_(struct mq_attr *)];
+};
+struct mq_close_args {
+#ifdef _KERNEL
+       struct sysmsg sysmsg;
+#endif
+       mqd_t   mqdes;  char mqdes_[PAD_(mqd_t)];
+};
+struct mq_unlink_args {
+#ifdef _KERNEL
+       struct sysmsg sysmsg;
+#endif
+       const char *    name;   char name_[PAD_(const char *)];
+};
+struct mq_getattr_args {
+#ifdef _KERNEL
+       struct sysmsg sysmsg;
+#endif
+       mqd_t   mqdes;  char mqdes_[PAD_(mqd_t)];
+       struct mq_attr *        mqstat; char mqstat_[PAD_(struct mq_attr *)];
+};
+struct mq_setattr_args {
+#ifdef _KERNEL
+       struct sysmsg sysmsg;
+#endif
+       mqd_t   mqdes;  char mqdes_[PAD_(mqd_t)];
+       const struct mq_attr *  mqstat; char mqstat_[PAD_(const struct mq_attr *)];
+       struct mq_attr *        omqstat;        char omqstat_[PAD_(struct mq_attr *)];
+};
+struct mq_notify_args {
+#ifdef _KERNEL
+       struct sysmsg sysmsg;
+#endif
+       mqd_t   mqdes;  char mqdes_[PAD_(mqd_t)];
+       const struct sigevent * notification;   char notification_[PAD_(const struct sigevent *)];
+};
+struct mq_send_args {
+#ifdef _KERNEL
+       struct sysmsg sysmsg;
+#endif
+       mqd_t   mqdes;  char mqdes_[PAD_(mqd_t)];
+       const char *    msg_ptr;        char msg_ptr_[PAD_(const char *)];
+       size_t  msg_len;        char msg_len_[PAD_(size_t)];
+       unsigned        msg_prio;       char msg_prio_[PAD_(unsigned)];
+};
+struct mq_receive_args {
+#ifdef _KERNEL
+       struct sysmsg sysmsg;
+#endif
+       mqd_t   mqdes;  char mqdes_[PAD_(mqd_t)];
+       char *  msg_ptr;        char msg_ptr_[PAD_(char *)];
+       size_t  msg_len;        char msg_len_[PAD_(size_t)];
+       unsigned *      msg_prio;       char msg_prio_[PAD_(unsigned *)];
+};
+struct mq_timedsend_args {
+#ifdef _KERNEL
+       struct sysmsg sysmsg;
+#endif
+       mqd_t   mqdes;  char mqdes_[PAD_(mqd_t)];
+       const char *    msg_ptr;        char msg_ptr_[PAD_(const char *)];
+       size_t  msg_len;        char msg_len_[PAD_(size_t)];
+       unsigned        msg_prio;       char msg_prio_[PAD_(unsigned)];
+       const struct timespec * abs_timeout;    char abs_timeout_[PAD_(const struct timespec *)];
+};
+struct mq_timedreceive_args {
+#ifdef _KERNEL
+       struct sysmsg sysmsg;
+#endif
+       mqd_t   mqdes;  char mqdes_[PAD_(mqd_t)];
+       char *  msg_ptr;        char msg_ptr_[PAD_(char *)];
+       size_t  msg_len;        char msg_len_[PAD_(size_t)];
+       unsigned *      msg_prio;       char msg_prio_[PAD_(unsigned *)];
+       const struct timespec * abs_timeout;    char abs_timeout_[PAD_(const struct timespec *)];
+};
 
 #ifdef COMPAT_43
 
@@ -2805,6 +2886,16 @@ int      sys_fchmodat (struct fchmodat_args *);
 int    sys_fchownat (struct fchownat_args *);
 int    sys_unlinkat (struct unlinkat_args *);
 int    sys_faccessat (struct faccessat_args *);
+int    sys_mq_open (struct mq_open_args *);
+int    sys_mq_close (struct mq_close_args *);
+int    sys_mq_unlink (struct mq_unlink_args *);
+int    sys_mq_getattr (struct mq_getattr_args *);
+int    sys_mq_setattr (struct mq_setattr_args *);
+int    sys_mq_notify (struct mq_notify_args *);
+int    sys_mq_send (struct mq_send_args *);
+int    sys_mq_receive (struct mq_receive_args *);
+int    sys_mq_timedsend (struct mq_timedsend_args *);
+int    sys_mq_timedreceive (struct mq_timedreceive_args *);
 
 #endif /* !_SYS_SYSPROTO_H_ */
 #undef PAD_
index 9a10e4f..5a67be7 100644 (file)
@@ -396,4 +396,14 @@ union sysunion {
        struct  fchownat_args fchownat;
        struct  unlinkat_args unlinkat;
        struct  faccessat_args faccessat;
+       struct  mq_open_args mq_open;
+       struct  mq_close_args mq_close;
+       struct  mq_unlink_args mq_unlink;
+       struct  mq_getattr_args mq_getattr;
+       struct  mq_setattr_args mq_setattr;
+       struct  mq_notify_args mq_notify;
+       struct  mq_send_args mq_send;
+       struct  mq_receive_args mq_receive;
+       struct  mq_timedsend_args mq_timedsend;
+       struct  mq_timedreceive_args mq_timedreceive;
 };