network: can: add support for bus error reporting
Enhance systemd-networkd to be able to control a CAN device's berr-reporting flag via the new boolean directive BusErrorReporting= to be used in network files.
This commit is contained in:
parent
3757912db4
commit
77b674049b
|
@ -2742,6 +2742,16 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
|
||||||
the value of a received bit by majority rule. When unset, the kernel's default will be used.</para>
|
the value of a received bit by majority rule. When unset, the kernel's default will be used.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>BusErrorReporting=</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Takes a boolean. When <literal>yes</literal>, reporting of CAN bus errors is activated
|
||||||
|
(those include single bit, frame format, and bit stuffing errors, unable to send dominant bit,
|
||||||
|
unable to send recessive bit, bus overload, active error announcement, error occurred on
|
||||||
|
transmission). When unset, the kernel's default will be used. Note: in case of a CAN bus with a
|
||||||
|
single CAN device, sending a CAN frame may result in a huge number of CAN bus errors.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>ListenOnly=</varname></term>
|
<term><varname>ListenOnly=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
|
|
@ -211,6 +211,12 @@ static int link_set_can(Link *link) {
|
||||||
log_link_debug(link, "Setting triple-sampling to '%s'.", yes_no(link->network->can_triple_sampling));
|
log_link_debug(link, "Setting triple-sampling to '%s'.", yes_no(link->network->can_triple_sampling));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (link->network->can_berr_reporting >= 0) {
|
||||||
|
cm.mask |= CAN_CTRLMODE_BERR_REPORTING;
|
||||||
|
SET_FLAG(cm.flags, CAN_CTRLMODE_BERR_REPORTING, link->network->can_berr_reporting);
|
||||||
|
log_link_debug(link, "Setting bus error reporting to '%s'.", yes_no(link->network->can_berr_reporting));
|
||||||
|
}
|
||||||
|
|
||||||
if (link->network->can_listen_only >= 0) {
|
if (link->network->can_listen_only >= 0) {
|
||||||
cm.mask |= CAN_CTRLMODE_LISTENONLY;
|
cm.mask |= CAN_CTRLMODE_LISTENONLY;
|
||||||
SET_FLAG(cm.flags, CAN_CTRLMODE_LISTENONLY, link->network->can_listen_only);
|
SET_FLAG(cm.flags, CAN_CTRLMODE_LISTENONLY, link->network->can_listen_only);
|
||||||
|
|
|
@ -320,6 +320,7 @@ CAN.FDMode, config_parse_tristate,
|
||||||
CAN.FDNonISO, config_parse_tristate, 0, offsetof(Network, can_non_iso)
|
CAN.FDNonISO, config_parse_tristate, 0, offsetof(Network, can_non_iso)
|
||||||
CAN.RestartSec, config_parse_sec, 0, offsetof(Network, can_restart_us)
|
CAN.RestartSec, config_parse_sec, 0, offsetof(Network, can_restart_us)
|
||||||
CAN.TripleSampling, config_parse_tristate, 0, offsetof(Network, can_triple_sampling)
|
CAN.TripleSampling, config_parse_tristate, 0, offsetof(Network, can_triple_sampling)
|
||||||
|
CAN.BusErrorReporting, config_parse_tristate, 0, offsetof(Network, can_berr_reporting)
|
||||||
CAN.Termination, config_parse_tristate, 0, offsetof(Network, can_termination)
|
CAN.Termination, config_parse_tristate, 0, offsetof(Network, can_termination)
|
||||||
CAN.ListenOnly, config_parse_tristate, 0, offsetof(Network, can_listen_only)
|
CAN.ListenOnly, config_parse_tristate, 0, offsetof(Network, can_listen_only)
|
||||||
QDisc.Parent, config_parse_qdisc_parent, _QDISC_KIND_INVALID, 0
|
QDisc.Parent, config_parse_qdisc_parent, _QDISC_KIND_INVALID, 0
|
||||||
|
|
|
@ -415,6 +415,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
|
||||||
.ipv6_accept_ra_start_dhcp6_client = IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES,
|
.ipv6_accept_ra_start_dhcp6_client = IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES,
|
||||||
|
|
||||||
.can_triple_sampling = -1,
|
.can_triple_sampling = -1,
|
||||||
|
.can_berr_reporting = -1,
|
||||||
.can_termination = -1,
|
.can_termination = -1,
|
||||||
.can_listen_only = -1,
|
.can_listen_only = -1,
|
||||||
.can_fd_mode = -1,
|
.can_fd_mode = -1,
|
||||||
|
|
|
@ -231,6 +231,7 @@ struct Network {
|
||||||
unsigned can_data_sample_point;
|
unsigned can_data_sample_point;
|
||||||
usec_t can_restart_us;
|
usec_t can_restart_us;
|
||||||
int can_triple_sampling;
|
int can_triple_sampling;
|
||||||
|
int can_berr_reporting;
|
||||||
int can_termination;
|
int can_termination;
|
||||||
int can_listen_only;
|
int can_listen_only;
|
||||||
int can_fd_mode;
|
int can_fd_mode;
|
||||||
|
|
|
@ -246,6 +246,7 @@ FDMode=
|
||||||
FDNonISO=
|
FDNonISO=
|
||||||
RestartSec=
|
RestartSec=
|
||||||
TripleSampling=
|
TripleSampling=
|
||||||
|
BusErrorReporting=
|
||||||
Termination=
|
Termination=
|
||||||
ListenOnly=
|
ListenOnly=
|
||||||
[Address]
|
[Address]
|
||||||
|
|
Loading…
Reference in New Issue