When nl_link() configures the MTU, it shouldn't send extra bytes,
otherwise we'll get a kernel warning:
netlink: 4 bytes leftover after parsing attributes in process `pasta'.
Signed-off-by: Stefano Brivio
---
netlink.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/netlink.c b/netlink.c
index 532868d..a530f3f 100644
--- a/netlink.c
+++ b/netlink.c
@@ -479,13 +479,16 @@ next:
void nl_link(int ns, unsigned int ifi, void *mac, int up, int mtu)
{
int change = !MAC_IS_ZERO(mac) || up || mtu;
- struct {
+ struct req_t {
struct nlmsghdr nlh;
struct ifinfomsg ifm;
struct rtattr rta;
union {
unsigned char mac[ETH_ALEN];
- unsigned int mtu;
+ struct {
+ unsigned int mtu;
+ uint8_t end;
+ } mtu;
} set;
} req = {
.nlh.nlmsg_type = change ? RTM_NEWLINK : RTM_GETLINK,
@@ -513,8 +516,8 @@ void nl_link(int ns, unsigned int ifi, void *mac, int up, int mtu)
}
if (mtu) {
- req.nlh.nlmsg_len = sizeof(req);
- req.set.mtu = mtu;
+ req.nlh.nlmsg_len = offsetof(struct req_t, set.mtu.end);
+ req.set.mtu.mtu = mtu;
req.rta.rta_type = IFLA_MTU;
req.rta.rta_len = RTA_LENGTH(sizeof(unsigned int));
nl_req(ns, buf, &req, req.nlh.nlmsg_len);
--
2.34.1