+static void can_print_pwm_opt(struct rtattr *pwm_attr)
+{
+ struct rtattr *tb[IFLA_CAN_PWM_MAX + 1];
+
+ parse_rtattr_nested(tb, IFLA_CAN_PWM_MAX, pwm_attr);
+ if (tb[IFLA_CAN_PWM_PWMS] || tb[IFLA_CAN_PWM_PWML] ||
+ tb[IFLA_CAN_PWM_PWMO]) {
+ open_json_object("pwm");
+ can_print_nl_indent();
+ if (tb[IFLA_CAN_PWM_PWMS]) {
+ __u32 *pwms = RTA_DATA(tb[IFLA_CAN_PWM_PWMS]);
+
+ print_uint(PRINT_ANY, " pwms", " pwms %u", *pwms);
+ }
+ if (tb[IFLA_CAN_PWM_PWML]) {
+ __u32 *pwml = RTA_DATA(tb[IFLA_CAN_PWM_PWML]);
+
+ print_uint(PRINT_ANY, " pwml", " pwml %u", *pwml);
+ }
+ if (tb[IFLA_CAN_PWM_PWMO]) {
+ __u32 *pwmo = RTA_DATA(tb[IFLA_CAN_PWM_PWMO]);
+
+ print_uint(PRINT_ANY, " pwmo", " pwmo %u", *pwmo);
+ }
+ close_json_object();
+ }
+}
+
+static void can_print_pwm_const_opt(struct rtattr *pwm_attr)
+{
+ struct rtattr *tb[IFLA_CAN_PWM_MAX + 1];
+
+ parse_rtattr_nested(tb, IFLA_CAN_PWM_MAX, pwm_attr);
+ open_json_object("pwm");
+ can_print_nl_indent();
+ if (tb[IFLA_CAN_PWM_PWMS_MAX]) {
+ __u32 *pwms_min = RTA_DATA(tb[IFLA_CAN_PWM_PWMS_MIN]);
+ __u32 *pwms_max = RTA_DATA(tb[IFLA_CAN_PWM_PWMS_MAX]);
+
+ can_print_timing_min_max("pwms", " pwms", *pwms_min, *pwms_max);
+ }
+ if (tb[IFLA_CAN_PWM_PWML_MAX]) {
+ __u32 *pwml_min = RTA_DATA(tb[IFLA_CAN_PWM_PWML_MIN]);
+ __u32 *pwml_max = RTA_DATA(tb[IFLA_CAN_PWM_PWML_MAX]);
+
+ can_print_timing_min_max("pwml", " pwml", *pwml_min, *pwml_max);
+ }
+ if (tb[IFLA_CAN_PWM_PWMO_MAX]) {
+ __u32 *pwmo_min = RTA_DATA(tb[IFLA_CAN_PWM_PWMO_MIN]);
+ __u32 *pwmo_max = RTA_DATA(tb[IFLA_CAN_PWM_PWMO_MAX]);
+
+ can_print_timing_min_max("pwmo", " pwmo", *pwmo_min, *pwmo_max);
+ }
+ close_json_object();
+}
+