Skip to content

Commit 06735f2

Browse files
committed
udev: read more attributes through netlink and cache them
1 parent 84398cb commit 06735f2

File tree

4 files changed

+273
-69
lines changed

4 files changed

+273
-69
lines changed

src/udev/test-udev-netlink.c

Lines changed: 77 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
static void test_link_info_one(sd_netlink *rtnl, int ifindex) {
1212
_cleanup_(link_info_clear) LinkInfo info = LINK_INFO_NULL;
1313
_cleanup_(sd_device_unrefp) sd_device *dev = NULL, *dev_with_netlink = NULL;
14-
unsigned iftype, iflink;
1514
const char *s, *t;
15+
unsigned u;
1616

1717
log_debug("/* %s(ifindex=%i) */", __func__, ifindex);
1818

@@ -23,11 +23,20 @@ static void test_link_info_one(sd_netlink *rtnl, int ifindex) {
2323
/* check iftype */
2424
log_debug("iftype: %"PRIu16" (%s)", info.iftype, strna(arphrd_to_name(info.iftype)));
2525
assert_se(sd_device_get_sysattr_value(dev, "type", &s) >= 0);
26-
assert_se(safe_atou(s, &iftype) >= 0);
27-
assert_se(iftype == info.iftype);
26+
assert_se(safe_atou(s, &u) >= 0);
27+
assert_se(u == info.iftype);
2828
assert_se(device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "type", &s) >= 0);
29-
assert_se(safe_atou(s, &iftype) >= 0);
30-
assert_se(iftype == info.iftype);
29+
assert_se(safe_atou(s, &u) >= 0);
30+
assert_se(u == info.iftype);
31+
32+
/* check hardware address length */
33+
log_debug("hardware address length: %zu", info.hw_addr.length);
34+
assert_se(sd_device_get_sysattr_value(dev, "addr_len", &s) >= 0);
35+
assert_se(safe_atou(s, &u) >= 0);
36+
assert_se(u == info.hw_addr.length);
37+
assert_se(device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "addr_len", &s) >= 0);
38+
assert_se(safe_atou(s, &u) >= 0);
39+
assert_se(u == info.hw_addr.length);
3140

3241
/* check hardware address */
3342
log_debug("hardware address: %s", HW_ADDR_TO_STR(&info.hw_addr));
@@ -36,31 +45,88 @@ static void test_link_info_one(sd_netlink *rtnl, int ifindex) {
3645
assert_se(device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "address", &s) >= 0);
3746
assert_se(streq(s, HW_ADDR_TO_STR(&info.hw_addr)));
3847

48+
/* check broadcast address */
49+
log_debug("broadcast address: %s", HW_ADDR_TO_STR(&info.broadcast));
50+
assert_se(sd_device_get_sysattr_value(dev, "broadcast", &s) >= 0);
51+
assert_se(streq(s, HW_ADDR_TO_STR(&info.broadcast)));
52+
assert_se(device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "broadcast", &s) >= 0);
53+
assert_se(streq(s, HW_ADDR_TO_STR(&info.broadcast)));
54+
3955
/* check ifname */
4056
log_debug("ifname: %s", info.ifname);
4157
assert_se(sd_device_get_sysname(dev, &s) >= 0);
4258
assert_se(streq(s, info.ifname));
4359
assert_se(sd_device_get_sysname(dev_with_netlink, &s) >= 0);
4460
assert_se(streq(s, info.ifname));
4561

62+
/* check mtu */
63+
log_debug("mtu: %"PRIu32, info.mtu);
64+
assert_se(sd_device_get_sysattr_value(dev, "mtu", &s) >= 0);
65+
assert_se(safe_atou(s, &u) >= 0);
66+
assert_se(u == info.mtu);
67+
assert_se(device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "mtu", &s) >= 0);
68+
assert_se(safe_atou(s, &u) >= 0);
69+
assert_se(u == info.mtu);
70+
4671
/* check iflink */
4772
log_debug("iflink: %"PRIu32, info.iflink);
4873
assert_se(sd_device_get_sysattr_value(dev, "iflink", &s) >= 0);
49-
assert_se(safe_atou(s, &iflink) >= 0);
50-
assert_se(iflink == info.iflink);
74+
assert_se(safe_atou(s, &u) >= 0);
75+
assert_se(u == info.iflink);
5176
assert_se(device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "iflink", &s) >= 0);
52-
assert_se(safe_atou(s, &iflink) >= 0);
53-
assert_se(iflink == info.iflink);
77+
assert_se(safe_atou(s, &u) >= 0);
78+
assert_se(u == info.iflink);
79+
80+
/* check link_mode */
81+
log_debug("link_mode: %"PRIu8, info.link_mode);
82+
assert_se(sd_device_get_sysattr_value(dev, "link_mode", &s) >= 0);
83+
assert_se(safe_atou(s, &u) >= 0);
84+
assert_se(u == info.link_mode);
85+
assert_se(device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "link_mode", &s) >= 0);
86+
assert_se(safe_atou(s, &u) >= 0);
87+
assert_se(u == info.link_mode);
88+
89+
/* check ifalias */
90+
log_debug("ifalias: %s", strna(info.ifalias));
91+
assert_se(sd_device_get_sysattr_value(dev, "ifalias", &s) >= 0);
92+
assert_se(streq(s, strempty(info.ifalias)));
93+
assert_se(device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "ifalias", &s) >= 0);
94+
assert_se(streq(s, strempty(info.ifalias)));
95+
96+
/* check netdev_group */
97+
log_debug("netdev_group: %"PRIu32, info.group);
98+
assert_se(sd_device_get_sysattr_value(dev, "netdev_group", &s) >= 0);
99+
assert_se(safe_atou(s, &u) >= 0);
100+
assert_se(u == info.group);
101+
assert_se(device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "netdev_group", &s) >= 0);
102+
assert_se(safe_atou(s, &u) >= 0);
103+
assert_se(u == info.group);
104+
105+
/* check phys_port_id */
106+
log_debug("phys_port_id: (%s)",
107+
info.phys_port_id_supported ? "supported" : "unsupported");
108+
s = t = NULL;
109+
(void) sd_device_get_sysattr_value(dev, "phys_port_id", &s);
110+
(void) device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "phys_port_id", &t);
111+
assert_se(streq_ptr(s, t));
112+
113+
/* check phys_switch_id */
114+
log_debug("phys_switch_id: (%s)",
115+
info.phys_switch_id_supported ? "supported" : "unsupported");
116+
s = t = NULL;
117+
(void) sd_device_get_sysattr_value(dev, "phys_switch_id", &s);
118+
(void) device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "phys_switch_id", &t);
119+
assert_se(streq_ptr(s, t));
54120

55121
/* check phys_port_name */
56122
log_debug("phys_port_name: %s (%s)",
57123
strna(info.phys_port_name),
58-
info.support_phys_port_name ? "supported" : "unsupported");
124+
info.phys_port_name_supported ? "supported" : "unsupported");
59125
s = t = NULL;
60126
(void) sd_device_get_sysattr_value(dev, "phys_port_name", &s);
61127
(void) device_get_sysattr_value_maybe_from_netlink(dev_with_netlink, &rtnl, "phys_port_name", &t);
62128
assert_se(streq_ptr(s, t));
63-
if (info.support_phys_port_name) {
129+
if (info.phys_port_name_supported) {
64130
assert_se(streq_ptr(s, info.phys_port_name));
65131
assert_se(streq_ptr(t, info.phys_port_name));
66132
}

src/udev/udev-builtin-net_id.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -853,7 +853,7 @@ static int builtin_net_id(sd_device *dev, sd_netlink **rtnl, int argc, char *arg
853853
if (r < 0)
854854
return r;
855855

856-
if (!info.support_phys_port_name) {
856+
if (!info.phys_port_name_supported) {
857857
const char *s;
858858

859859
r = sd_device_get_sysattr_value(dev, "phys_port_name", &s);

0 commit comments

Comments
 (0)