chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
test: always use assert_se in tests
[elogind.git]
/
src
/
libsystemd
/
sd-rtnl
/
rtnl-message.c
diff --git
a/src/libsystemd/sd-rtnl/rtnl-message.c
b/src/libsystemd/sd-rtnl/rtnl-message.c
index 15e3247aca90dff62178320b78a8c3d7f5647664..8c20b8e7655eb44346a08c9baa38ba6d8a37eb31 100644
(file)
--- a/
src/libsystemd/sd-rtnl/rtnl-message.c
+++ b/
src/libsystemd/sd-rtnl/rtnl-message.c
@@
-27,6
+27,7
@@
#include "util.h"
#include "refcnt.h"
#include "util.h"
#include "refcnt.h"
+#include "missing.h"
#include "sd-rtnl.h"
#include "rtnl-util.h"
#include "sd-rtnl.h"
#include "rtnl-util.h"
@@
-37,7
+38,7
@@
#define UPDATE_RTA(m, new) (m)->next_rta_offset = (uint8_t*)(new) - (uint8_t*)(m)->hdr;
#define PUSH_CONTAINER(m, new) (m)->container_offsets[(m)->n_containers ++] = (uint8_t*)(new) - (uint8_t*)(m)->hdr;
#define UPDATE_RTA(m, new) (m)->next_rta_offset = (uint8_t*)(new) - (uint8_t*)(m)->hdr;
#define PUSH_CONTAINER(m, new) (m)->container_offsets[(m)->n_containers ++] = (uint8_t*)(new) - (uint8_t*)(m)->hdr;
-int message_new(sd_rtnl_message **ret, size_t initial_size) {
+int message_new(sd_rtnl
*rtnl, sd_rtnl
_message **ret, size_t initial_size) {
sd_rtnl_message *m;
assert_return(ret, -EINVAL);
sd_rtnl_message *m;
assert_return(ret, -EINVAL);
@@
-58,6
+59,9
@@
int message_new(sd_rtnl_message **ret, size_t initial_size) {
m->hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
m->sealed = false;
m->hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
m->sealed = false;
+ if (rtnl)
+ m->rtnl = sd_rtnl_ref(rtnl);
+
*ret = m;
return 0;
*ret = m;
return 0;
@@
-81,8
+85,8
@@
int sd_rtnl_message_route_set_dst_prefixlen(sd_rtnl_message *m, unsigned char pr
return 0;
}
return 0;
}
-int sd_rtnl_message_new_route(
uint16_t nlmsg_type, unsigned char rtm_family
,
-
sd_rtnl_message **ret
) {
+int sd_rtnl_message_new_route(
sd_rtnl *rtnl, sd_rtnl_message **ret
,
+
uint16_t nlmsg_type, unsigned char rtm_family
) {
struct rtmsg *rtm;
int r;
struct rtmsg *rtm;
int r;
@@
-90,7
+94,7
@@
int sd_rtnl_message_new_route(uint16_t nlmsg_type, unsigned char rtm_family,
assert_return(rtm_family == AF_INET || rtm_family == AF_INET6, -EINVAL);
assert_return(ret, -EINVAL);
assert_return(rtm_family == AF_INET || rtm_family == AF_INET6, -EINVAL);
assert_return(ret, -EINVAL);
- r = message_new(ret, NLMSG_SPACE(sizeof(struct rtmsg)));
+ r = message_new(r
tnl, r
et, NLMSG_SPACE(sizeof(struct rtmsg)));
if (r < 0)
return r;
if (r < 0)
return r;
@@
-142,15
+146,17
@@
int sd_rtnl_message_link_set_type(sd_rtnl_message *m, unsigned type) {
return 0;
}
return 0;
}
-int sd_rtnl_message_new_link(uint16_t nlmsg_type, int index, sd_rtnl_message **ret) {
+int sd_rtnl_message_new_link(sd_rtnl *rtnl, sd_rtnl_message **ret,
+ uint16_t nlmsg_type, int index) {
struct ifinfomsg *ifi;
int r;
assert_return(rtnl_message_type_is_link(nlmsg_type), -EINVAL);
struct ifinfomsg *ifi;
int r;
assert_return(rtnl_message_type_is_link(nlmsg_type), -EINVAL);
- assert_return(nlmsg_type == RTM_NEWLINK || index > 0, -EINVAL);
+ assert_return(nlmsg_type == RTM_NEWLINK ||
+ nlmsg_type == RTM_SETLINK || index > 0, -EINVAL);
assert_return(ret, -EINVAL);
assert_return(ret, -EINVAL);
- r = message_new(ret, NLMSG_SPACE(sizeof(struct ifinfomsg)));
+ r = message_new(r
tnl, r
et, NLMSG_SPACE(sizeof(struct ifinfomsg)));
if (r < 0)
return r;
if (r < 0)
return r;
@@
-215,8
+221,9
@@
int sd_rtnl_message_addr_set_scope(sd_rtnl_message *m, unsigned char scope) {
return 0;
}
return 0;
}
-int sd_rtnl_message_new_addr(uint16_t nlmsg_type, int index, unsigned char family,
- sd_rtnl_message **ret) {
+int sd_rtnl_message_new_addr(sd_rtnl *rtnl, sd_rtnl_message **ret,
+ uint16_t nlmsg_type, int index,
+ unsigned char family) {
struct ifaddrmsg *ifa;
int r;
struct ifaddrmsg *ifa;
int r;
@@
-225,7
+232,7
@@
int sd_rtnl_message_new_addr(uint16_t nlmsg_type, int index, unsigned char famil
assert_return(family == AF_INET || family == AF_INET6, -EINVAL);
assert_return(ret, -EINVAL);
assert_return(family == AF_INET || family == AF_INET6, -EINVAL);
assert_return(ret, -EINVAL);
- r = message_new(ret, NLMSG_SPACE(sizeof(struct ifaddrmsg)));
+ r = message_new(r
tnl, r
et, NLMSG_SPACE(sizeof(struct ifaddrmsg)));
if (r < 0)
return r;
if (r < 0)
return r;
@@
-257,6
+264,7
@@
sd_rtnl_message *sd_rtnl_message_ref(sd_rtnl_message *m) {
sd_rtnl_message *sd_rtnl_message_unref(sd_rtnl_message *m) {
if (m && REFCNT_DEC(m->n_ref) <= 0) {
sd_rtnl_message *sd_rtnl_message_unref(sd_rtnl_message *m) {
if (m && REFCNT_DEC(m->n_ref) <= 0) {
+ sd_rtnl_unref(m->rtnl);
free(m->hdr);
free(m);
}
free(m->hdr);
free(m);
}
@@
-896,7
+904,7
@@
int socket_read_message(sd_rtnl *nl, sd_rtnl_message **ret) {
if (r < 0)
return r;
if (r < 0)
return r;
- r = message_new(&m, need);
+ r = message_new(
nl,
&m, need);
if (r < 0)
return r;
if (r < 0)
return r;