chiark / gitweb /
bus: catch up with latest kdbus changes
authorKay Sievers <kay@vrfy.org>
Fri, 6 Dec 2013 13:31:43 +0000 (14:31 +0100)
committerKay Sievers <kay@vrfy.org>
Fri, 6 Dec 2013 13:31:43 +0000 (14:31 +0100)
src/libsystemd-bus/bus-control.c
src/libsystemd-bus/bus-kernel.c
src/libsystemd-bus/bus-kernel.h
src/libsystemd-bus/kdbus.h

index 186724e8ad1f7723ef48cb5986028eb3bba89312..966398944f9799edd23e8205f84fcef1ed3a468e 100644 (file)
@@ -216,7 +216,7 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
 
         name_list = (struct kdbus_name_list *) ((uint8_t *) bus->kdbus_buffer + cmd.offset);
 
 
         name_list = (struct kdbus_name_list *) ((uint8_t *) bus->kdbus_buffer + cmd.offset);
 
-        KDBUS_PART_FOREACH(name, name_list, names) {
+        KDBUS_ITEM_FOREACH(name, name_list, names) {
 
                 if (name->size > sizeof(*name)) {
                         r = strv_extend(x, name->name);
 
                 if (name->size > sizeof(*name)) {
                         r = strv_extend(x, name->name);
@@ -383,7 +383,7 @@ static int bus_get_owner_kdbus(
                 c->mask |= SD_BUS_CREDS_UNIQUE_NAME;
         }
 
                 c->mask |= SD_BUS_CREDS_UNIQUE_NAME;
         }
 
-        KDBUS_PART_FOREACH(item, conn_info, items) {
+        KDBUS_ITEM_FOREACH(item, conn_info, items) {
 
                 switch (item->type) {
 
 
                 switch (item->type) {
 
@@ -439,7 +439,7 @@ static int bus_get_owner_kdbus(
 
                 case KDBUS_ITEM_CMDLINE:
                         if (mask & SD_BUS_CREDS_CMDLINE) {
 
                 case KDBUS_ITEM_CMDLINE:
                         if (mask & SD_BUS_CREDS_CMDLINE) {
-                                c->cmdline_size = item->size - KDBUS_PART_HEADER_SIZE;
+                                c->cmdline_size = item->size - KDBUS_ITEM_HEADER_SIZE;
                                 c->cmdline = memdup(item->data, c->cmdline_size);
                                 if (!c->cmdline) {
                                         r = -ENOMEM;
                                 c->cmdline = memdup(item->data, c->cmdline_size);
                                 if (!c->cmdline) {
                                         r = -ENOMEM;
@@ -471,7 +471,7 @@ static int bus_get_owner_kdbus(
                              SD_BUS_CREDS_INHERITABLE_CAPS | SD_BUS_CREDS_BOUNDING_CAPS) & mask;
 
                         if (m) {
                              SD_BUS_CREDS_INHERITABLE_CAPS | SD_BUS_CREDS_BOUNDING_CAPS) & mask;
 
                         if (m) {
-                                c->capability_size = item->size - KDBUS_PART_HEADER_SIZE;
+                                c->capability_size = item->size - KDBUS_ITEM_HEADER_SIZE;
                                 c->capability = memdup(item->data, c->capability_size);
                                 if (!c->capability) {
                                         r = -ENOMEM;
                                 c->capability = memdup(item->data, c->capability_size);
                                 if (!c->capability) {
                                         r = -ENOMEM;
@@ -1010,7 +1010,7 @@ static int bus_add_match_internal_kernel(
                 item->type = KDBUS_MATCH_BLOOM;
                 memcpy(item->data64, bloom, BLOOM_SIZE);
 
                 item->type = KDBUS_MATCH_BLOOM;
                 memcpy(item->data64, bloom, BLOOM_SIZE);
 
-                item = KDBUS_PART_NEXT(item);
+                item = KDBUS_ITEM_NEXT(item);
         }
 
         if (sender) {
         }
 
         if (sender) {
index 5ed836eeb069fc1369e872f50253bd9a9881bf50..f2348918896c2b9cbb8e5eada83857c260471791 100644 (file)
@@ -462,7 +462,7 @@ static void close_kdbus_msg(sd_bus *bus, struct kdbus_msg *k) {
         off = (uint8_t *)k - (uint8_t *)bus->kdbus_buffer;
         ioctl(bus->input_fd, KDBUS_CMD_FREE, &off);
 
         off = (uint8_t *)k - (uint8_t *)bus->kdbus_buffer;
         ioctl(bus->input_fd, KDBUS_CMD_FREE, &off);
 
-        KDBUS_PART_FOREACH(d, k, items) {
+        KDBUS_ITEM_FOREACH(d, k, items) {
 
                 if (d->type == KDBUS_ITEM_FDS)
                         close_many(d->fds, (d->size - offsetof(struct kdbus_item, fds)) / sizeof(int));
 
                 if (d->type == KDBUS_ITEM_FDS)
                         close_many(d->fds, (d->size - offsetof(struct kdbus_item, fds)) / sizeof(int));
@@ -589,7 +589,7 @@ static int bus_kernel_translate_message(sd_bus *bus, struct kdbus_msg *k) {
         assert(k);
         assert(k->payload_type == KDBUS_PAYLOAD_KERNEL);
 
         assert(k);
         assert(k->payload_type == KDBUS_PAYLOAD_KERNEL);
 
-        KDBUS_PART_FOREACH(d, k, items) {
+        KDBUS_ITEM_FOREACH(d, k, items) {
                 if (d->type >= _KDBUS_ITEM_KERNEL_BASE && d->type < _KDBUS_ITEM_KERNEL_BASE + ELEMENTSOF(translate)) {
                         if (found)
                                 return -EBADMSG;
                 if (d->type >= _KDBUS_ITEM_KERNEL_BASE && d->type < _KDBUS_ITEM_KERNEL_BASE + ELEMENTSOF(translate)) {
                         if (found)
                                 return -EBADMSG;
@@ -620,7 +620,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) {
         assert(k);
         assert(k->payload_type == KDBUS_PAYLOAD_DBUS1);
 
         assert(k);
         assert(k->payload_type == KDBUS_PAYLOAD_DBUS1);
 
-        KDBUS_PART_FOREACH(d, k, items) {
+        KDBUS_ITEM_FOREACH(d, k, items) {
                 size_t l;
 
                 l = d->size - offsetof(struct kdbus_item, data);
                 size_t l;
 
                 l = d->size - offsetof(struct kdbus_item, data);
@@ -680,7 +680,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) {
         if (r < 0)
                 return r;
 
         if (r < 0)
                 return r;
 
-        KDBUS_PART_FOREACH(d, k, items) {
+        KDBUS_ITEM_FOREACH(d, k, items) {
                 size_t l;
 
                 l = d->size - offsetof(struct kdbus_item, data);
                 size_t l;
 
                 l = d->size - offsetof(struct kdbus_item, data);
index a9dddc23d903e47574669bb32b4e3e4d9c1de822..1771020903dfa5c3b90d16193213a4601c474e67 100644 (file)
 
 #include "sd-bus.h"
 
 
 #include "sd-bus.h"
 
-#define KDBUS_PART_NEXT(item) \
+#define KDBUS_ITEM_NEXT(item) \
         (typeof(item))(((uint8_t *)item) + ALIGN8((item)->size))
 
         (typeof(item))(((uint8_t *)item) + ALIGN8((item)->size))
 
-#define KDBUS_PART_FOREACH(part, head, first)                           \
+#define KDBUS_ITEM_FOREACH(part, head, first)                           \
         for (part = (head)->first;                                      \
              (uint8_t *)(part) < (uint8_t *)(head) + (head)->size;      \
         for (part = (head)->first;                                      \
              (uint8_t *)(part) < (uint8_t *)(head) + (head)->size;      \
-             part = KDBUS_PART_NEXT(part))
+             part = KDBUS_ITEM_NEXT(part))
 
 
-#define KDBUS_PART_HEADER_SIZE offsetof(struct kdbus_item, data)
-#define KDBUS_ITEM_SIZE(s) ALIGN8((s) + KDBUS_PART_HEADER_SIZE)
+#define KDBUS_ITEM_HEADER_SIZE offsetof(struct kdbus_item, data)
+#define KDBUS_ITEM_SIZE(s) ALIGN8((s) + KDBUS_ITEM_HEADER_SIZE)
 
 #define MEMFD_CACHE_MAX 32
 
 
 #define MEMFD_CACHE_MAX 32
 
index 13fe49a2b96e5d48c99b517b2425c8e85fd4b05e..6775789fe8c3068b994e68962a1d19a9197bd1c3 100644 (file)
 #define KDBUS_MATCH_SRC_ID_ANY         (~0ULL)
 #define KDBUS_DST_ID_BROADCAST         (~0ULL)
 
 #define KDBUS_MATCH_SRC_ID_ANY         (~0ULL)
 #define KDBUS_DST_ID_BROADCAST         (~0ULL)
 
-/**
- * struct KDBUS_PART_HEADER - anonymous struct used as header
- * @size:              Size of element, excluding padding bytes
- * @type               Type of element
- *
- * Common first elements in a structure, used to specify the type
- * and size of the data.
- * */
-#define KDBUS_PART_HEADER \
-       struct {                                                        \
-               __u64 size;                                             \
-               __u64 type;                                             \
-       }
-
 /**
  * struct kdbus_notify_name_change - name registry change message
 /**
  * struct kdbus_notify_name_change - name registry change message
- * @old_id             Former owner of a name
- * @new_id             New owner of a name
- * @flags              flags from KDBUS_NAME_*
- * @name               Well-known name
+ * @old_id:            Former owner of a name
+ * @new_id:            New owner of a name
+ * @flags:             flags from KDBUS_NAME_*
+ * @name:              Well-known name
  *
  * Data attached to:
  *   KDBUS_ITEM_NAME_ADD
  *
  * Data attached to:
  *   KDBUS_ITEM_NAME_ADD
@@ -64,8 +50,8 @@ struct kdbus_notify_name_change {
 
 /**
  * struct kdbus_notify_id_change - name registry change message
 
 /**
  * struct kdbus_notify_id_change - name registry change message
- * @id                 New or former owner of the name
- * @flags              flags field from KDBUS_HELLO_*
+ * @id:                        New or former owner of the name
+ * @flags:             flags field from KDBUS_HELLO_*
  *
  * Data attached to:
  *   KDBUS_ITEM_ID_ADD
  *
  * Data attached to:
  *   KDBUS_ITEM_ID_ADD
@@ -81,11 +67,11 @@ struct kdbus_notify_id_change {
 
 /**
  * struct kdbus_creds - process credentials
 
 /**
  * struct kdbus_creds - process credentials
- * @uid                        User ID
- * @gid                        Group ID
- * @pid                        Process ID
- * @tid                        Thread ID
- * @starttime          Starttime of the process
+ * @uid:               User ID
+ * @gid:               Group ID
+ * @pid:               Process ID
+ * @tid:               Thread ID
+ * @starttime:         Starttime of the process
  *
  * The starttime of the process PID. This is useful to detect PID overruns
  * from the client side. i.e. if you use the PID to look something up in
  *
  * The starttime of the process PID. This is useful to detect PID overruns
  * from the client side. i.e. if you use the PID to look something up in
@@ -102,8 +88,8 @@ struct kdbus_creds {
 
 /**
  * struct kdbus_audit - audit information
 
 /**
  * struct kdbus_audit - audit information
- * @sessionid          The audit session ID
- * @loginuid           The audit login uid
+ * @sessionid:         The audit session ID
+ * @loginuid:          The audit login uid
  */
 struct kdbus_audit {
        __u64 sessionid;
  */
 struct kdbus_audit {
        __u64 sessionid;
@@ -123,8 +109,8 @@ struct kdbus_timestamp {
 /**
  * struct kdbus_vec - I/O vector for kdbus payload items
  * @size:              The size of the vector
 /**
  * struct kdbus_vec - I/O vector for kdbus payload items
  * @size:              The size of the vector
- * @address            Memory address for memory addresses
- * @offset             Offset in the in-message payload memory
+ * @address:           Memory address for memory addresses
+ * @offset:            Offset in the in-message payload memory
  */
 struct kdbus_vec {
        __u64 size;
  */
 struct kdbus_vec {
        __u64 size;
@@ -148,21 +134,50 @@ struct kdbus_memfd {
 
 /**
  * struct kdbus_name - a registered well-known name with its flags
 
 /**
  * struct kdbus_name - a registered well-known name with its flags
- * @flags              flags from KDBUS_NAME_*
- * @name               well-known name
+ * @flags:             flags from KDBUS_NAME_*
+ * @name:              well-known name
  */
 struct kdbus_name {
        __u64 flags;
        char name[0];
 };
 
  */
 struct kdbus_name {
        __u64 flags;
        char name[0];
 };
 
+/**
+ * struct kdbus_policy_access - policy access item
+ * @type:              One of KDBUS_POLICY_ACCESS_* types
+ * @bits:              Access to grant. One of KDBUS_POLICY_*
+ * @id:                        For KDBUS_POLICY_ACCESS_USER, the uid
+ *                     For KDBUS_POLICY_ACCESS_GROUP, the gid
+ */
+struct kdbus_policy_access {
+       __u64 type;     /* USER, GROUP, WORLD */
+       __u64 bits;     /* RECV, SEND, OWN */
+       __u64 id;       /* uid, gid, 0 */
+};
+
+/*
+ * struct kdbus_policy - a policy to upload
+ * @size:              The total size of the structure
+ * @type:              KDBUS_POLICY_NAME or KDBUS_POLICY_ACCESS
+ * @name:              The well-known name to grant access to,
+ *                     if @type is KDBUS_POLICY_NAME
+ * @access:            The policy access details,
+ *                     if @type is KDBUS_POLICY_ACCESS
+ */
+struct kdbus_policy {
+       union {
+               struct kdbus_policy_access access;
+               char name[0];
+       };
+};
+
 /* Message Item Types */
 enum {
        _KDBUS_ITEM_NULL,
 
        /* Filled in by userspace */
 /* Message Item Types */
 enum {
        _KDBUS_ITEM_NULL,
 
        /* Filled in by userspace */
-       _KDBUS_ITEM_USER_BASE   = 1,
-       KDBUS_ITEM_PAYLOAD_VEC  = 1,    /* .data_vec, reference to memory area */
+       _KDBUS_ITEM_USER_BASE,
+       KDBUS_ITEM_PAYLOAD_VEC  = _KDBUS_ITEM_USER_BASE,
        KDBUS_ITEM_PAYLOAD_OFF,         /* .data_vec, reference to memory area */
        KDBUS_ITEM_PAYLOAD_MEMFD,       /* file descriptor of a special data file */
        KDBUS_ITEM_FDS,                 /* .data_fds of file descriptors */
        KDBUS_ITEM_PAYLOAD_OFF,         /* .data_vec, reference to memory area */
        KDBUS_ITEM_PAYLOAD_MEMFD,       /* file descriptor of a special data file */
        KDBUS_ITEM_FDS,                 /* .data_fds of file descriptors */
@@ -170,13 +185,15 @@ enum {
        KDBUS_ITEM_DST_NAME,            /* destination's well-known name, in .str */
        KDBUS_ITEM_PRIORITY,            /* queue priority for message */
 
        KDBUS_ITEM_DST_NAME,            /* destination's well-known name, in .str */
        KDBUS_ITEM_PRIORITY,            /* queue priority for message */
 
+       _KDBUS_ITEM_POLICY_BASE = 0x400,
+       KDBUS_ITEM_POLICY_NAME = _KDBUS_ITEM_POLICY_BASE,
+       KDBUS_ITEM_POLICY_ACCESS,
+
        /* Filled in by kernelspace */
        /* Filled in by kernelspace */
-       _KDBUS_ITEM_ATTACH_BASE = 0x400,
-       KDBUS_ITEM_NAME         = 0x400,/* NUL separated string list with well-known names of source */
+       _KDBUS_ITEM_ATTACH_BASE = 0x600,
+       KDBUS_ITEM_NAME         = _KDBUS_ITEM_ATTACH_BASE,
        KDBUS_ITEM_STARTER_NAME,        /* Only used in HELLO for starter connection */
        KDBUS_ITEM_TIMESTAMP,           /* .timestamp */
        KDBUS_ITEM_STARTER_NAME,        /* Only used in HELLO for starter connection */
        KDBUS_ITEM_TIMESTAMP,           /* .timestamp */
-
-       /* when appended to a message, the following items refer to the sender */
        KDBUS_ITEM_CREDS,               /* .creds */
        KDBUS_ITEM_PID_COMM,            /* optional, in .str */
        KDBUS_ITEM_TID_COMM,            /* optional, in .str */
        KDBUS_ITEM_CREDS,               /* .creds */
        KDBUS_ITEM_PID_COMM,            /* optional, in .str */
        KDBUS_ITEM_TID_COMM,            /* optional, in .str */
@@ -189,7 +206,7 @@ enum {
 
        /* Special messages from kernel, consisting of one and only one of these data blocks */
        _KDBUS_ITEM_KERNEL_BASE = 0x800,
 
        /* Special messages from kernel, consisting of one and only one of these data blocks */
        _KDBUS_ITEM_KERNEL_BASE = 0x800,
-       KDBUS_ITEM_NAME_ADD     = 0x800,/* .name_change */
+       KDBUS_ITEM_NAME_ADD     = _KDBUS_ITEM_KERNEL_BASE,
        KDBUS_ITEM_NAME_REMOVE,         /* .name_change */
        KDBUS_ITEM_NAME_CHANGE,         /* .name_change */
        KDBUS_ITEM_ID_ADD,              /* .id_change */
        KDBUS_ITEM_NAME_REMOVE,         /* .name_change */
        KDBUS_ITEM_NAME_CHANGE,         /* .name_change */
        KDBUS_ITEM_ID_ADD,              /* .id_change */
@@ -198,13 +215,14 @@ enum {
        KDBUS_ITEM_REPLY_DEAD,          /* dito */
 };
 
        KDBUS_ITEM_REPLY_DEAD,          /* dito */
 };
 
-/**
+/*
  * struct kdbus_item - chain of data blocks
  * struct kdbus_item - chain of data blocks
- * @size       :       overall data record size
+ * @size:      :       overall data record size
  * @type:              kdbus_item type of data
  */
 struct kdbus_item {
  * @type:              kdbus_item type of data
  */
 struct kdbus_item {
-       KDBUS_PART_HEADER;
+       __u64 size;
+       __u64 type;
        union {
                /* inline data */
                __u8 data[0];
        union {
                /* inline data */
                __u8 data[0];
@@ -229,6 +247,7 @@ struct kdbus_item {
                int fds[0];
                struct kdbus_notify_name_change name_change;
                struct kdbus_notify_id_change id_change;
                int fds[0];
                struct kdbus_notify_name_change name_change;
                struct kdbus_notify_id_change id_change;
+               struct kdbus_policy policy;
        };
 };
 
        };
 };
 
@@ -271,12 +290,6 @@ struct kdbus_msg {
        struct kdbus_item items[0];
 };
 
        struct kdbus_item items[0];
 };
 
-enum {
-       _KDBUS_POLICY_NULL,
-       KDBUS_POLICY_NAME,
-       KDBUS_POLICY_ACCESS,
-};
-
 enum {
        _KDBUS_POLICY_ACCESS_NULL,
        KDBUS_POLICY_ACCESS_USER,
 enum {
        _KDBUS_POLICY_ACCESS_NULL,
        KDBUS_POLICY_ACCESS_USER,
@@ -290,36 +303,6 @@ enum {
        KDBUS_POLICY_OWN                = 1 <<  0,
 };
 
        KDBUS_POLICY_OWN                = 1 <<  0,
 };
 
-/**
- * struct kdbus_policy_access - policy access item
- * @type:              One of KDBUS_POLICY_ACCESS_* types
- * @bits:              Access to grant. One of KDBUS_POLICY_*
- * @id:                        For KDBUS_POLICY_ACCESS_USER, the uid
- *                     For KDBUS_POLICY_ACCESS_GROUP, the gid
- */
-struct kdbus_policy_access {
-       __u64 type;     /* USER, GROUP, WORLD */
-       __u64 bits;     /* RECV, SEND, OWN */
-       __u64 id;       /* uid, gid, 0 */
-};
-
-/**
- * struct kdbus_policy - a policy to upload
- * @size:              The total size of the structure
- * @type:              KDBUS_POLICY_NAME or KDBUS_POLICY_ACCESS
- * @name:              The well-known name to grant access to,
- *                     if @type is KDBUS_POLICY_NAME
- * @access:            The policy access details,
- *                     if @type is KDBUS_POLICY_ACCESS
- */
-struct kdbus_policy {
-       KDBUS_PART_HEADER;
-       union {
-               char name[0];
-               struct kdbus_policy_access access;
-       };
-};
-
 /**
  * struct kdbus_cmd_policy - a series of policies to upload
  * @size:              The total size of the structure
 /**
  * struct kdbus_cmd_policy - a series of policies to upload
  * @size:              The total size of the structure
@@ -331,7 +314,7 @@ struct kdbus_policy {
  */
 struct kdbus_cmd_policy {
        __u64 size;
  */
 struct kdbus_cmd_policy {
        __u64 size;
-       struct kdbus_policy policies[0];
+       struct kdbus_item policies[0];
 };
 
 /* Flags for struct kdbus_cmd_hello */
 };
 
 /* Flags for struct kdbus_cmd_hello */
@@ -370,7 +353,7 @@ enum {
  *                     (kernel → userspace)
  * @pool_size:         Maximum size of the pool buffer (kernel → userspace)
  * @id128:             Unique 128-bit ID of the bus (kernel → userspace)
  *                     (kernel → userspace)
  * @pool_size:         Maximum size of the pool buffer (kernel → userspace)
  * @id128:             Unique 128-bit ID of the bus (kernel → userspace)
- * @items;             A list of items
+ * @items:             A list of items
  *
  * This struct is used with the KDBUS_CMD_HELLO ioctl. See the ioctl
  * documentation for more information.
  *
  * This struct is used with the KDBUS_CMD_HELLO ioctl. See the ioctl
  * documentation for more information.
@@ -409,7 +392,7 @@ enum {
  * struct kdbus_cmd_bus_make - struct to make a bus
  * @size:              The total size of the struct
  * @flags:             Properties for the bus to create
  * struct kdbus_cmd_bus_make - struct to make a bus
  * @size:              The total size of the struct
  * @flags:             Properties for the bus to create
- * @bloom_filter:      Size of the bloom filter for this bus
+ * @bloom_size:                Size of the bloom filter for this bus
  * @items:             Items describing details such as the name of the bus
  *
  * This structure is used with the KDBUS_CMD_BUS_MAKE ioctl. Refer to the
  * @items:             Items describing details such as the name of the bus
  *
  * This structure is used with the KDBUS_CMD_BUS_MAKE ioctl. Refer to the