change->nlmsg_type = nlmsg->nlmsg_type;
change->if_index = ifinfo->ifi_index;
- change->ifname = nl_attr_get_string(attrs[IFLA_IFNAME]);
+ strncpy(change->ifname, nl_attr_get_string(attrs[IFLA_IFNAME]),
+ IFNAMSIZ);
change->ifi_flags = ifinfo->ifi_flags;
change->master_ifindex = (attrs[IFLA_MASTER]
? nl_attr_get_u32(attrs[IFLA_MASTER])
*
* There are *many* more fields in these messages, but currently we
* only care about these fields. */
- static const struct nl_policy policy[] = {
- [IFA_LABEL] = { .type = NL_A_STRING, .optional = false },
- };
-
- struct nlattr *attrs[ARRAY_SIZE(policy)];
-
- parsed = nl_policy_parse(buf, NLMSG_HDRLEN + sizeof(struct ifaddrmsg),
- policy, attrs, ARRAY_SIZE(policy));
-
- if (parsed) {
- const struct ifaddrmsg *ifaddr;
+ const struct ifaddrmsg *ifaddr;
- ifaddr = ofpbuf_at(buf, NLMSG_HDRLEN, sizeof *ifaddr);
+ ifaddr = ofpbuf_at(buf, NLMSG_HDRLEN, sizeof *ifaddr);
- change->nlmsg_type = nlmsg->nlmsg_type;
- change->if_index = ifaddr->ifa_index;
- change->ifname = nl_attr_get_string(attrs[IFA_LABEL]);
- }
+ change->nlmsg_type = nlmsg->nlmsg_type;
+ change->if_index = ifaddr->ifa_index;
+ if_indextoname(ifaddr->ifa_index, change->ifname);
+ parsed = true;
}
return parsed;
#include <stdbool.h>
#include <stdint.h>
#include <linux/if_ether.h>
+#include <net/if.h>
#include "openvswitch/types.h"
/* Common attributes. */
int if_index; /* Index of network device. */
- const char *ifname; /* Name of network device. */
+ char ifname[IFNAMSIZ]; /* Name of network device. */
/* Network device link status. */
int master_ifindex; /* Ifindex of datapath master (0 if none). */