mirror of
https://github.com/systemd/systemd
synced 2024-10-15 04:24:19 +00:00
libsystemd: export sd-netlink
It was added originally in 65f568bbeb
. The API is
has stabilized pretty much, and generally follows the usual style for
libsystemd. We've held it as a public-but-private library for almost 10 years,
let's export it.
sd_netlink_sendv() and sd_nfnl_nft_*() are excluded.
libsystemd.so seems to grow by 12k.
This commit is contained in:
parent
42d824dee3
commit
84e1001541
|
@ -782,4 +782,159 @@ global:
|
|||
LIBSYSTEMD_252 {
|
||||
global:
|
||||
sd_hwdb_new_from_path;
|
||||
|
||||
sd_netlink_new_from_fd;
|
||||
sd_netlink_open;
|
||||
sd_netlink_open_fd;
|
||||
sd_netlink_inc_rcvbuf;
|
||||
sd_netlink_ref;
|
||||
sd_netlink_unref;
|
||||
sd_netlink_send;
|
||||
sd_netlink_call_async;
|
||||
sd_netlink_call;
|
||||
sd_netlink_read;
|
||||
sd_netlink_get_events;
|
||||
sd_netlink_get_timeout;
|
||||
sd_netlink_process;
|
||||
sd_netlink_wait;
|
||||
sd_netlink_add_match;
|
||||
sd_netlink_attach_event;
|
||||
sd_netlink_detach_event;
|
||||
sd_netlink_attach_filter;
|
||||
sd_netlink_message_append_string;
|
||||
sd_netlink_message_append_strv;
|
||||
sd_netlink_message_append_flag;
|
||||
sd_netlink_message_append_u8;
|
||||
sd_netlink_message_append_u16;
|
||||
sd_netlink_message_append_u32;
|
||||
sd_netlink_message_append_u64;
|
||||
sd_netlink_message_append_s8;
|
||||
sd_netlink_message_append_s16;
|
||||
sd_netlink_message_append_s32;
|
||||
sd_netlink_message_append_s64;
|
||||
sd_netlink_message_append_data;
|
||||
sd_netlink_message_append_in_addr;
|
||||
sd_netlink_message_append_in6_addr;
|
||||
sd_netlink_message_append_sockaddr_in;
|
||||
sd_netlink_message_append_sockaddr_in6;
|
||||
sd_netlink_message_append_ether_addr;
|
||||
sd_netlink_message_append_cache_info;
|
||||
sd_netlink_message_open_container;
|
||||
sd_netlink_message_open_container_union;
|
||||
sd_netlink_message_close_container;
|
||||
sd_netlink_message_read;
|
||||
sd_netlink_message_read_data;
|
||||
sd_netlink_message_read_data_suffix0;
|
||||
sd_netlink_message_read_string_strdup;
|
||||
sd_netlink_message_read_string;
|
||||
sd_netlink_message_read_strv;
|
||||
sd_netlink_message_read_u8;
|
||||
sd_netlink_message_read_u16;
|
||||
sd_netlink_message_read_u32;
|
||||
sd_netlink_message_read_ether_addr;
|
||||
sd_netlink_message_read_cache_info;
|
||||
sd_netlink_message_read_in_addr;
|
||||
sd_netlink_message_read_in6_addr;
|
||||
sd_netlink_message_has_flag;
|
||||
sd_netlink_message_enter_container;
|
||||
sd_netlink_message_enter_array;
|
||||
sd_netlink_message_exit_container;
|
||||
sd_netlink_message_open_array;
|
||||
sd_netlink_message_cancel_array;
|
||||
sd_netlink_message_rewind;
|
||||
sd_netlink_message_next;
|
||||
sd_netlink_message_ref;
|
||||
sd_netlink_message_unref;
|
||||
sd_netlink_message_request_dump;
|
||||
sd_netlink_message_is_error;
|
||||
sd_netlink_message_get_errno;
|
||||
sd_netlink_message_get_type;
|
||||
sd_netlink_message_set_flags;
|
||||
sd_netlink_message_is_broadcast;
|
||||
sd_netlink_message_get_max_attribute;
|
||||
sd_netlink_slot_ref;
|
||||
sd_netlink_slot_unref;
|
||||
sd_netlink_slot_get_netlink;
|
||||
sd_netlink_slot_get_userdata;
|
||||
sd_netlink_slot_set_userdata;
|
||||
sd_netlink_slot_get_destroy_callback;
|
||||
sd_netlink_slot_set_destroy_callback;
|
||||
sd_netlink_slot_get_floating;
|
||||
sd_netlink_slot_set_floating;
|
||||
sd_netlink_slot_get_description;
|
||||
sd_netlink_slot_set_description;
|
||||
|
||||
sd_rtnl_message_get_family;
|
||||
sd_rtnl_message_new_addr;
|
||||
sd_rtnl_message_new_addr_update;
|
||||
sd_rtnl_message_addr_set_prefixlen;
|
||||
sd_rtnl_message_addr_set_scope;
|
||||
sd_rtnl_message_addr_set_flags;
|
||||
sd_rtnl_message_addr_get_family;
|
||||
sd_rtnl_message_addr_get_prefixlen;
|
||||
sd_rtnl_message_addr_get_scope;
|
||||
sd_rtnl_message_addr_get_flags;
|
||||
sd_rtnl_message_addr_get_ifindex;
|
||||
sd_rtnl_message_new_link;
|
||||
sd_rtnl_message_link_set_flags;
|
||||
sd_rtnl_message_link_set_type;
|
||||
sd_rtnl_message_link_set_family;
|
||||
sd_rtnl_message_link_get_ifindex;
|
||||
sd_rtnl_message_link_get_flags;
|
||||
sd_rtnl_message_link_get_type;
|
||||
sd_rtnl_message_new_route;
|
||||
sd_rtnl_message_route_set_dst_prefixlen;
|
||||
sd_rtnl_message_route_set_src_prefixlen;
|
||||
sd_rtnl_message_route_set_scope;
|
||||
sd_rtnl_message_route_set_flags;
|
||||
sd_rtnl_message_route_set_table;
|
||||
sd_rtnl_message_route_set_type;
|
||||
sd_rtnl_message_route_get_flags;
|
||||
sd_rtnl_message_route_get_family;
|
||||
sd_rtnl_message_route_get_protocol;
|
||||
sd_rtnl_message_route_get_scope;
|
||||
sd_rtnl_message_route_get_tos;
|
||||
sd_rtnl_message_route_get_table;
|
||||
sd_rtnl_message_route_get_dst_prefixlen;
|
||||
sd_rtnl_message_route_get_src_prefixlen;
|
||||
sd_rtnl_message_route_get_type;
|
||||
sd_rtnl_message_new_nexthop;
|
||||
sd_rtnl_message_nexthop_set_flags;
|
||||
sd_rtnl_message_nexthop_get_flags;
|
||||
sd_rtnl_message_nexthop_get_family;
|
||||
sd_rtnl_message_nexthop_get_protocol;
|
||||
sd_rtnl_message_new_neigh;
|
||||
sd_rtnl_message_neigh_set_flags;
|
||||
sd_rtnl_message_neigh_set_state;
|
||||
sd_rtnl_message_neigh_get_family;
|
||||
sd_rtnl_message_neigh_get_ifindex;
|
||||
sd_rtnl_message_neigh_get_state;
|
||||
sd_rtnl_message_neigh_get_flags;
|
||||
sd_rtnl_message_new_addrlabel;
|
||||
sd_rtnl_message_addrlabel_set_prefixlen;
|
||||
sd_rtnl_message_addrlabel_get_prefixlen;
|
||||
sd_rtnl_message_new_routing_policy_rule;
|
||||
sd_rtnl_message_routing_policy_rule_set_tos;
|
||||
sd_rtnl_message_routing_policy_rule_get_tos;
|
||||
sd_rtnl_message_routing_policy_rule_set_table;
|
||||
sd_rtnl_message_routing_policy_rule_get_table;
|
||||
sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen;
|
||||
sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen;
|
||||
sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen;
|
||||
sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen;
|
||||
sd_rtnl_message_routing_policy_rule_set_fib_type;
|
||||
sd_rtnl_message_routing_policy_rule_get_fib_type;
|
||||
sd_rtnl_message_routing_policy_rule_set_flags;
|
||||
sd_rtnl_message_routing_policy_rule_get_flags;
|
||||
sd_rtnl_message_new_traffic_control;
|
||||
sd_rtnl_message_traffic_control_get_ifindex;
|
||||
sd_rtnl_message_traffic_control_get_handle;
|
||||
sd_rtnl_message_traffic_control_get_parent;
|
||||
sd_rtnl_message_new_mdb;
|
||||
|
||||
sd_genl_socket_open;
|
||||
sd_genl_message_new;
|
||||
sd_genl_message_get_family_name;
|
||||
sd_genl_message_get_command;
|
||||
sd_genl_add_match;
|
||||
} LIBSYSTEMD_251;
|
||||
|
|
|
@ -365,7 +365,7 @@ int genl_get_type_system_and_header_size(
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_genl_message_new(sd_netlink *nl, const char *family_name, uint8_t cmd, sd_netlink_message **ret) {
|
||||
_public_ int sd_genl_message_new(sd_netlink *nl, const char *family_name, uint8_t cmd, sd_netlink_message **ret) {
|
||||
const GenericNetlinkFamily *family;
|
||||
int r;
|
||||
|
||||
|
@ -381,7 +381,7 @@ int sd_genl_message_new(sd_netlink *nl, const char *family_name, uint8_t cmd, sd
|
|||
return genl_message_new(nl, family, cmd, ret);
|
||||
}
|
||||
|
||||
int sd_genl_message_get_family_name(sd_netlink *nl, sd_netlink_message *m, const char **ret) {
|
||||
_public_ int sd_genl_message_get_family_name(sd_netlink *nl, sd_netlink_message *m, const char **ret) {
|
||||
const GenericNetlinkFamily *family;
|
||||
uint16_t nlmsg_type;
|
||||
int r;
|
||||
|
@ -403,7 +403,7 @@ int sd_genl_message_get_family_name(sd_netlink *nl, sd_netlink_message *m, const
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_genl_message_get_command(sd_netlink *nl, sd_netlink_message *m, uint8_t *ret) {
|
||||
_public_ int sd_genl_message_get_command(sd_netlink *nl, sd_netlink_message *m, uint8_t *ret) {
|
||||
struct genlmsghdr *h;
|
||||
uint16_t nlmsg_type;
|
||||
size_t size;
|
||||
|
@ -448,7 +448,7 @@ static int genl_family_get_multicast_group_id_by_name(const GenericNetlinkFamily
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_genl_add_match(
|
||||
_public_ int sd_genl_add_match(
|
||||
sd_netlink *nl,
|
||||
sd_netlink_slot **ret_slot,
|
||||
const char *family_name,
|
||||
|
@ -483,6 +483,6 @@ int sd_genl_add_match(
|
|||
callback, destroy_callback, userdata, description);
|
||||
}
|
||||
|
||||
int sd_genl_socket_open(sd_netlink **ret) {
|
||||
_public_ int sd_genl_socket_open(sd_netlink **ret) {
|
||||
return netlink_open_family(ret, NETLINK_GENERIC);
|
||||
}
|
||||
|
|
|
@ -138,7 +138,12 @@ int message_new_full(
|
|||
sd_netlink_message **ret);
|
||||
int message_new(sd_netlink *nl, sd_netlink_message **ret, uint16_t type);
|
||||
int message_new_synthetic_error(sd_netlink *nl, int error, uint32_t serial, sd_netlink_message **ret);
|
||||
uint32_t message_get_serial(sd_netlink_message *m);
|
||||
|
||||
static inline uint32_t message_get_serial(sd_netlink_message *m) {
|
||||
assert(m);
|
||||
return ASSERT_PTR(m->hdr)->nlmsg_seq;
|
||||
}
|
||||
|
||||
void message_seal(sd_netlink_message *m);
|
||||
|
||||
int netlink_open_family(sd_netlink **ret, int family);
|
||||
|
@ -146,12 +151,10 @@ bool netlink_pid_changed(sd_netlink *nl);
|
|||
int netlink_rqueue_make_room(sd_netlink *nl);
|
||||
int netlink_rqueue_partial_make_room(sd_netlink *nl);
|
||||
|
||||
int socket_open(int family);
|
||||
int socket_bind(sd_netlink *nl);
|
||||
int socket_broadcast_group_ref(sd_netlink *nl, unsigned group);
|
||||
int socket_broadcast_group_unref(sd_netlink *nl, unsigned group);
|
||||
int socket_write_message(sd_netlink *nl, sd_netlink_message *m);
|
||||
int socket_writev_message(sd_netlink *nl, sd_netlink_message **m, size_t msgcount);
|
||||
int socket_read_message(sd_netlink *nl);
|
||||
|
||||
int netlink_add_match_internal(
|
||||
|
@ -169,3 +172,30 @@ int netlink_add_match_internal(
|
|||
/* Make sure callbacks don't destroy the netlink connection */
|
||||
#define NETLINK_DONT_DESTROY(nl) \
|
||||
_cleanup_(sd_netlink_unrefp) _unused_ sd_netlink *_dont_destroy_##nl = sd_netlink_ref(nl)
|
||||
|
||||
/* nfnl */
|
||||
/* TODO: to be exported later */
|
||||
int sd_nfnl_socket_open(sd_netlink **ret);
|
||||
int sd_nfnl_message_batch_begin(sd_netlink *nfnl, sd_netlink_message **ret);
|
||||
int sd_nfnl_message_batch_end(sd_netlink *nfnl, sd_netlink_message **ret);
|
||||
int sd_nfnl_nft_message_del_table(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table);
|
||||
int sd_nfnl_nft_message_new_table(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table);
|
||||
int sd_nfnl_nft_message_new_basechain(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table, const char *chain,
|
||||
const char *type, uint8_t hook, int prio);
|
||||
int sd_nfnl_nft_message_new_rule(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table, const char *chain);
|
||||
int sd_nfnl_nft_message_new_set(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table, const char *set_name,
|
||||
uint32_t setid, uint32_t klen);
|
||||
int sd_nfnl_nft_message_new_setelems_begin(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table, const char *set_name);
|
||||
int sd_nfnl_nft_message_del_setelems_begin(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table, const char *set_name);
|
||||
int sd_nfnl_nft_message_add_setelem(sd_netlink_message *m,
|
||||
uint32_t num,
|
||||
const void *key, uint32_t klen,
|
||||
const void *data, uint32_t dlen);
|
||||
int sd_nfnl_nft_message_add_setelem_end(sd_netlink_message *m);
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include "socket-util.h"
|
||||
#include "util.h"
|
||||
|
||||
int sd_rtnl_message_route_set_dst_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
|
||||
_public_ int sd_rtnl_message_route_set_dst_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -35,7 +35,7 @@ int sd_rtnl_message_route_set_dst_prefixlen(sd_netlink_message *m, unsigned char
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_set_src_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
|
||||
_public_ int sd_rtnl_message_route_set_src_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -53,7 +53,7 @@ int sd_rtnl_message_route_set_src_prefixlen(sd_netlink_message *m, unsigned char
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_set_scope(sd_netlink_message *m, unsigned char scope) {
|
||||
_public_ int sd_rtnl_message_route_set_scope(sd_netlink_message *m, unsigned char scope) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -67,7 +67,7 @@ int sd_rtnl_message_route_set_scope(sd_netlink_message *m, unsigned char scope)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_set_flags(sd_netlink_message *m, unsigned flags) {
|
||||
_public_ int sd_rtnl_message_route_set_flags(sd_netlink_message *m, unsigned flags) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -81,7 +81,7 @@ int sd_rtnl_message_route_set_flags(sd_netlink_message *m, unsigned flags) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_get_flags(sd_netlink_message *m, unsigned *flags) {
|
||||
_public_ int sd_rtnl_message_route_get_flags(sd_netlink_message *m, unsigned *flags) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -96,7 +96,7 @@ int sd_rtnl_message_route_get_flags(sd_netlink_message *m, unsigned *flags) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_set_table(sd_netlink_message *m, unsigned char table) {
|
||||
_public_ int sd_rtnl_message_route_set_table(sd_netlink_message *m, unsigned char table) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -110,7 +110,7 @@ int sd_rtnl_message_route_set_table(sd_netlink_message *m, unsigned char table)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_get_family(sd_netlink_message *m, int *family) {
|
||||
_public_ int sd_rtnl_message_route_get_family(sd_netlink_message *m, int *family) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -125,7 +125,7 @@ int sd_rtnl_message_route_get_family(sd_netlink_message *m, int *family) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_get_type(sd_netlink_message *m, unsigned char *type) {
|
||||
_public_ int sd_rtnl_message_route_get_type(sd_netlink_message *m, unsigned char *type) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -140,7 +140,7 @@ int sd_rtnl_message_route_get_type(sd_netlink_message *m, unsigned char *type) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_set_type(sd_netlink_message *m, unsigned char type) {
|
||||
_public_ int sd_rtnl_message_route_set_type(sd_netlink_message *m, unsigned char type) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -154,7 +154,7 @@ int sd_rtnl_message_route_set_type(sd_netlink_message *m, unsigned char type) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_get_protocol(sd_netlink_message *m, unsigned char *protocol) {
|
||||
_public_ int sd_rtnl_message_route_get_protocol(sd_netlink_message *m, unsigned char *protocol) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -169,7 +169,7 @@ int sd_rtnl_message_route_get_protocol(sd_netlink_message *m, unsigned char *pro
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_get_scope(sd_netlink_message *m, unsigned char *scope) {
|
||||
_public_ int sd_rtnl_message_route_get_scope(sd_netlink_message *m, unsigned char *scope) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -184,7 +184,7 @@ int sd_rtnl_message_route_get_scope(sd_netlink_message *m, unsigned char *scope)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_get_tos(sd_netlink_message *m, uint8_t *tos) {
|
||||
_public_ int sd_rtnl_message_route_get_tos(sd_netlink_message *m, uint8_t *tos) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -199,7 +199,7 @@ int sd_rtnl_message_route_get_tos(sd_netlink_message *m, uint8_t *tos) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_get_table(sd_netlink_message *m, unsigned char *table) {
|
||||
_public_ int sd_rtnl_message_route_get_table(sd_netlink_message *m, unsigned char *table) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -214,7 +214,7 @@ int sd_rtnl_message_route_get_table(sd_netlink_message *m, unsigned char *table)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_get_dst_prefixlen(sd_netlink_message *m, unsigned char *dst_len) {
|
||||
_public_ int sd_rtnl_message_route_get_dst_prefixlen(sd_netlink_message *m, unsigned char *dst_len) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -229,7 +229,7 @@ int sd_rtnl_message_route_get_dst_prefixlen(sd_netlink_message *m, unsigned char
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_route_get_src_prefixlen(sd_netlink_message *m, unsigned char *src_len) {
|
||||
_public_ int sd_rtnl_message_route_get_src_prefixlen(sd_netlink_message *m, unsigned char *src_len) {
|
||||
struct rtmsg *rtm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -244,7 +244,7 @@ int sd_rtnl_message_route_get_src_prefixlen(sd_netlink_message *m, unsigned char
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_new_route(sd_netlink *rtnl, sd_netlink_message **ret,
|
||||
_public_ int sd_rtnl_message_new_route(sd_netlink *rtnl, sd_netlink_message **ret,
|
||||
uint16_t nlmsg_type, int rtm_family,
|
||||
unsigned char rtm_protocol) {
|
||||
struct rtmsg *rtm;
|
||||
|
@ -270,7 +270,7 @@ int sd_rtnl_message_new_route(sd_netlink *rtnl, sd_netlink_message **ret,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_new_nexthop(sd_netlink *rtnl, sd_netlink_message **ret,
|
||||
_public_ int sd_rtnl_message_new_nexthop(sd_netlink *rtnl, sd_netlink_message **ret,
|
||||
uint16_t nlmsg_type, int nh_family,
|
||||
unsigned char nh_protocol) {
|
||||
struct nhmsg *nhm;
|
||||
|
@ -308,7 +308,7 @@ int sd_rtnl_message_new_nexthop(sd_netlink *rtnl, sd_netlink_message **ret,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_nexthop_set_flags(sd_netlink_message *m, uint8_t flags) {
|
||||
_public_ int sd_rtnl_message_nexthop_set_flags(sd_netlink_message *m, uint8_t flags) {
|
||||
struct nhmsg *nhm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -321,7 +321,7 @@ int sd_rtnl_message_nexthop_set_flags(sd_netlink_message *m, uint8_t flags) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_nexthop_get_flags(sd_netlink_message *m, uint8_t *ret) {
|
||||
_public_ int sd_rtnl_message_nexthop_get_flags(sd_netlink_message *m, uint8_t *ret) {
|
||||
struct nhmsg *nhm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -335,7 +335,7 @@ int sd_rtnl_message_nexthop_get_flags(sd_netlink_message *m, uint8_t *ret) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_nexthop_get_family(sd_netlink_message *m, uint8_t *family) {
|
||||
_public_ int sd_rtnl_message_nexthop_get_family(sd_netlink_message *m, uint8_t *family) {
|
||||
struct nhmsg *nhm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -349,7 +349,7 @@ int sd_rtnl_message_nexthop_get_family(sd_netlink_message *m, uint8_t *family) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_nexthop_get_protocol(sd_netlink_message *m, uint8_t *protocol) {
|
||||
_public_ int sd_rtnl_message_nexthop_get_protocol(sd_netlink_message *m, uint8_t *protocol) {
|
||||
struct nhmsg *nhm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -363,7 +363,7 @@ int sd_rtnl_message_nexthop_get_protocol(sd_netlink_message *m, uint8_t *protoco
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_neigh_set_flags(sd_netlink_message *m, uint8_t flags) {
|
||||
_public_ int sd_rtnl_message_neigh_set_flags(sd_netlink_message *m, uint8_t flags) {
|
||||
struct ndmsg *ndm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -376,7 +376,7 @@ int sd_rtnl_message_neigh_set_flags(sd_netlink_message *m, uint8_t flags) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_neigh_set_state(sd_netlink_message *m, uint16_t state) {
|
||||
_public_ int sd_rtnl_message_neigh_set_state(sd_netlink_message *m, uint16_t state) {
|
||||
struct ndmsg *ndm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -389,7 +389,7 @@ int sd_rtnl_message_neigh_set_state(sd_netlink_message *m, uint16_t state) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_neigh_get_flags(sd_netlink_message *m, uint8_t *flags) {
|
||||
_public_ int sd_rtnl_message_neigh_get_flags(sd_netlink_message *m, uint8_t *flags) {
|
||||
struct ndmsg *ndm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -402,7 +402,7 @@ int sd_rtnl_message_neigh_get_flags(sd_netlink_message *m, uint8_t *flags) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_neigh_get_state(sd_netlink_message *m, uint16_t *state) {
|
||||
_public_ int sd_rtnl_message_neigh_get_state(sd_netlink_message *m, uint16_t *state) {
|
||||
struct ndmsg *ndm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -415,7 +415,7 @@ int sd_rtnl_message_neigh_get_state(sd_netlink_message *m, uint16_t *state) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_neigh_get_family(sd_netlink_message *m, int *family) {
|
||||
_public_ int sd_rtnl_message_neigh_get_family(sd_netlink_message *m, int *family) {
|
||||
struct ndmsg *ndm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -430,7 +430,7 @@ int sd_rtnl_message_neigh_get_family(sd_netlink_message *m, int *family) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_neigh_get_ifindex(sd_netlink_message *m, int *index) {
|
||||
_public_ int sd_rtnl_message_neigh_get_ifindex(sd_netlink_message *m, int *index) {
|
||||
struct ndmsg *ndm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -445,7 +445,13 @@ int sd_rtnl_message_neigh_get_ifindex(sd_netlink_message *m, int *index) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_new_neigh(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int index, int ndm_family) {
|
||||
_public_ int sd_rtnl_message_new_neigh(
|
||||
sd_netlink *rtnl,
|
||||
sd_netlink_message **ret,
|
||||
uint16_t nlmsg_type,
|
||||
int index,
|
||||
int ndm_family) {
|
||||
|
||||
struct ndmsg *ndm;
|
||||
int r;
|
||||
|
||||
|
@ -472,7 +478,7 @@ int sd_rtnl_message_new_neigh(sd_netlink *rtnl, sd_netlink_message **ret, uint16
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_link_set_flags(sd_netlink_message *m, unsigned flags, unsigned change) {
|
||||
_public_ int sd_rtnl_message_link_set_flags(sd_netlink_message *m, unsigned flags, unsigned change) {
|
||||
struct ifinfomsg *ifi;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -488,7 +494,7 @@ int sd_rtnl_message_link_set_flags(sd_netlink_message *m, unsigned flags, unsign
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_link_set_type(sd_netlink_message *m, unsigned type) {
|
||||
_public_ int sd_rtnl_message_link_set_type(sd_netlink_message *m, unsigned type) {
|
||||
struct ifinfomsg *ifi;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -502,7 +508,7 @@ int sd_rtnl_message_link_set_type(sd_netlink_message *m, unsigned type) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_link_set_family(sd_netlink_message *m, unsigned family) {
|
||||
_public_ int sd_rtnl_message_link_set_family(sd_netlink_message *m, unsigned family) {
|
||||
struct ifinfomsg *ifi;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -516,7 +522,7 @@ int sd_rtnl_message_link_set_family(sd_netlink_message *m, unsigned family) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_new_link(sd_netlink *rtnl, sd_netlink_message **ret,
|
||||
_public_ int sd_rtnl_message_new_link(sd_netlink *rtnl, sd_netlink_message **ret,
|
||||
uint16_t nlmsg_type, int index) {
|
||||
struct ifinfomsg *ifi;
|
||||
int r;
|
||||
|
@ -541,7 +547,7 @@ int sd_rtnl_message_new_link(sd_netlink *rtnl, sd_netlink_message **ret,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_addr_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
|
||||
_public_ int sd_rtnl_message_addr_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
|
||||
struct ifaddrmsg *ifa;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -559,7 +565,7 @@ int sd_rtnl_message_addr_set_prefixlen(sd_netlink_message *m, unsigned char pref
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_addr_set_flags(sd_netlink_message *m, unsigned char flags) {
|
||||
_public_ int sd_rtnl_message_addr_set_flags(sd_netlink_message *m, unsigned char flags) {
|
||||
struct ifaddrmsg *ifa;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -573,7 +579,7 @@ int sd_rtnl_message_addr_set_flags(sd_netlink_message *m, unsigned char flags) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, unsigned char scope) {
|
||||
_public_ int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, unsigned char scope) {
|
||||
struct ifaddrmsg *ifa;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -587,7 +593,7 @@ int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, unsigned char scope) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *family) {
|
||||
_public_ int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *family) {
|
||||
struct ifaddrmsg *ifa;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -602,7 +608,7 @@ int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *family) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen) {
|
||||
_public_ int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen) {
|
||||
struct ifaddrmsg *ifa;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -617,7 +623,7 @@ int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *pre
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *scope) {
|
||||
_public_ int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *scope) {
|
||||
struct ifaddrmsg *ifa;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -632,7 +638,7 @@ int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *scope)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *flags) {
|
||||
_public_ int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *flags) {
|
||||
struct ifaddrmsg *ifa;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -647,7 +653,7 @@ int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *flags)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ifindex) {
|
||||
_public_ int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ifindex) {
|
||||
struct ifaddrmsg *ifa;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -662,9 +668,13 @@ int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ifindex) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_new_addr(sd_netlink *rtnl, sd_netlink_message **ret,
|
||||
uint16_t nlmsg_type, int index,
|
||||
int family) {
|
||||
_public_ int sd_rtnl_message_new_addr(
|
||||
sd_netlink *rtnl,
|
||||
sd_netlink_message **ret,
|
||||
uint16_t nlmsg_type,
|
||||
int index,
|
||||
int family) {
|
||||
|
||||
struct ifaddrmsg *ifa;
|
||||
int r;
|
||||
|
||||
|
@ -687,8 +697,11 @@ int sd_rtnl_message_new_addr(sd_netlink *rtnl, sd_netlink_message **ret,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_new_addr_update(sd_netlink *rtnl, sd_netlink_message **ret,
|
||||
int index, int family) {
|
||||
_public_ int sd_rtnl_message_new_addr_update(
|
||||
sd_netlink *rtnl,
|
||||
sd_netlink_message **ret,
|
||||
int index,
|
||||
int family) {
|
||||
int r;
|
||||
|
||||
r = sd_rtnl_message_new_addr(rtnl, ret, RTM_NEWADDR, index, family);
|
||||
|
@ -700,7 +713,7 @@ int sd_rtnl_message_new_addr_update(sd_netlink *rtnl, sd_netlink_message **ret,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_link_get_ifindex(sd_netlink_message *m, int *ifindex) {
|
||||
_public_ int sd_rtnl_message_link_get_ifindex(sd_netlink_message *m, int *ifindex) {
|
||||
struct ifinfomsg *ifi;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -715,7 +728,7 @@ int sd_rtnl_message_link_get_ifindex(sd_netlink_message *m, int *ifindex) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_link_get_flags(sd_netlink_message *m, unsigned *flags) {
|
||||
_public_ int sd_rtnl_message_link_get_flags(sd_netlink_message *m, unsigned *flags) {
|
||||
struct ifinfomsg *ifi;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -730,7 +743,7 @@ int sd_rtnl_message_link_get_flags(sd_netlink_message *m, unsigned *flags) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_link_get_type(sd_netlink_message *m, unsigned short *type) {
|
||||
_public_ int sd_rtnl_message_link_get_type(sd_netlink_message *m, unsigned short *type) {
|
||||
struct ifinfomsg *ifi;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -745,7 +758,7 @@ int sd_rtnl_message_link_get_type(sd_netlink_message *m, unsigned short *type) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_get_family(sd_netlink_message *m, int *family) {
|
||||
_public_ int sd_rtnl_message_get_family(sd_netlink_message *m, int *family) {
|
||||
assert_return(m, -EINVAL);
|
||||
assert_return(family, -EINVAL);
|
||||
|
||||
|
@ -804,7 +817,13 @@ int sd_rtnl_message_get_family(sd_netlink_message *m, int *family) {
|
|||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_new_addrlabel(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int ifindex, int ifal_family) {
|
||||
_public_ int sd_rtnl_message_new_addrlabel(
|
||||
sd_netlink *rtnl,
|
||||
sd_netlink_message **ret,
|
||||
uint16_t nlmsg_type,
|
||||
int ifindex,
|
||||
int ifal_family) {
|
||||
|
||||
struct ifaddrlblmsg *addrlabel;
|
||||
int r;
|
||||
|
||||
|
@ -826,7 +845,7 @@ int sd_rtnl_message_new_addrlabel(sd_netlink *rtnl, sd_netlink_message **ret, ui
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_addrlabel_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
|
||||
_public_ int sd_rtnl_message_addrlabel_set_prefixlen(sd_netlink_message *m, unsigned char prefixlen) {
|
||||
struct ifaddrlblmsg *addrlabel;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -843,7 +862,7 @@ int sd_rtnl_message_addrlabel_set_prefixlen(sd_netlink_message *m, unsigned char
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_addrlabel_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen) {
|
||||
_public_ int sd_rtnl_message_addrlabel_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen) {
|
||||
struct ifaddrlblmsg *addrlabel;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -857,7 +876,12 @@ int sd_rtnl_message_addrlabel_get_prefixlen(sd_netlink_message *m, unsigned char
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_new_routing_policy_rule(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int ifal_family) {
|
||||
_public_ int sd_rtnl_message_new_routing_policy_rule(
|
||||
sd_netlink *rtnl,
|
||||
sd_netlink_message **ret,
|
||||
uint16_t nlmsg_type,
|
||||
int ifal_family) {
|
||||
|
||||
struct fib_rule_hdr *frh;
|
||||
int r;
|
||||
|
||||
|
@ -877,7 +901,7 @@ int sd_rtnl_message_new_routing_policy_rule(sd_netlink *rtnl, sd_netlink_message
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, uint8_t tos) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, uint8_t tos) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -891,7 +915,7 @@ int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, uint8_t t
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_get_tos(sd_netlink_message *m, uint8_t *tos) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_get_tos(sd_netlink_message *m, uint8_t *tos) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -905,7 +929,7 @@ int sd_rtnl_message_routing_policy_rule_get_tos(sd_netlink_message *m, uint8_t *
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, uint8_t table) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, uint8_t table) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -919,7 +943,7 @@ int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, uint8_t
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_get_table(sd_netlink_message *m, uint8_t *table) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_get_table(sd_netlink_message *m, uint8_t *table) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -933,7 +957,7 @@ int sd_rtnl_message_routing_policy_rule_get_table(sd_netlink_message *m, uint8_t
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_t flags) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_t flags) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -946,7 +970,7 @@ int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_get_flags(sd_netlink_message *m, uint32_t *flags) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_get_flags(sd_netlink_message *m, uint32_t *flags) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -959,7 +983,7 @@ int sd_rtnl_message_routing_policy_rule_get_flags(sd_netlink_message *m, uint32_
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_set_fib_type(sd_netlink_message *m, uint8_t type) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_set_fib_type(sd_netlink_message *m, uint8_t type) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -973,7 +997,7 @@ int sd_rtnl_message_routing_policy_rule_set_fib_type(sd_netlink_message *m, uint
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_get_fib_type(sd_netlink_message *m, uint8_t *type) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_get_fib_type(sd_netlink_message *m, uint8_t *type) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -987,7 +1011,7 @@ int sd_rtnl_message_routing_policy_rule_get_fib_type(sd_netlink_message *m, uint
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(sd_netlink_message *m, uint8_t len) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(sd_netlink_message *m, uint8_t len) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -1001,7 +1025,7 @@ int sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(sd_netlink_message
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen(sd_netlink_message *m, uint8_t *len) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen(sd_netlink_message *m, uint8_t *len) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -1015,7 +1039,7 @@ int sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen(sd_netlink_message
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(sd_netlink_message *m, uint8_t len) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(sd_netlink_message *m, uint8_t len) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -1029,7 +1053,7 @@ int sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(sd_netlink_message
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(sd_netlink_message *m, uint8_t *len) {
|
||||
_public_ int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(sd_netlink_message *m, uint8_t *len) {
|
||||
struct fib_rule_hdr *frh;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -1043,7 +1067,7 @@ int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(sd_netlink_message
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_new_traffic_control(
|
||||
_public_ int sd_rtnl_message_new_traffic_control(
|
||||
sd_netlink *rtnl,
|
||||
sd_netlink_message **ret,
|
||||
uint16_t nlmsg_type,
|
||||
|
@ -1072,7 +1096,7 @@ int sd_rtnl_message_new_traffic_control(
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_traffic_control_get_ifindex(sd_netlink_message *m, int *ret) {
|
||||
_public_ int sd_rtnl_message_traffic_control_get_ifindex(sd_netlink_message *m, int *ret) {
|
||||
struct tcmsg *tcm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -1086,7 +1110,7 @@ int sd_rtnl_message_traffic_control_get_ifindex(sd_netlink_message *m, int *ret)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_traffic_control_get_handle(sd_netlink_message *m, uint32_t *ret) {
|
||||
_public_ int sd_rtnl_message_traffic_control_get_handle(sd_netlink_message *m, uint32_t *ret) {
|
||||
struct tcmsg *tcm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -1100,7 +1124,7 @@ int sd_rtnl_message_traffic_control_get_handle(sd_netlink_message *m, uint32_t *
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_traffic_control_get_parent(sd_netlink_message *m, uint32_t *ret) {
|
||||
_public_ int sd_rtnl_message_traffic_control_get_parent(sd_netlink_message *m, uint32_t *ret) {
|
||||
struct tcmsg *tcm;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -1114,7 +1138,12 @@ int sd_rtnl_message_traffic_control_get_parent(sd_netlink_message *m, uint32_t *
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_new_mdb(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int mdb_ifindex) {
|
||||
_public_ int sd_rtnl_message_new_mdb(
|
||||
sd_netlink *rtnl,
|
||||
sd_netlink_message **ret,
|
||||
uint16_t nlmsg_type,
|
||||
int mdb_ifindex) {
|
||||
|
||||
struct br_port_msg *bpm;
|
||||
int r;
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ int message_new_synthetic_error(sd_netlink *nl, int error, uint32_t serial, sd_n
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_request_dump(sd_netlink_message *m, int dump) {
|
||||
_public_ int sd_netlink_message_request_dump(sd_netlink_message *m, int dump) {
|
||||
assert_return(m, -EINVAL);
|
||||
assert_return(m->hdr, -EINVAL);
|
||||
assert_return(m->protocol != NETLINK_ROUTE ||
|
||||
|
@ -129,7 +129,7 @@ int sd_netlink_message_request_dump(sd_netlink_message *m, int dump) {
|
|||
|
||||
DEFINE_TRIVIAL_REF_FUNC(sd_netlink_message, sd_netlink_message);
|
||||
|
||||
sd_netlink_message *sd_netlink_message_unref(sd_netlink_message *m) {
|
||||
_public_ sd_netlink_message* sd_netlink_message_unref(sd_netlink_message *m) {
|
||||
while (m && --m->n_ref == 0) {
|
||||
unsigned i;
|
||||
|
||||
|
@ -146,7 +146,7 @@ sd_netlink_message *sd_netlink_message_unref(sd_netlink_message *m) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int sd_netlink_message_get_type(sd_netlink_message *m, uint16_t *type) {
|
||||
_public_ int sd_netlink_message_get_type(sd_netlink_message *m, uint16_t *type) {
|
||||
assert_return(m, -EINVAL);
|
||||
assert_return(type != 0, -EINVAL);
|
||||
|
||||
|
@ -155,7 +155,7 @@ int sd_netlink_message_get_type(sd_netlink_message *m, uint16_t *type) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_set_flags(sd_netlink_message *m, uint16_t flags) {
|
||||
_public_ int sd_netlink_message_set_flags(sd_netlink_message *m, uint16_t flags) {
|
||||
assert_return(m, -EINVAL);
|
||||
assert_return(flags != 0, -EINVAL);
|
||||
|
||||
|
@ -164,7 +164,7 @@ int sd_netlink_message_set_flags(sd_netlink_message *m, uint16_t flags) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_is_broadcast(sd_netlink_message *m) {
|
||||
_public_ int sd_netlink_message_is_broadcast(sd_netlink_message *m) {
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
return m->multicast_group != 0;
|
||||
|
@ -231,7 +231,7 @@ static int message_attribute_has_type(sd_netlink_message *m, size_t *out_size, u
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type, const char *data) {
|
||||
_public_ int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type, const char *data) {
|
||||
size_t length, size;
|
||||
int r;
|
||||
|
||||
|
@ -257,7 +257,7 @@ int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_strv(sd_netlink_message *m, unsigned short type, char * const *data) {
|
||||
_public_ int sd_netlink_message_append_strv(sd_netlink_message *m, unsigned short type, char * const *data) {
|
||||
size_t length, size;
|
||||
int r;
|
||||
|
||||
|
@ -285,7 +285,7 @@ int sd_netlink_message_append_strv(sd_netlink_message *m, unsigned short type, c
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type) {
|
||||
_public_ int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type) {
|
||||
size_t size;
|
||||
int r;
|
||||
|
||||
|
@ -303,7 +303,7 @@ int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uint8_t data) {
|
||||
_public_ int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uint8_t data) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -320,7 +320,7 @@ int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uin
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_u16(sd_netlink_message *m, unsigned short type, uint16_t data) {
|
||||
_public_ int sd_netlink_message_append_u16(sd_netlink_message *m, unsigned short type, uint16_t data) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -337,7 +337,7 @@ int sd_netlink_message_append_u16(sd_netlink_message *m, unsigned short type, ui
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_u32(sd_netlink_message *m, unsigned short type, uint32_t data) {
|
||||
_public_ int sd_netlink_message_append_u32(sd_netlink_message *m, unsigned short type, uint32_t data) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -354,7 +354,7 @@ int sd_netlink_message_append_u32(sd_netlink_message *m, unsigned short type, ui
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_u64(sd_netlink_message *m, unsigned short type, uint64_t data) {
|
||||
_public_ int sd_netlink_message_append_u64(sd_netlink_message *m, unsigned short type, uint64_t data) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -371,7 +371,7 @@ int sd_netlink_message_append_u64(sd_netlink_message *m, unsigned short type, ui
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_s8(sd_netlink_message *m, unsigned short type, int8_t data) {
|
||||
_public_ int sd_netlink_message_append_s8(sd_netlink_message *m, unsigned short type, int8_t data) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -388,7 +388,7 @@ int sd_netlink_message_append_s8(sd_netlink_message *m, unsigned short type, int
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_s16(sd_netlink_message *m, unsigned short type, int16_t data) {
|
||||
_public_ int sd_netlink_message_append_s16(sd_netlink_message *m, unsigned short type, int16_t data) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -405,7 +405,7 @@ int sd_netlink_message_append_s16(sd_netlink_message *m, unsigned short type, in
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_s32(sd_netlink_message *m, unsigned short type, int32_t data) {
|
||||
_public_ int sd_netlink_message_append_s32(sd_netlink_message *m, unsigned short type, int32_t data) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -422,7 +422,7 @@ int sd_netlink_message_append_s32(sd_netlink_message *m, unsigned short type, in
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_s64(sd_netlink_message *m, unsigned short type, int64_t data) {
|
||||
_public_ int sd_netlink_message_append_s64(sd_netlink_message *m, unsigned short type, int64_t data) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -439,7 +439,7 @@ int sd_netlink_message_append_s64(sd_netlink_message *m, unsigned short type, in
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_data(sd_netlink_message *m, unsigned short type, const void *data, size_t len) {
|
||||
_public_ int sd_netlink_message_append_data(sd_netlink_message *m, unsigned short type, const void *data, size_t len) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -471,11 +471,11 @@ int netlink_message_append_in_addr_union(sd_netlink_message *m, unsigned short t
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_in_addr(sd_netlink_message *m, unsigned short type, const struct in_addr *data) {
|
||||
_public_ int sd_netlink_message_append_in_addr(sd_netlink_message *m, unsigned short type, const struct in_addr *data) {
|
||||
return netlink_message_append_in_addr_union(m, type, AF_INET, (const union in_addr_union *) data);
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_in6_addr(sd_netlink_message *m, unsigned short type, const struct in6_addr *data) {
|
||||
_public_ int sd_netlink_message_append_in6_addr(sd_netlink_message *m, unsigned short type, const struct in6_addr *data) {
|
||||
return netlink_message_append_in_addr_union(m, type, AF_INET6, (const union in_addr_union *) data);
|
||||
}
|
||||
|
||||
|
@ -498,15 +498,15 @@ int netlink_message_append_sockaddr_union(sd_netlink_message *m, unsigned short
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, unsigned short type, const struct sockaddr_in *data) {
|
||||
_public_ int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, unsigned short type, const struct sockaddr_in *data) {
|
||||
return netlink_message_append_sockaddr_union(m, type, (const union sockaddr_union *) data);
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_sockaddr_in6(sd_netlink_message *m, unsigned short type, const struct sockaddr_in6 *data) {
|
||||
_public_ int sd_netlink_message_append_sockaddr_in6(sd_netlink_message *m, unsigned short type, const struct sockaddr_in6 *data) {
|
||||
return netlink_message_append_sockaddr_union(m, type, (const union sockaddr_union *) data);
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_ether_addr(sd_netlink_message *m, unsigned short type, const struct ether_addr *data) {
|
||||
_public_ int sd_netlink_message_append_ether_addr(sd_netlink_message *m, unsigned short type, const struct ether_addr *data) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -543,7 +543,7 @@ int netlink_message_append_hw_addr(sd_netlink_message *m, unsigned short type, c
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_append_cache_info(sd_netlink_message *m, unsigned short type, const struct ifa_cacheinfo *info) {
|
||||
_public_ int sd_netlink_message_append_cache_info(sd_netlink_message *m, unsigned short type, const struct ifa_cacheinfo *info) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -561,7 +561,7 @@ int sd_netlink_message_append_cache_info(sd_netlink_message *m, unsigned short t
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_open_container(sd_netlink_message *m, unsigned short type) {
|
||||
_public_ int sd_netlink_message_open_container(sd_netlink_message *m, unsigned short type) {
|
||||
size_t size;
|
||||
int r;
|
||||
|
||||
|
@ -610,7 +610,7 @@ int sd_netlink_message_open_container(sd_netlink_message *m, unsigned short type
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_open_container_union(sd_netlink_message *m, unsigned short type, const char *key) {
|
||||
_public_ int sd_netlink_message_open_container_union(sd_netlink_message *m, unsigned short type, const char *key) {
|
||||
const NLTypeSystemUnion *type_system_union;
|
||||
int r;
|
||||
|
||||
|
@ -645,7 +645,7 @@ int sd_netlink_message_open_container_union(sd_netlink_message *m, unsigned shor
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_close_container(sd_netlink_message *m) {
|
||||
_public_ int sd_netlink_message_close_container(sd_netlink_message *m) {
|
||||
assert_return(m, -EINVAL);
|
||||
assert_return(!m->sealed, -EPERM);
|
||||
assert_return(m->n_containers > 0, -EINVAL);
|
||||
|
@ -657,7 +657,7 @@ int sd_netlink_message_close_container(sd_netlink_message *m) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_open_array(sd_netlink_message *m, uint16_t type) {
|
||||
_public_ int sd_netlink_message_open_array(sd_netlink_message *m, uint16_t type) {
|
||||
int r;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -675,7 +675,7 @@ int sd_netlink_message_open_array(sd_netlink_message *m, uint16_t type) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_cancel_array(sd_netlink_message *m) {
|
||||
_public_ int sd_netlink_message_cancel_array(sd_netlink_message *m) {
|
||||
uint32_t rta_len;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -731,7 +731,7 @@ static int netlink_message_read_internal(
|
|||
return RTA_PAYLOAD(rta);
|
||||
}
|
||||
|
||||
int sd_netlink_message_read(sd_netlink_message *m, unsigned short type, size_t size, void *data) {
|
||||
_public_ int sd_netlink_message_read(sd_netlink_message *m, unsigned short type, size_t size, void *data) {
|
||||
void *attr_data;
|
||||
int r;
|
||||
|
||||
|
@ -750,7 +750,7 @@ int sd_netlink_message_read(sd_netlink_message *m, unsigned short type, size_t s
|
|||
return r;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_data(sd_netlink_message *m, unsigned short type, size_t *ret_size, void **ret_data) {
|
||||
_public_ int sd_netlink_message_read_data(sd_netlink_message *m, unsigned short type, size_t *ret_size, void **ret_data) {
|
||||
void *attr_data;
|
||||
int r;
|
||||
|
||||
|
@ -776,7 +776,7 @@ int sd_netlink_message_read_data(sd_netlink_message *m, unsigned short type, siz
|
|||
return r;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_data_suffix0(sd_netlink_message *m, unsigned short type, size_t *ret_size, void **ret_data) {
|
||||
_public_ int sd_netlink_message_read_data_suffix0(sd_netlink_message *m, unsigned short type, size_t *ret_size, void **ret_data) {
|
||||
void *attr_data;
|
||||
int r;
|
||||
|
||||
|
@ -802,7 +802,7 @@ int sd_netlink_message_read_data_suffix0(sd_netlink_message *m, unsigned short t
|
|||
return r;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_string_strdup(sd_netlink_message *m, unsigned short type, char **data) {
|
||||
_public_ int sd_netlink_message_read_string_strdup(sd_netlink_message *m, unsigned short type, char **data) {
|
||||
void *attr_data;
|
||||
int r;
|
||||
|
||||
|
@ -829,7 +829,7 @@ int sd_netlink_message_read_string_strdup(sd_netlink_message *m, unsigned short
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_string(sd_netlink_message *m, unsigned short type, const char **data) {
|
||||
_public_ int sd_netlink_message_read_string(sd_netlink_message *m, unsigned short type, const char **data) {
|
||||
void *attr_data;
|
||||
int r;
|
||||
|
||||
|
@ -852,7 +852,7 @@ int sd_netlink_message_read_string(sd_netlink_message *m, unsigned short type, c
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_u8(sd_netlink_message *m, unsigned short type, uint8_t *data) {
|
||||
_public_ int sd_netlink_message_read_u8(sd_netlink_message *m, unsigned short type, uint8_t *data) {
|
||||
void *attr_data;
|
||||
int r;
|
||||
|
||||
|
@ -875,7 +875,7 @@ int sd_netlink_message_read_u8(sd_netlink_message *m, unsigned short type, uint8
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_u16(sd_netlink_message *m, unsigned short type, uint16_t *data) {
|
||||
_public_ int sd_netlink_message_read_u16(sd_netlink_message *m, unsigned short type, uint16_t *data) {
|
||||
void *attr_data;
|
||||
bool net_byteorder;
|
||||
int r;
|
||||
|
@ -903,7 +903,7 @@ int sd_netlink_message_read_u16(sd_netlink_message *m, unsigned short type, uint
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_u32(sd_netlink_message *m, unsigned short type, uint32_t *data) {
|
||||
_public_ int sd_netlink_message_read_u32(sd_netlink_message *m, unsigned short type, uint32_t *data) {
|
||||
void *attr_data;
|
||||
bool net_byteorder;
|
||||
int r;
|
||||
|
@ -931,7 +931,7 @@ int sd_netlink_message_read_u32(sd_netlink_message *m, unsigned short type, uint
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_ether_addr(sd_netlink_message *m, unsigned short type, struct ether_addr *data) {
|
||||
_public_ int sd_netlink_message_read_ether_addr(sd_netlink_message *m, unsigned short type, struct ether_addr *data) {
|
||||
void *attr_data;
|
||||
int r;
|
||||
|
||||
|
@ -979,7 +979,7 @@ int netlink_message_read_hw_addr(sd_netlink_message *m, unsigned short type, str
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_cache_info(sd_netlink_message *m, unsigned short type, struct ifa_cacheinfo *info) {
|
||||
_public_ int sd_netlink_message_read_cache_info(sd_netlink_message *m, unsigned short type, struct ifa_cacheinfo *info) {
|
||||
void *attr_data;
|
||||
int r;
|
||||
|
||||
|
@ -1026,7 +1026,7 @@ int netlink_message_read_in_addr_union(sd_netlink_message *m, unsigned short typ
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_in_addr(sd_netlink_message *m, unsigned short type, struct in_addr *data) {
|
||||
_public_ int sd_netlink_message_read_in_addr(sd_netlink_message *m, unsigned short type, struct in_addr *data) {
|
||||
union in_addr_union u;
|
||||
int r;
|
||||
|
||||
|
@ -1037,7 +1037,7 @@ int sd_netlink_message_read_in_addr(sd_netlink_message *m, unsigned short type,
|
|||
return r;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_in6_addr(sd_netlink_message *m, unsigned short type, struct in6_addr *data) {
|
||||
_public_ int sd_netlink_message_read_in6_addr(sd_netlink_message *m, unsigned short type, struct in6_addr *data) {
|
||||
union in_addr_union u;
|
||||
int r;
|
||||
|
||||
|
@ -1048,7 +1048,7 @@ int sd_netlink_message_read_in6_addr(sd_netlink_message *m, unsigned short type,
|
|||
return r;
|
||||
}
|
||||
|
||||
int sd_netlink_message_has_flag(sd_netlink_message *m, unsigned short type) {
|
||||
_public_ int sd_netlink_message_has_flag(sd_netlink_message *m, unsigned short type) {
|
||||
void *attr_data;
|
||||
int r;
|
||||
|
||||
|
@ -1069,7 +1069,7 @@ int sd_netlink_message_has_flag(sd_netlink_message *m, unsigned short type) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int sd_netlink_message_read_strv(sd_netlink_message *m, unsigned short container_type, unsigned short type_id, char ***ret) {
|
||||
_public_ int sd_netlink_message_read_strv(sd_netlink_message *m, unsigned short container_type, unsigned short type_id, char ***ret) {
|
||||
_cleanup_strv_free_ char **s = NULL;
|
||||
const NLTypeSystem *type_system;
|
||||
const NLType *nl_type;
|
||||
|
@ -1166,7 +1166,7 @@ static int netlink_container_parse(
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short type_id) {
|
||||
_public_ int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short type_id) {
|
||||
const NLType *nl_type;
|
||||
const NLTypeSystem *type_system;
|
||||
void *container;
|
||||
|
@ -1261,7 +1261,7 @@ int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short typ
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_enter_array(sd_netlink_message *m, unsigned short type_id) {
|
||||
_public_ int sd_netlink_message_enter_array(sd_netlink_message *m, unsigned short type_id) {
|
||||
void *container;
|
||||
size_t size;
|
||||
int r;
|
||||
|
@ -1290,7 +1290,7 @@ int sd_netlink_message_enter_array(sd_netlink_message *m, unsigned short type_id
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_exit_container(sd_netlink_message *m) {
|
||||
_public_ int sd_netlink_message_exit_container(sd_netlink_message *m) {
|
||||
assert_return(m, -EINVAL);
|
||||
assert_return(m->sealed, -EINVAL);
|
||||
assert_return(m->n_containers > 0, -EINVAL);
|
||||
|
@ -1304,7 +1304,7 @@ int sd_netlink_message_exit_container(sd_netlink_message *m) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_message_get_max_attribute(sd_netlink_message *m, uint16_t *ret) {
|
||||
_public_ int sd_netlink_message_get_max_attribute(sd_netlink_message *m, uint16_t *ret) {
|
||||
assert_return(m, -EINVAL);
|
||||
assert_return(m->sealed, -EINVAL);
|
||||
assert_return(ret, -EINVAL);
|
||||
|
@ -1313,21 +1313,14 @@ int sd_netlink_message_get_max_attribute(sd_netlink_message *m, uint16_t *ret) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint32_t message_get_serial(sd_netlink_message *m) {
|
||||
assert(m);
|
||||
assert(m->hdr);
|
||||
|
||||
return m->hdr->nlmsg_seq;
|
||||
}
|
||||
|
||||
int sd_netlink_message_is_error(sd_netlink_message *m) {
|
||||
_public_ int sd_netlink_message_is_error(sd_netlink_message *m) {
|
||||
assert_return(m, 0);
|
||||
assert_return(m->hdr, 0);
|
||||
|
||||
return m->hdr->nlmsg_type == NLMSG_ERROR;
|
||||
}
|
||||
|
||||
int sd_netlink_message_get_errno(sd_netlink_message *m) {
|
||||
_public_ int sd_netlink_message_get_errno(sd_netlink_message *m) {
|
||||
struct nlmsgerr *err;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
@ -1362,7 +1355,7 @@ static int netlink_message_parse_error(sd_netlink_message *m) {
|
|||
NLMSG_PAYLOAD(m->hdr, hlen));
|
||||
}
|
||||
|
||||
int sd_netlink_message_rewind(sd_netlink_message *m, sd_netlink *nl) {
|
||||
_public_ int sd_netlink_message_rewind(sd_netlink_message *m, sd_netlink *nl) {
|
||||
size_t size;
|
||||
int r;
|
||||
|
||||
|
|
|
@ -17,16 +17,6 @@
|
|||
#include "socket-util.h"
|
||||
#include "util.h"
|
||||
|
||||
int socket_open(int family) {
|
||||
int fd;
|
||||
|
||||
fd = socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, family);
|
||||
if (fd < 0)
|
||||
return -errno;
|
||||
|
||||
return fd_move_above_stdio(fd);
|
||||
}
|
||||
|
||||
static int broadcast_groups_get(sd_netlink *nl) {
|
||||
_cleanup_free_ uint32_t *groups = NULL;
|
||||
socklen_t len = 0, old_len;
|
||||
|
@ -192,32 +182,6 @@ int socket_write_message(sd_netlink *nl, sd_netlink_message *m) {
|
|||
return k;
|
||||
}
|
||||
|
||||
int socket_writev_message(sd_netlink *nl, sd_netlink_message **m, size_t msgcount) {
|
||||
_cleanup_free_ struct iovec *iovs = NULL;
|
||||
ssize_t k;
|
||||
|
||||
assert(nl);
|
||||
assert(m);
|
||||
assert(msgcount > 0);
|
||||
|
||||
iovs = new(struct iovec, msgcount);
|
||||
if (!iovs)
|
||||
return -ENOMEM;
|
||||
|
||||
for (size_t i = 0; i < msgcount; i++) {
|
||||
assert(m[i]->hdr);
|
||||
assert(m[i]->hdr->nlmsg_len > 0);
|
||||
|
||||
iovs[i] = IOVEC_MAKE(m[i]->hdr, m[i]->hdr->nlmsg_len);
|
||||
}
|
||||
|
||||
k = writev(nl->fd, iovs, msgcount);
|
||||
if (k < 0)
|
||||
return -errno;
|
||||
|
||||
return k;
|
||||
}
|
||||
|
||||
static int socket_recv_message(int fd, struct iovec *iov, uint32_t *ret_mcast_group, bool peek) {
|
||||
union sockaddr_union sender;
|
||||
CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct nl_pktinfo))) control;
|
||||
|
|
|
@ -2,11 +2,14 @@
|
|||
|
||||
#include "sd-netlink.h"
|
||||
|
||||
#include "fd-util.h"
|
||||
#include "format-util.h"
|
||||
#include "io-util.h"
|
||||
#include "memory-util.h"
|
||||
#include "netlink-internal.h"
|
||||
#include "netlink-util.h"
|
||||
#include "parse-util.h"
|
||||
#include "process-util.h"
|
||||
#include "strv.h"
|
||||
|
||||
int rtnl_set_link_name(sd_netlink **rtnl, int ifindex, const char *name) {
|
||||
|
@ -628,3 +631,121 @@ int rtattr_read_nexthop(const struct rtnexthop *rtnh, size_t size, int family, O
|
|||
*ret = TAKE_PTR(set);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool netlink_pid_changed(sd_netlink *nl) {
|
||||
/* We don't support people creating an nl connection and
|
||||
* keeping it around over a fork(). Let's complain. */
|
||||
return ASSERT_PTR(nl)->original_pid != getpid_cached();
|
||||
}
|
||||
|
||||
static int socket_open(int family) {
|
||||
int fd;
|
||||
|
||||
fd = socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, family);
|
||||
if (fd < 0)
|
||||
return -errno;
|
||||
|
||||
return fd_move_above_stdio(fd);
|
||||
}
|
||||
|
||||
int netlink_open_family(sd_netlink **ret, int family) {
|
||||
_cleanup_close_ int fd = -1;
|
||||
int r;
|
||||
|
||||
fd = socket_open(family);
|
||||
if (fd < 0)
|
||||
return fd;
|
||||
|
||||
r = sd_netlink_open_fd(ret, fd);
|
||||
if (r < 0)
|
||||
return r;
|
||||
TAKE_FD(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void netlink_seal_message(sd_netlink *nl, sd_netlink_message *m) {
|
||||
uint32_t picked;
|
||||
|
||||
assert(nl);
|
||||
assert(!netlink_pid_changed(nl));
|
||||
assert(m);
|
||||
assert(m->hdr);
|
||||
|
||||
/* Avoid collisions with outstanding requests */
|
||||
do {
|
||||
picked = nl->serial;
|
||||
|
||||
/* Don't use seq == 0, as that is used for broadcasts, so we would get confused by replies to
|
||||
such messages */
|
||||
nl->serial = nl->serial == UINT32_MAX ? 1 : nl->serial + 1;
|
||||
|
||||
} while (hashmap_contains(nl->reply_callbacks, UINT32_TO_PTR(picked)));
|
||||
|
||||
m->hdr->nlmsg_seq = picked;
|
||||
message_seal(m);
|
||||
}
|
||||
|
||||
static int socket_writev_message(sd_netlink *nl, sd_netlink_message **m, size_t msgcount) {
|
||||
_cleanup_free_ struct iovec *iovs = NULL;
|
||||
ssize_t k;
|
||||
|
||||
assert(nl);
|
||||
assert(m);
|
||||
assert(msgcount > 0);
|
||||
|
||||
iovs = new(struct iovec, msgcount);
|
||||
if (!iovs)
|
||||
return -ENOMEM;
|
||||
|
||||
for (size_t i = 0; i < msgcount; i++) {
|
||||
assert(m[i]->hdr);
|
||||
assert(m[i]->hdr->nlmsg_len > 0);
|
||||
|
||||
iovs[i] = IOVEC_MAKE(m[i]->hdr, m[i]->hdr->nlmsg_len);
|
||||
}
|
||||
|
||||
k = writev(nl->fd, iovs, msgcount);
|
||||
if (k < 0)
|
||||
return -errno;
|
||||
|
||||
return k;
|
||||
}
|
||||
|
||||
int sd_netlink_sendv(
|
||||
sd_netlink *nl,
|
||||
sd_netlink_message **messages,
|
||||
size_t msgcount,
|
||||
uint32_t **ret_serial) {
|
||||
|
||||
_cleanup_free_ uint32_t *serials = NULL;
|
||||
int r;
|
||||
|
||||
assert_return(nl, -EINVAL);
|
||||
assert_return(!netlink_pid_changed(nl), -ECHILD);
|
||||
assert_return(messages, -EINVAL);
|
||||
assert_return(msgcount > 0, -EINVAL);
|
||||
|
||||
if (ret_serial) {
|
||||
serials = new(uint32_t, msgcount);
|
||||
if (!serials)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < msgcount; i++) {
|
||||
assert_return(!messages[i]->sealed, -EPERM);
|
||||
|
||||
netlink_seal_message(nl, messages[i]);
|
||||
if (serials)
|
||||
serials[i] = message_get_serial(messages[i]);
|
||||
}
|
||||
|
||||
r = socket_writev_message(nl, messages, msgcount);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (ret_serial)
|
||||
*ret_serial = TAKE_PTR(serials);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
|
|
@ -142,3 +142,8 @@ void rtattr_append_attribute_internal(struct rtattr *rta, unsigned short type, c
|
|||
int rtattr_append_attribute(struct rtattr **rta, unsigned short type, const void *data, size_t data_length);
|
||||
|
||||
int rtattr_read_nexthop(const struct rtnexthop *rtnh, size_t size, int family, OrderedSet **ret);
|
||||
|
||||
void netlink_seal_message(sd_netlink *nl, sd_netlink_message *m);
|
||||
|
||||
/* TODO: to be exported later */
|
||||
int sd_netlink_sendv(sd_netlink *nl, sd_netlink_message **messages, size_t msgcnt, uint32_t **ret_serial);
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "netlink-genl.h"
|
||||
#include "netlink-internal.h"
|
||||
#include "netlink-slot.h"
|
||||
#include "netlink-util.h"
|
||||
#include "process-util.h"
|
||||
#include "socket-util.h"
|
||||
#include "string-util.h"
|
||||
|
@ -68,7 +69,7 @@ static int netlink_new(sd_netlink **ret) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_new_from_fd(sd_netlink **ret, int fd) {
|
||||
_public_ int sd_netlink_new_from_fd(sd_netlink **ret, int fd) {
|
||||
_cleanup_(sd_netlink_unrefp) sd_netlink *nl = NULL;
|
||||
socklen_t addrlen;
|
||||
int r;
|
||||
|
@ -93,7 +94,7 @@ int sd_netlink_new_from_fd(sd_netlink **ret, int fd) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_open_fd(sd_netlink **ret, int fd) {
|
||||
_public_ int sd_netlink_open_fd(sd_netlink **ret, int fd) {
|
||||
_cleanup_(sd_netlink_unrefp) sd_netlink *nl = NULL;
|
||||
int r, protocol;
|
||||
|
||||
|
@ -131,36 +132,11 @@ int sd_netlink_open_fd(sd_netlink **ret, int fd) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int netlink_open_family(sd_netlink **ret, int family) {
|
||||
_cleanup_close_ int fd = -1;
|
||||
int r;
|
||||
|
||||
fd = socket_open(family);
|
||||
if (fd < 0)
|
||||
return fd;
|
||||
|
||||
r = sd_netlink_open_fd(ret, fd);
|
||||
if (r < 0)
|
||||
return r;
|
||||
TAKE_FD(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_open(sd_netlink **ret) {
|
||||
_public_ int sd_netlink_open(sd_netlink **ret) {
|
||||
return netlink_open_family(ret, NETLINK_ROUTE);
|
||||
}
|
||||
|
||||
bool netlink_pid_changed(sd_netlink *nl) {
|
||||
assert(nl);
|
||||
|
||||
/* We don't support people creating an nl connection and
|
||||
* keeping it around over a fork(). Let's complain. */
|
||||
|
||||
return nl->original_pid != getpid_cached();
|
||||
}
|
||||
|
||||
int sd_netlink_inc_rcvbuf(sd_netlink *nl, size_t size) {
|
||||
_public_ int sd_netlink_inc_rcvbuf(sd_netlink *nl, size_t size) {
|
||||
assert_return(nl, -EINVAL);
|
||||
assert_return(!netlink_pid_changed(nl), -ECHILD);
|
||||
|
||||
|
@ -204,29 +180,7 @@ static sd_netlink *netlink_free(sd_netlink *nl) {
|
|||
|
||||
DEFINE_TRIVIAL_REF_UNREF_FUNC(sd_netlink, sd_netlink, netlink_free);
|
||||
|
||||
static void netlink_seal_message(sd_netlink *nl, sd_netlink_message *m) {
|
||||
uint32_t picked;
|
||||
|
||||
assert(nl);
|
||||
assert(!netlink_pid_changed(nl));
|
||||
assert(m);
|
||||
assert(m->hdr);
|
||||
|
||||
/* Avoid collisions with outstanding requests */
|
||||
do {
|
||||
picked = nl->serial;
|
||||
|
||||
/* Don't use seq == 0, as that is used for broadcasts, so we would get confused by replies to
|
||||
such messages */
|
||||
nl->serial = nl->serial == UINT32_MAX ? 1 : nl->serial + 1;
|
||||
|
||||
} while (hashmap_contains(nl->reply_callbacks, UINT32_TO_PTR(picked)));
|
||||
|
||||
m->hdr->nlmsg_seq = picked;
|
||||
message_seal(m);
|
||||
}
|
||||
|
||||
int sd_netlink_send(
|
||||
_public_ int sd_netlink_send(
|
||||
sd_netlink *nl,
|
||||
sd_netlink_message *message,
|
||||
uint32_t *serial) {
|
||||
|
@ -250,44 +204,6 @@ int sd_netlink_send(
|
|||
return 1;
|
||||
}
|
||||
|
||||
int sd_netlink_sendv(
|
||||
sd_netlink *nl,
|
||||
sd_netlink_message **messages,
|
||||
size_t msgcount,
|
||||
uint32_t **ret_serial) {
|
||||
|
||||
_cleanup_free_ uint32_t *serials = NULL;
|
||||
int r;
|
||||
|
||||
assert_return(nl, -EINVAL);
|
||||
assert_return(!netlink_pid_changed(nl), -ECHILD);
|
||||
assert_return(messages, -EINVAL);
|
||||
assert_return(msgcount > 0, -EINVAL);
|
||||
|
||||
if (ret_serial) {
|
||||
serials = new(uint32_t, msgcount);
|
||||
if (!serials)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < msgcount; i++) {
|
||||
assert_return(!messages[i]->sealed, -EPERM);
|
||||
|
||||
netlink_seal_message(nl, messages[i]);
|
||||
if (serials)
|
||||
serials[i] = message_get_serial(messages[i]);
|
||||
}
|
||||
|
||||
r = socket_writev_message(nl, messages, msgcount);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (ret_serial)
|
||||
*ret_serial = TAKE_PTR(serials);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int netlink_rqueue_make_room(sd_netlink *nl) {
|
||||
assert(nl);
|
||||
|
||||
|
@ -594,7 +510,7 @@ static int timeout_compare(const void *a, const void *b) {
|
|||
return CMP(x->timeout, y->timeout);
|
||||
}
|
||||
|
||||
int sd_netlink_call_async(
|
||||
_public_ int sd_netlink_call_async(
|
||||
sd_netlink *nl,
|
||||
sd_netlink_slot **ret_slot,
|
||||
sd_netlink_message *m,
|
||||
|
@ -659,7 +575,7 @@ int sd_netlink_call_async(
|
|||
return k;
|
||||
}
|
||||
|
||||
int sd_netlink_read(
|
||||
_public_ int sd_netlink_read(
|
||||
sd_netlink *nl,
|
||||
uint32_t serial,
|
||||
uint64_t usec,
|
||||
|
@ -736,7 +652,7 @@ int sd_netlink_read(
|
|||
}
|
||||
}
|
||||
|
||||
int sd_netlink_call(
|
||||
_public_ int sd_netlink_call(
|
||||
sd_netlink *nl,
|
||||
sd_netlink_message *message,
|
||||
uint64_t usec,
|
||||
|
@ -756,14 +672,14 @@ int sd_netlink_call(
|
|||
return sd_netlink_read(nl, serial, usec, ret);
|
||||
}
|
||||
|
||||
int sd_netlink_get_events(sd_netlink *nl) {
|
||||
_public_ int sd_netlink_get_events(sd_netlink *nl) {
|
||||
assert_return(nl, -EINVAL);
|
||||
assert_return(!netlink_pid_changed(nl), -ECHILD);
|
||||
|
||||
return nl->rqueue_size == 0 ? POLLIN : 0;
|
||||
}
|
||||
|
||||
int sd_netlink_get_timeout(sd_netlink *nl, uint64_t *timeout_usec) {
|
||||
_public_ int sd_netlink_get_timeout(sd_netlink *nl, uint64_t *timeout_usec) {
|
||||
struct reply_callback *c;
|
||||
|
||||
assert_return(nl, -EINVAL);
|
||||
|
@ -846,7 +762,7 @@ static int prepare_callback(sd_event_source *s, void *userdata) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int sd_netlink_attach_event(sd_netlink *nl, sd_event *event, int64_t priority) {
|
||||
_public_ int sd_netlink_attach_event(sd_netlink *nl, sd_event *event, int64_t priority) {
|
||||
int r;
|
||||
|
||||
assert_return(nl, -EINVAL);
|
||||
|
@ -898,7 +814,7 @@ fail:
|
|||
return r;
|
||||
}
|
||||
|
||||
int sd_netlink_detach_event(sd_netlink *nl) {
|
||||
_public_ int sd_netlink_detach_event(sd_netlink *nl) {
|
||||
assert_return(nl, -EINVAL);
|
||||
assert_return(nl->event, -ENXIO);
|
||||
|
||||
|
@ -961,7 +877,7 @@ int netlink_add_match_internal(
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sd_netlink_add_match(
|
||||
_public_ int sd_netlink_add_match(
|
||||
sd_netlink *rtnl,
|
||||
sd_netlink_slot **ret_slot,
|
||||
uint16_t type,
|
||||
|
@ -1031,7 +947,7 @@ int sd_netlink_add_match(
|
|||
destroy_callback, userdata, description);
|
||||
}
|
||||
|
||||
int sd_netlink_attach_filter(sd_netlink *nl, size_t len, struct sock_filter *filter) {
|
||||
_public_ int sd_netlink_attach_filter(sd_netlink *nl, size_t len, struct sock_filter *filter) {
|
||||
assert_return(nl, -EINVAL);
|
||||
assert_return(len == 0 || filter, -EINVAL);
|
||||
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
#include "firewall-util-private.h"
|
||||
#include "in-addr-util.h"
|
||||
#include "macro.h"
|
||||
#include "netlink-internal.h"
|
||||
#include "netlink-util.h"
|
||||
#include "socket-util.h"
|
||||
#include "time-util.h"
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ _systemd_headers = [
|
|||
'sd-journal.h',
|
||||
'sd-login.h',
|
||||
'sd-messages.h',
|
||||
'sd-netlink.h',
|
||||
'sd-path.h',
|
||||
]
|
||||
|
||||
|
@ -32,7 +33,6 @@ _not_installed_headers = [
|
|||
'sd-lldp-tx.h',
|
||||
'sd-lldp.h',
|
||||
'sd-ndisc.h',
|
||||
'sd-netlink.h',
|
||||
'sd-network.h',
|
||||
'sd-radv.h',
|
||||
'sd-resolve.h',
|
||||
|
|
|
@ -49,7 +49,6 @@ sd_netlink *sd_netlink_ref(sd_netlink *nl);
|
|||
sd_netlink *sd_netlink_unref(sd_netlink *nl);
|
||||
|
||||
int sd_netlink_send(sd_netlink *nl, sd_netlink_message *message, uint32_t *serial);
|
||||
int sd_netlink_sendv(sd_netlink *nl, sd_netlink_message **messages, size_t msgcnt, uint32_t **ret_serial);
|
||||
int sd_netlink_call_async(sd_netlink *nl, sd_netlink_slot **ret_slot, sd_netlink_message *message,
|
||||
sd_netlink_message_handler_t callback, sd_netlink_destroy_t destoy_callback,
|
||||
void *userdata, uint64_t usec, const char *description);
|
||||
|
@ -210,32 +209,6 @@ int sd_rtnl_message_traffic_control_get_parent(sd_netlink_message *m, uint32_t *
|
|||
|
||||
int sd_rtnl_message_new_mdb(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int mdb_ifindex);
|
||||
|
||||
/* nfnl */
|
||||
int sd_nfnl_socket_open(sd_netlink **ret);
|
||||
int sd_nfnl_message_batch_begin(sd_netlink *nfnl, sd_netlink_message **ret);
|
||||
int sd_nfnl_message_batch_end(sd_netlink *nfnl, sd_netlink_message **ret);
|
||||
int sd_nfnl_nft_message_del_table(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table);
|
||||
int sd_nfnl_nft_message_new_table(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table);
|
||||
int sd_nfnl_nft_message_new_basechain(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table, const char *chain,
|
||||
const char *type, uint8_t hook, int prio);
|
||||
int sd_nfnl_nft_message_new_rule(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table, const char *chain);
|
||||
int sd_nfnl_nft_message_new_set(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table, const char *set_name,
|
||||
uint32_t setid, uint32_t klen);
|
||||
int sd_nfnl_nft_message_new_setelems_begin(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table, const char *set_name);
|
||||
int sd_nfnl_nft_message_del_setelems_begin(sd_netlink *nfnl, sd_netlink_message **ret,
|
||||
int family, const char *table, const char *set_name);
|
||||
int sd_nfnl_nft_message_add_setelem(sd_netlink_message *m,
|
||||
uint32_t num,
|
||||
const void *key, uint32_t klen,
|
||||
const void *data, uint32_t dlen);
|
||||
int sd_nfnl_nft_message_add_setelem_end(sd_netlink_message *m);
|
||||
|
||||
/* genl */
|
||||
int sd_genl_socket_open(sd_netlink **ret);
|
||||
int sd_genl_message_new(sd_netlink *genl, const char *family_name, uint8_t cmd, sd_netlink_message **ret);
|
||||
|
|
Loading…
Reference in a new issue