Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
steam
systemd
Commits
68cfd331
Commit
68cfd331
authored
Apr 16, 2013
by
Kay Sievers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bus: catch up with kernel changes
parent
c4d58b0b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
25 additions
and
26 deletions
+25
-26
src/libsystemd-bus/bus-kernel.c
src/libsystemd-bus/bus-kernel.c
+19
-19
src/libsystemd-bus/kdbus.h
src/libsystemd-bus/kdbus.h
+6
-7
No files found.
src/libsystemd-bus/bus-kernel.c
View file @
68cfd331
...
...
@@ -35,7 +35,7 @@
#define KDBUS_FOREACH_ITEM(i, k) \
for ((i) = (k)->items; \
(uint8_t*) (i) < (uint8_t*) (k) + (k)->size; \
(i) = (struct kdbus_msg_
data
*) ((uint8_t*) (i) + ALIGN8((i)->size)))
(i) = (struct kdbus_msg_
item
*) ((uint8_t*) (i) + ALIGN8((i)->size)))
static
int
parse_unique_name
(
const
char
*
s
,
uint64_t
*
id
)
{
int
r
;
...
...
@@ -53,46 +53,46 @@ static int parse_unique_name(const char *s, uint64_t *id) {
return
1
;
}
static
void
append_payload_vec
(
struct
kdbus_msg_
data
**
d
,
const
void
*
p
,
size_t
sz
)
{
static
void
append_payload_vec
(
struct
kdbus_msg_
item
**
d
,
const
void
*
p
,
size_t
sz
)
{
assert
(
d
);
assert
(
p
);
assert
(
sz
>
0
);
*
d
=
ALIGN8_PTR
(
*
d
);
(
*
d
)
->
size
=
offsetof
(
struct
kdbus_msg_
data
,
vec
)
+
sizeof
(
struct
kdbus_vec
);
(
*
d
)
->
size
=
offsetof
(
struct
kdbus_msg_
item
,
vec
)
+
sizeof
(
struct
kdbus_vec
);
(
*
d
)
->
type
=
KDBUS_MSG_PAYLOAD_VEC
;
(
*
d
)
->
vec
.
address
=
(
uint64_t
)
p
;
(
*
d
)
->
vec
.
size
=
sz
;
*
d
=
(
struct
kdbus_msg_
data
*
)
((
uint8_t
*
)
*
d
+
(
*
d
)
->
size
);
*
d
=
(
struct
kdbus_msg_
item
*
)
((
uint8_t
*
)
*
d
+
(
*
d
)
->
size
);
}
static
void
append_destination
(
struct
kdbus_msg_
data
**
d
,
const
char
*
s
,
size_t
length
)
{
static
void
append_destination
(
struct
kdbus_msg_
item
**
d
,
const
char
*
s
,
size_t
length
)
{
assert
(
d
);
assert
(
s
);
*
d
=
ALIGN8_PTR
(
*
d
);
(
*
d
)
->
size
=
offsetof
(
struct
kdbus_msg_
data
,
str
)
+
length
+
1
;
(
*
d
)
->
size
=
offsetof
(
struct
kdbus_msg_
item
,
str
)
+
length
+
1
;
(
*
d
)
->
type
=
KDBUS_MSG_DST_NAME
;
memcpy
((
*
d
)
->
str
,
s
,
length
+
1
);
*
d
=
(
struct
kdbus_msg_
data
*
)
((
uint8_t
*
)
*
d
+
(
*
d
)
->
size
);
*
d
=
(
struct
kdbus_msg_
item
*
)
((
uint8_t
*
)
*
d
+
(
*
d
)
->
size
);
}
static
void
*
append_bloom
(
struct
kdbus_msg_
data
**
d
,
size_t
length
)
{
static
void
*
append_bloom
(
struct
kdbus_msg_
item
**
d
,
size_t
length
)
{
void
*
r
;
assert
(
d
);
*
d
=
ALIGN8_PTR
(
*
d
);
(
*
d
)
->
size
=
offsetof
(
struct
kdbus_msg_
data
,
data
)
+
length
;
(
*
d
)
->
size
=
offsetof
(
struct
kdbus_msg_
item
,
data
)
+
length
;
(
*
d
)
->
type
=
KDBUS_MSG_BLOOM
;
r
=
(
*
d
)
->
data
;
*
d
=
(
struct
kdbus_msg_
data
*
)
((
uint8_t
*
)
*
d
+
(
*
d
)
->
size
);
*
d
=
(
struct
kdbus_msg_
item
*
)
((
uint8_t
*
)
*
d
+
(
*
d
)
->
size
);
return
r
;
}
...
...
@@ -161,7 +161,7 @@ static int bus_message_setup_bloom(sd_bus_message *m, void *bloom) {
}
static
int
bus_message_setup_kmsg
(
sd_bus
*
b
,
sd_bus_message
*
m
)
{
struct
kdbus_msg_
data
*
d
;
struct
kdbus_msg_
item
*
d
;
bool
well_known
;
uint64_t
unique
;
size_t
sz
,
dl
;
...
...
@@ -186,15 +186,15 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
sz
=
offsetof
(
struct
kdbus_msg
,
items
);
/* Add in fixed header, fields header and payload */
sz
+=
3
*
ALIGN8
(
offsetof
(
struct
kdbus_msg_
data
,
vec
)
+
sizeof
(
struct
kdbus_vec
));
sz
+=
3
*
ALIGN8
(
offsetof
(
struct
kdbus_msg_
item
,
vec
)
+
sizeof
(
struct
kdbus_vec
));
/* Add space for bloom filter */
sz
+=
ALIGN8
(
offsetof
(
struct
kdbus_msg_
data
,
data
)
+
BLOOM_SIZE
);
sz
+=
ALIGN8
(
offsetof
(
struct
kdbus_msg_
item
,
data
)
+
BLOOM_SIZE
);
/* Add in well-known destination header */
if
(
well_known
)
{
dl
=
strlen
(
m
->
destination
);
sz
+=
ALIGN8
(
offsetof
(
struct
kdbus_msg_
data
,
str
)
+
dl
+
1
);
sz
+=
ALIGN8
(
offsetof
(
struct
kdbus_msg_
item
,
str
)
+
dl
+
1
);
}
m
->
kdbus
=
aligned_alloc
(
8
,
sz
);
...
...
@@ -331,20 +331,20 @@ int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m) {
}
static
void
close_kdbus_msg
(
struct
kdbus_msg
*
k
)
{
struct
kdbus_msg_
data
*
d
;
struct
kdbus_msg_
item
*
d
;
KDBUS_FOREACH_ITEM
(
d
,
k
)
{
if
(
d
->
type
!=
KDBUS_MSG_UNIX_FDS
)
continue
;
close_many
(
d
->
fds
,
(
d
->
size
-
offsetof
(
struct
kdbus_msg_
data
,
fds
))
/
sizeof
(
int
));
close_many
(
d
->
fds
,
(
d
->
size
-
offsetof
(
struct
kdbus_msg_
item
,
fds
))
/
sizeof
(
int
));
}
}
static
int
bus_kernel_make_message
(
sd_bus
*
bus
,
struct
kdbus_msg
*
k
,
sd_bus_message
**
ret
)
{
sd_bus_message
*
m
=
NULL
;
struct
kdbus_msg_
data
*
d
;
struct
kdbus_msg_
item
*
d
;
unsigned
n_payload
=
0
,
n_fds
=
0
;
_cleanup_free_
int
*
fds
=
NULL
;
struct
bus_header
*
h
=
NULL
;
...
...
@@ -362,7 +362,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess
KDBUS_FOREACH_ITEM
(
d
,
k
)
{
size_t
l
;
l
=
d
->
size
-
offsetof
(
struct
kdbus_msg_
data
,
data
);
l
=
d
->
size
-
offsetof
(
struct
kdbus_msg_
item
,
data
);
if
(
d
->
type
==
KDBUS_MSG_PAYLOAD
)
{
...
...
@@ -412,7 +412,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess
KDBUS_FOREACH_ITEM
(
d
,
k
)
{
size_t
l
;
l
=
d
->
size
-
offsetof
(
struct
kdbus_msg_
data
,
data
);
l
=
d
->
size
-
offsetof
(
struct
kdbus_msg_
item
,
data
);
if
(
d
->
type
==
KDBUS_MSG_PAYLOAD
)
{
...
...
src/libsystemd-bus/kdbus.h
View file @
68cfd331
...
...
@@ -63,7 +63,7 @@ struct kdbus_timestamp {
#define KDBUS_MATCH_SRC_ID_ANY (~0ULL)
#define KDBUS_DST_ID_BROADCAST (~0ULL)
/* Message
Data
Types */
/* Message
Item
Types */
enum
{
/* Filled in by userspace */
KDBUS_MSG_NULL
,
/* empty record */
...
...
@@ -103,12 +103,12 @@ struct kdbus_vec {
};
/**
* struct kdbus_msg_
data
- chain of data blocks
* struct kdbus_msg_
item
- chain of data blocks
*
* size: overall data record size
* type: kdbus_msg_
data_
type of data
* type: kdbus_msg_
item
type of data
*/
struct
kdbus_msg_
data
{
struct
kdbus_msg_
item
{
__u64
size
;
__u64
type
;
union
{
...
...
@@ -148,8 +148,7 @@ enum {
* set by userspace:
* dst_id: destination id
* flags: KDBUS_MSG_FLAGS_*
* data_size: overall message size
* data: data records
* items: data records
*
* set by kernel:
* src_id: who sent the message
...
...
@@ -165,7 +164,7 @@ struct kdbus_msg {
__u64
cookie_reply
;
/* cookie we reply to */
__u64
timeout_ns
;
/* timespan to wait for reply */
};
struct
kdbus_msg_
data
items
[
0
];
struct
kdbus_msg_
item
items
[
0
];
};
enum
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment