summaryrefslogtreecommitdiff
path: root/src/network/networkd-can.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2020-03-16 13:40:30 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2020-03-17 00:32:35 +0900
commit74f0fb9095aef89dbb07dfe12a8bea133567b259 (patch)
tree128f309e81d90b20c82eb1900f4a6009523887eb /src/network/networkd-can.c
parent6cfef1b3082d2c3d4b182b5f5f0ec5378a2ffa1d (diff)
downloadsystemd-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.c16
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");