diff -Naur systemd-210/src/libsystemd/sd-rtnl/rtnl-message.c systemd-210.mod/src/libsystemd/sd-rtnl/rtnl-message.c --- systemd-210/src/libsystemd/sd-rtnl/rtnl-message.c 2014-11-19 13:10:23.998310815 +0100 +++ systemd-210.mod/src/libsystemd/sd-rtnl/rtnl-message.c 2014-12-08 12:03:18.059734333 +0100 @@ -722,6 +722,7 @@ int sd_rtnl_message_open_container(sd_rtnl_message *m, unsigned short type) { uint16_t rtm_type; + int r; assert_return(m, -EINVAL); assert_return(!m->sealed, -EPERM); @@ -729,15 +730,21 @@ sd_rtnl_message_get_type(m, &rtm_type); 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)) - return add_rtattr(m, type, NULL, 0); - else if (type == VETH_INFO_PEER && m->n_containers == 2 && + GET_CONTAINER(m, 0)->rta_type == IFLA_LINKINFO)) { + r = add_rtattr(m, type, NULL, 0); + if ( r > 0) + m->container_offsets[m->n_containers ++] = r; + return r; + } 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)); + GET_CONTAINER(m, 0)->rta_type == IFLA_LINKINFO) { + r = add_rtattr(m, type, NULL, sizeof(struct ifinfomsg)); + if ( r > 0) + m->container_offsets[m->n_containers ++] = r; + return r; + } } return -ENOTSUP;