summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Mack <zonque@gmail.com>2013-12-18 00:20:55 +0100
committerDaniel Mack <zonque@gmail.com>2013-12-18 00:20:55 +0100
commitceceaf09f9e4a53f86c623d70931676255aef334 (patch)
tree9305d511948eac200fbd5fc9c1b366528677ad28 /src
parentd638dee035bea5ce1082cce6448ad4d8f8cedf55 (diff)
bus: sync with kdbus
Two new things here: a) struct kdbus_notify_name_change now carries two struct kdbus_notify_id_change b) a new KDBUS_CMD_BYEBYE ioctl that has no user yet in systemd
Diffstat (limited to 'src')
-rw-r--r--src/libsystemd-bus/bus-control.c4
-rw-r--r--src/libsystemd-bus/bus-kernel.c8
-rw-r--r--src/libsystemd-bus/kdbus.h58
3 files changed, 37 insertions, 33 deletions
diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c
index 0072c37a8c..9866681387 100644
--- a/src/libsystemd-bus/bus-control.c
+++ b/src/libsystemd-bus/bus-control.c
@@ -787,8 +787,8 @@ static int add_name_change_match(sd_bus *bus,
offsetof(struct kdbus_notify_name_change, name) +
l+1;
- item->name_change.old_id = old_owner_id;
- item->name_change.new_id = new_owner_id;
+ item->name_change.old.id = old_owner_id;
+ item->name_change.new.id = new_owner_id;
if (name)
strcpy(item->name_change.name, name);
diff --git a/src/libsystemd-bus/bus-kernel.c b/src/libsystemd-bus/bus-kernel.c
index 5be91d4646..bd6b84a7ba 100644
--- a/src/libsystemd-bus/bus-kernel.c
+++ b/src/libsystemd-bus/bus-kernel.c
@@ -515,19 +515,19 @@ static int translate_name_change(sd_bus *bus, struct kdbus_msg *k, struct kdbus_
assert(k);
assert(d);
- if (d->type == KDBUS_ITEM_NAME_ADD || (d->name_change.old_flags & (KDBUS_NAME_IN_QUEUE|KDBUS_NAME_ACTIVATOR)))
+ if (d->type == KDBUS_ITEM_NAME_ADD || (d->name_change.old.flags & (KDBUS_NAME_IN_QUEUE|KDBUS_NAME_ACTIVATOR)))
old_owner[0] = 0;
else
- sprintf(old_owner, ":1.%llu", (unsigned long long) d->name_change.old_id);
+ sprintf(old_owner, ":1.%llu", (unsigned long long) d->name_change.old.id);
- if (d->type == KDBUS_ITEM_NAME_REMOVE || (d->name_change.new_flags & (KDBUS_NAME_IN_QUEUE|KDBUS_NAME_ACTIVATOR))) {
+ if (d->type == KDBUS_ITEM_NAME_REMOVE || (d->name_change.new.flags & (KDBUS_NAME_IN_QUEUE|KDBUS_NAME_ACTIVATOR))) {
if (isempty(old_owner))
return 0;
new_owner[0] = 0;
} else
- sprintf(new_owner, ":1.%llu", (unsigned long long) d->name_change.new_id);
+ sprintf(new_owner, ":1.%llu", (unsigned long long) d->name_change.new.id);
return push_name_owner_changed(bus, d->name_change.name, old_owner, new_owner);
}
diff --git a/src/libsystemd-bus/kdbus.h b/src/libsystemd-bus/kdbus.h
index e9ffecd54b..f570c0d674 100644
--- a/src/libsystemd-bus/kdbus.h
+++ b/src/libsystemd-bus/kdbus.h
@@ -27,6 +27,23 @@
#define KDBUS_DST_ID_BROADCAST (~0ULL)
/**
+ * struct kdbus_notify_id_change - name registry change message
+ * @id: New or former owner of the name
+ * @flags: flags field from KDBUS_HELLO_*
+ *
+ * Sent from kernel to userspace when the owner or activator of
+ * a well-known name changes.
+ *
+ * Attached to:
+ * KDBUS_ITEM_ID_ADD
+ * KDBUS_ITEM_ID_REMOVE
+ */
+struct kdbus_notify_id_change {
+ __u64 id;
+ __u64 flags;
+};
+
+/**
* struct kdbus_notify_name_change - name registry change message
* @old_id: Former owner of a name
* @new_id: New owner of a name
@@ -43,31 +60,12 @@
* KDBUS_ITEM_NAME_CHANGE
*/
struct kdbus_notify_name_change {
- __u64 old_id;
- __u64 new_id;
- __u64 old_flags;
- __u64 new_flags;
+ struct kdbus_notify_id_change old;
+ struct kdbus_notify_id_change new;
char name[0];
};
/**
- * struct kdbus_notify_id_change - name registry change message
- * @id: New or former owner of the name
- * @flags: flags field from KDBUS_HELLO_*
- *
- * Sent from kernel to userspace when the owner or activator of
- * a well-known name changes.
- *
- * Attached to:
- * KDBUS_ITEM_ID_ADD
- * KDBUS_ITEM_ID_REMOVE
- */
-struct kdbus_notify_id_change {
- __u64 id;
- __u64 flags;
-};
-
-/**
* struct kdbus_creds - process credentials
* @uid: User ID
* @gid: Group ID
@@ -518,11 +516,11 @@ struct kdbus_cmd_make {
* @KDBUS_NAME_ACTIVATOR: Name is owned by a activator connection
*/
enum kdbus_name_flags {
- KDBUS_NAME_REPLACE_EXISTING = 1 << 0,
- KDBUS_NAME_ALLOW_REPLACEMENT = 1 << 1,
- KDBUS_NAME_QUEUE = 1 << 2,
- KDBUS_NAME_IN_QUEUE = 1 << 3,
- KDBUS_NAME_ACTIVATOR = 1 << 4,
+ KDBUS_NAME_REPLACE_EXISTING = 1 << 0,
+ KDBUS_NAME_ALLOW_REPLACEMENT = 1 << 1,
+ KDBUS_NAME_QUEUE = 1 << 2,
+ KDBUS_NAME_IN_QUEUE = 1 << 3,
+ KDBUS_NAME_ACTIVATOR = 1 << 4,
};
/**
@@ -564,7 +562,7 @@ enum kdbus_name_list_flags {
* @offset: The returned offset in the caller's pool buffer.
* The user must use KDBUS_CMD_FREE to free the
* allocated memory.
- *
+ *
* This structure is used with the KDBUS_CMD_NAME_LIST ioctl.
*/
struct kdbus_cmd_name_list {
@@ -687,6 +685,11 @@ struct kdbus_cmd_match {
* @KDBUS_CMD_HELLO: By opening the bus device node a connection is
* created. After a HELLO the opened connection
* becomes an active peer on the bus.
+ * @KDBUS_CMD_BYEBYE: Disconnect a connection. If the connection's
+ * message list is empty, the calls succeeds, and
+ * the handle is rendered unusable. Otherwise,
+ * -EAGAIN is returned without any further side-
+ * effects.
* @KDBUS_CMD_MSG_SEND: Send a message and pass data from userspace to
* the kernel.
* @KDBUS_CMD_MSG_RECV: Receive a message from the kernel which is
@@ -748,6 +751,7 @@ enum kdbus_ioctl_type {
KDBUS_CMD_EP_MAKE = _IOW (KDBUS_IOC_MAGIC, 0x20, struct kdbus_cmd_make),
KDBUS_CMD_HELLO = _IOWR(KDBUS_IOC_MAGIC, 0x30, struct kdbus_cmd_hello),
+ KDBUS_CMD_BYEBYE = _IO (KDBUS_IOC_MAGIC, 0x31),
KDBUS_CMD_MSG_SEND = _IOW (KDBUS_IOC_MAGIC, 0x40, struct kdbus_msg),
KDBUS_CMD_MSG_RECV = _IOR (KDBUS_IOC_MAGIC, 0x41, __u64 *),