[systemd-commits] src/libsystemd-bus

Daniel Mack zonque at kemper.freedesktop.org
Tue Dec 17 15:22:50 PST 2013


 src/libsystemd-bus/bus-control.c |    4 +-
 src/libsystemd-bus/bus-kernel.c  |    8 ++---
 src/libsystemd-bus/kdbus.h       |   58 ++++++++++++++++++++-------------------
 3 files changed, 37 insertions(+), 33 deletions(-)

New commits:
commit ceceaf09f9e4a53f86c623d70931676255aef334
Author: Daniel Mack <zonque at gmail.com>
Date:   Wed Dec 18 00:20:55 2013 +0100

    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

diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c
index 0072c37..9866681 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 5be91d4..bd6b84a 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 e9ffecd..f570c0d 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 *),



More information about the systemd-commits mailing list