From 01b36069ccddbed35b82dd3b64af3e522ab305fe Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Wed, 22 Jan 2014 14:16:01 +0100 Subject: [PATCH] sd-rtnl: add sd_rtnl_message_append_u16() --- src/libsystemd/sd-rtnl/rtnl-message.c | 34 +++++++++++++++++++++++++++ src/systemd/sd-rtnl.h | 1 + 2 files changed, 35 insertions(+) diff --git a/src/libsystemd/sd-rtnl/rtnl-message.c b/src/libsystemd/sd-rtnl/rtnl-message.c index af8f8cf76..d55c3673a 100644 --- a/src/libsystemd/sd-rtnl/rtnl-message.c +++ b/src/libsystemd/sd-rtnl/rtnl-message.c @@ -404,6 +404,40 @@ int sd_rtnl_message_append_string(sd_rtnl_message *m, unsigned short type, const return 0; } +int sd_rtnl_message_append_u16(sd_rtnl_message *m, unsigned short type, uint16_t data) { + uint16_t rtm_type; + int r; + + assert_return(m, -EINVAL); + + r = sd_rtnl_message_get_type(m, &rtm_type); + if (r < 0) + return r; + + /* check that the type is correct */ + switch (rtm_type) { + case RTM_NEWLINK: + case RTM_SETLINK: + case RTM_GETLINK: + case RTM_DELLINK: + switch (type) { + case IFLA_VLAN_ID: + break; + default: + return -ENOTSUP; + } + break; + default: + return -ENOTSUP; + } + + r = add_rtattr(m, type, &data, sizeof(uint16_t)); + if (r < 0) + return r; + + return 0; +} + int sd_rtnl_message_append_u32(sd_rtnl_message *m, unsigned short type, uint32_t data) { uint16_t rtm_type; int r; diff --git a/src/systemd/sd-rtnl.h b/src/systemd/sd-rtnl.h index 0feb8c673..87a58a98e 100644 --- a/src/systemd/sd-rtnl.h +++ b/src/systemd/sd-rtnl.h @@ -92,6 +92,7 @@ int sd_rtnl_message_link_get_flags(sd_rtnl_message *m, unsigned *flags); int sd_rtnl_message_route_set_dst_prefixlen(sd_rtnl_message *m, unsigned char prefixlen); int sd_rtnl_message_append_string(sd_rtnl_message *m, unsigned short type, const char *data); +int sd_rtnl_message_append_u16(sd_rtnl_message *m, unsigned short type, uint16_t data); int sd_rtnl_message_append_u32(sd_rtnl_message *m, unsigned short type, uint32_t data); int sd_rtnl_message_append_in_addr(sd_rtnl_message *m, unsigned short type, const struct in_addr *data); int sd_rtnl_message_append_in6_addr(sd_rtnl_message *m, unsigned short type, const struct in6_addr *data); -- 2.30.2