From: Tom Gundersen Date: Fri, 14 Feb 2014 21:39:48 +0000 (+0100) Subject: sd-rtnl: message_open_container - don't take a 'size' argument X-Git-Tag: v209~122 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=ee3a6a51e5b098aa0c9641ed71d275c459ad2f5a;hp=a7b74db6e72f4f19f74eabc81c1ebb4cb8670f06 sd-rtnl: message_open_container - don't take a 'size' argument We can always know the size based on the type, so let's do this inside the library. --- diff --git a/TODO b/TODO index db2c623d1..299f450d7 100644 --- a/TODO +++ b/TODO @@ -648,7 +648,6 @@ Features: * networkd: - add more keys to [Route] and [Address] sections - add support for more DHCPv4 options (and, longer term, other kinds of dynamic config) - - allow opting out of receiving DNS servers over DHCPv4 - add proper initrd support (in particular generate .network/.link files based on /proc/cmdline) External: diff --git a/src/libsystemd/sd-rtnl/rtnl-message.c b/src/libsystemd/sd-rtnl/rtnl-message.c index 226329f31..096a32236 100644 --- a/src/libsystemd/sd-rtnl/rtnl-message.c +++ b/src/libsystemd/sd-rtnl/rtnl-message.c @@ -699,7 +699,7 @@ int sd_rtnl_message_append_ether_addr(sd_rtnl_message *m, unsigned short type, c return 0; } -int sd_rtnl_message_open_container(sd_rtnl_message *m, unsigned short type, size_t extra) { +int sd_rtnl_message_open_container(sd_rtnl_message *m, unsigned short type) { uint16_t rtm_type; assert_return(m, -EINVAL); @@ -710,9 +710,13 @@ int sd_rtnl_message_open_container(sd_rtnl_message *m, unsigned short type, size if (rtnl_message_type_is_link(rtm_type)) { if ((type == IFLA_LINKINFO && m->n_containers == 0) || - (type == IFLA_INFO_DATA && m->n_containers == 1 && GET_CONTAINER(m, 0)->rta_type == IFLA_LINKINFO) || - (type == VETH_INFO_PEER && m->n_containers == 2 && GET_CONTAINER(m, 1)->rta_type == IFLA_INFO_DATA)) - return add_rtattr(m, type, NULL, extra); + (type == IFLA_INFO_DATA && m->n_containers == 1 && + GET_CONTAINER(m, 0)->rta_type == IFLA_LINKINFO)) + return add_rtattr(m, type, NULL, 0); + else if (type == VETH_INFO_PEER && m->n_containers == 2 && + GET_CONTAINER(m, 1)->rta_type == IFLA_INFO_DATA && + GET_CONTAINER(m, 0)->rta_type == IFLA_LINKINFO) + return add_rtattr(m, type, NULL, sizeof(struct ifinfomsg)); } return -ENOTSUP; diff --git a/src/libsystemd/sd-rtnl/test-rtnl.c b/src/libsystemd/sd-rtnl/test-rtnl.c index 9de380625..53efed561 100644 --- a/src/libsystemd/sd-rtnl/test-rtnl.c +++ b/src/libsystemd/sd-rtnl/test-rtnl.c @@ -287,11 +287,11 @@ static void test_container(void) { assert(sd_rtnl_message_new_link(RTM_NEWLINK, 0, &m) >= 0); - assert(sd_rtnl_message_open_container(m, IFLA_LINKINFO, 0) >= 0); - assert(sd_rtnl_message_open_container(m, IFLA_LINKINFO, 0) == -ENOTSUP); + assert(sd_rtnl_message_open_container(m, IFLA_LINKINFO) >= 0); + assert(sd_rtnl_message_open_container(m, IFLA_LINKINFO) == -ENOTSUP); assert(sd_rtnl_message_append_string(m, IFLA_INFO_KIND, "kind") >= 0); - assert(sd_rtnl_message_open_container(m, IFLA_INFO_DATA, 0) >= 0); - assert(sd_rtnl_message_open_container(m, IFLA_INFO_DATA, 0) == -ENOTSUP); + assert(sd_rtnl_message_open_container(m, IFLA_INFO_DATA) >= 0); + assert(sd_rtnl_message_open_container(m, IFLA_INFO_DATA) == -ENOTSUP); assert(sd_rtnl_message_append_u16(m, IFLA_VLAN_ID, 100) >= 0); assert(sd_rtnl_message_close_container(m) >= 0); assert(sd_rtnl_message_append_string(m, IFLA_INFO_KIND, "kind") >= 0); diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c index a452e0d6d..30eb77d4b 100644 --- a/src/network/networkd-netdev.c +++ b/src/network/networkd-netdev.c @@ -194,7 +194,7 @@ static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c return r; } - r = sd_rtnl_message_open_container(req, IFLA_LINKINFO, 0); + r = sd_rtnl_message_open_container(req, IFLA_LINKINFO); if (r < 0) { log_error_netdev(netdev, "Could not open IFLA_LINKINFO container: %s", @@ -217,7 +217,7 @@ static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c } if (netdev->vlanid <= VLANID_MAX) { - r = sd_rtnl_message_open_container(req, IFLA_INFO_DATA, 0); + r = sd_rtnl_message_open_container(req, IFLA_INFO_DATA); if (r < 0) { log_error_netdev(netdev, "Could not open IFLA_INFO_DATA container: %s", diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index 51a1a6651..fcc0f17ae 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -1303,7 +1303,7 @@ static int setup_veth(int netns_fd) { return r; } - r = sd_rtnl_message_open_container(m, IFLA_LINKINFO, 0); + r = sd_rtnl_message_open_container(m, IFLA_LINKINFO); if (r < 0) { log_error("Failed to open netlink container: %s", strerror(-r)); return r; @@ -1315,13 +1315,13 @@ static int setup_veth(int netns_fd) { return r; } - r = sd_rtnl_message_open_container(m, IFLA_INFO_DATA, 0); + r = sd_rtnl_message_open_container(m, IFLA_INFO_DATA); if (r < 0) { log_error("Failed to open netlink container: %s", strerror(-r)); return r; } - r = sd_rtnl_message_open_container(m, VETH_INFO_PEER, sizeof(struct ifinfomsg)); + r = sd_rtnl_message_open_container(m, VETH_INFO_PEER); if (r < 0) { log_error("z Failed to open netlink container: %s", strerror(-r)); return r; diff --git a/src/systemd/sd-rtnl.h b/src/systemd/sd-rtnl.h index 93edbcbbc..5506bfa4f 100644 --- a/src/systemd/sd-rtnl.h +++ b/src/systemd/sd-rtnl.h @@ -102,7 +102,7 @@ int sd_rtnl_message_append_in_addr(sd_rtnl_message *m, unsigned short type, cons int sd_rtnl_message_append_in6_addr(sd_rtnl_message *m, unsigned short type, const struct in6_addr *data); int sd_rtnl_message_append_ether_addr(sd_rtnl_message *m, unsigned short type, const struct ether_addr *data); -int sd_rtnl_message_open_container(sd_rtnl_message *m, unsigned short type, size_t extra); +int sd_rtnl_message_open_container(sd_rtnl_message *m, unsigned short type); int sd_rtnl_message_close_container(sd_rtnl_message *m); int sd_rtnl_message_read(sd_rtnl_message *m, unsigned short *type, void **data);