diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2020-03-16 13:40:30 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2020-03-17 00:32:35 +0900 |
commit | 74f0fb9095aef89dbb07dfe12a8bea133567b259 (patch) | |
tree | 128f309e81d90b20c82eb1900f4a6009523887eb /src/network/networkd-can.c | |
parent | 6cfef1b3082d2c3d4b182b5f5f0ec5378a2ffa1d (diff) | |
download | systemd-74f0fb9095aef89dbb07dfe12a8bea133567b259.tar.gz |
network: can: add support for listen-only mode
Closes #15129.
Diffstat (limited to 'src/network/networkd-can.c')
-rw-r--r-- | src/network/networkd-can.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/network/networkd-can.c b/src/network/networkd-can.c index c703f94f3a..18533843e3 100644 --- a/src/network/networkd-can.c +++ b/src/network/networkd-can.c @@ -71,6 +71,7 @@ static int link_set_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) static int link_set_can(Link *link) { _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL; + struct can_ctrlmode cm = {}; int r; assert(link); @@ -142,13 +143,18 @@ static int link_set_can(Link *link) { } if (link->network->can_triple_sampling >= 0) { - struct can_ctrlmode cm = { - .mask = CAN_CTRLMODE_3_SAMPLES, - .flags = link->network->can_triple_sampling ? CAN_CTRLMODE_3_SAMPLES : 0, - }; - + cm.mask |= CAN_CTRLMODE_3_SAMPLES; + SET_FLAG(cm.flags, CAN_CTRLMODE_3_SAMPLES, link->network->can_triple_sampling); log_link_debug(link, "%sabling triple-sampling", link->network->can_triple_sampling ? "En" : "Dis"); + } + + if (link->network->can_listen_only >= 0) { + cm.mask |= CAN_CTRLMODE_LISTENONLY; + SET_FLAG(cm.flags, CAN_CTRLMODE_LISTENONLY, link->network->can_listen_only); + log_link_debug(link, "%sabling listen-only mode", link->network->can_listen_only ? "En" : "Dis"); + } + if (cm.mask != 0) { r = sd_netlink_message_append_data(m, IFLA_CAN_CTRLMODE, &cm, sizeof(cm)); if (r < 0) return log_link_error_errno(link, r, "Could not append IFLA_CAN_CTRLMODE attribute: %m"); |