mirror of
https://github.com/systemd/systemd.git
synced 2025-01-28 21:47:38 +03:00
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
This commit is contained in:
parent
d638dee035
commit
ceceaf09f9
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -26,6 +26,23 @@
|
||||
#define KDBUS_MATCH_SRC_ID_ANY (~0ULL)
|
||||
#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
|
||||
@ -43,30 +60,11 @@
|
||||
* 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
|
||||
@ -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 *),
|
||||
|
Loading…
x
Reference in New Issue
Block a user