mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-24 21:34:08 +03:00
sd-netlink: make NLTypeSystem internal
Same as NLType, move NLTypeSystem into netlink-types.c and hide it from the outside. Provide an accessor function for the 'max' field that is used to allocate suitable array sizes. Note that this will probably be removed later on, anyway. Once we support bigger type-systems, it just seems impractical to allocate such big arrays for each container entry. An RBTree would probably do just fine.
This commit is contained in:
parent
817d1cd824
commit
435bbb0233
@ -754,7 +754,7 @@ int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short typ
|
|||||||
r = rtnl_message_parse(m,
|
r = rtnl_message_parse(m,
|
||||||
&m->rta_offset_tb[m->n_containers],
|
&m->rta_offset_tb[m->n_containers],
|
||||||
&m->rta_tb_size[m->n_containers],
|
&m->rta_tb_size[m->n_containers],
|
||||||
type_system->max,
|
type_system_get_max(type_system),
|
||||||
container,
|
container,
|
||||||
size);
|
size);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
@ -890,7 +890,7 @@ int sd_netlink_message_rewind(sd_netlink_message *m) {
|
|||||||
r = rtnl_message_parse(m,
|
r = rtnl_message_parse(m,
|
||||||
&m->rta_offset_tb[m->n_containers],
|
&m->rta_offset_tb[m->n_containers],
|
||||||
&m->rta_tb_size[m->n_containers],
|
&m->rta_tb_size[m->n_containers],
|
||||||
type_system->max,
|
type_system_get_max(type_system),
|
||||||
(struct rtattr*)((uint8_t*)NLMSG_DATA(m->hdr) + NLMSG_ALIGN(size)),
|
(struct rtattr*)((uint8_t*)NLMSG_DATA(m->hdr) + NLMSG_ALIGN(size)),
|
||||||
NLMSG_PAYLOAD(m->hdr, size));
|
NLMSG_PAYLOAD(m->hdr, size));
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
@ -46,6 +46,11 @@ struct NLType {
|
|||||||
const NLTypeSystemUnion *type_system_union;
|
const NLTypeSystemUnion *type_system_union;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct NLTypeSystem {
|
||||||
|
uint16_t max;
|
||||||
|
const NLType *types;
|
||||||
|
};
|
||||||
|
|
||||||
static const NLTypeSystem rtnl_link_type_system;
|
static const NLTypeSystem rtnl_link_type_system;
|
||||||
|
|
||||||
static const NLType rtnl_link_info_data_veth_types[VETH_INFO_MAX + 1] = {
|
static const NLType rtnl_link_info_data_veth_types[VETH_INFO_MAX + 1] = {
|
||||||
@ -495,6 +500,11 @@ void type_get_type_system_union(const NLType *nl_type, const NLTypeSystemUnion *
|
|||||||
*ret = nl_type->type_system_union;
|
*ret = nl_type->type_system_union;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t type_system_get_max(const NLTypeSystem *type_system) {
|
||||||
|
assert(type_system);
|
||||||
|
return type_system->max;
|
||||||
|
}
|
||||||
|
|
||||||
int type_system_get_type(const NLTypeSystem *type_system, const NLType **ret, uint16_t type) {
|
int type_system_get_type(const NLTypeSystem *type_system, const NLType **ret, uint16_t type) {
|
||||||
const NLType *nl_type;
|
const NLType *nl_type;
|
||||||
|
|
||||||
|
@ -53,15 +53,12 @@ struct NLTypeSystemUnion {
|
|||||||
const NLTypeSystem *type_systems;
|
const NLTypeSystem *type_systems;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NLTypeSystem {
|
|
||||||
uint16_t max;
|
|
||||||
const NLType *types;
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t type_get_type(const NLType *type);
|
uint16_t type_get_type(const NLType *type);
|
||||||
size_t type_get_size(const NLType *type);
|
size_t type_get_size(const NLType *type);
|
||||||
void type_get_type_system(const NLType *type, const NLTypeSystem **ret);
|
void type_get_type_system(const NLType *type, const NLTypeSystem **ret);
|
||||||
void type_get_type_system_union(const NLType *type, const NLTypeSystemUnion **ret);
|
void type_get_type_system_union(const NLType *type, const NLTypeSystemUnion **ret);
|
||||||
|
|
||||||
|
uint16_t type_system_get_max(const NLTypeSystem *type_system);
|
||||||
int type_system_get_type(const NLTypeSystem *type_system, const NLType **ret, uint16_t type);
|
int type_system_get_type(const NLTypeSystem *type_system, const NLType **ret, uint16_t type);
|
||||||
int type_system_get_type_system(const NLTypeSystem *type_system, const NLTypeSystem **ret, uint16_t type);
|
int type_system_get_type_system(const NLTypeSystem *type_system, const NLTypeSystem **ret, uint16_t type);
|
||||||
int type_system_get_type_system_union(const NLTypeSystem *type_system, const NLTypeSystemUnion **ret, uint16_t type);
|
int type_system_get_type_system_union(const NLTypeSystem *type_system, const NLTypeSystemUnion **ret, uint16_t type);
|
||||||
|
Loading…
Reference in New Issue
Block a user