Lines Matching refs:fmsg
33 struct devlink_fmsg *fmsg; in devlink_fmsg_alloc() local
35 fmsg = kzalloc(sizeof(*fmsg), GFP_KERNEL); in devlink_fmsg_alloc()
36 if (!fmsg) in devlink_fmsg_alloc()
39 INIT_LIST_HEAD(&fmsg->item_list); in devlink_fmsg_alloc()
41 return fmsg; in devlink_fmsg_alloc()
44 static void devlink_fmsg_free(struct devlink_fmsg *fmsg) in devlink_fmsg_free() argument
48 list_for_each_entry_safe(item, tmp, &fmsg->item_list, list) { in devlink_fmsg_free()
52 kfree(fmsg); in devlink_fmsg_free()
675 static void devlink_fmsg_err_if_binary(struct devlink_fmsg *fmsg) in devlink_fmsg_err_if_binary() argument
677 if (!fmsg->err && fmsg->putting_binary) in devlink_fmsg_err_if_binary()
678 fmsg->err = -EINVAL; in devlink_fmsg_err_if_binary()
681 static void devlink_fmsg_nest_common(struct devlink_fmsg *fmsg, int attrtype) in devlink_fmsg_nest_common() argument
685 if (fmsg->err) in devlink_fmsg_nest_common()
690 fmsg->err = -ENOMEM; in devlink_fmsg_nest_common()
695 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_nest_common()
698 void devlink_fmsg_obj_nest_start(struct devlink_fmsg *fmsg) in devlink_fmsg_obj_nest_start() argument
700 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_obj_nest_start()
701 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_OBJ_NEST_START); in devlink_fmsg_obj_nest_start()
705 static void devlink_fmsg_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_nest_end() argument
707 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_nest_end()
708 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_NEST_END); in devlink_fmsg_nest_end()
711 void devlink_fmsg_obj_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_obj_nest_end() argument
713 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_obj_nest_end()
719 static void devlink_fmsg_put_name(struct devlink_fmsg *fmsg, const char *name) in devlink_fmsg_put_name() argument
723 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_put_name()
724 if (fmsg->err) in devlink_fmsg_put_name()
728 fmsg->err = -EMSGSIZE; in devlink_fmsg_put_name()
734 fmsg->err = -ENOMEM; in devlink_fmsg_put_name()
742 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_put_name()
745 void devlink_fmsg_pair_nest_start(struct devlink_fmsg *fmsg, const char *name) in devlink_fmsg_pair_nest_start() argument
747 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_pair_nest_start()
748 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_PAIR_NEST_START); in devlink_fmsg_pair_nest_start()
749 devlink_fmsg_put_name(fmsg, name); in devlink_fmsg_pair_nest_start()
753 void devlink_fmsg_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_pair_nest_end() argument
755 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_pair_nest_end()
759 void devlink_fmsg_arr_pair_nest_start(struct devlink_fmsg *fmsg, in devlink_fmsg_arr_pair_nest_start() argument
762 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_arr_pair_nest_start()
763 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_ARR_NEST_START); in devlink_fmsg_arr_pair_nest_start()
767 void devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_arr_pair_nest_end() argument
769 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_arr_pair_nest_end()
770 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_arr_pair_nest_end()
774 void devlink_fmsg_binary_pair_nest_start(struct devlink_fmsg *fmsg, in devlink_fmsg_binary_pair_nest_start() argument
777 devlink_fmsg_arr_pair_nest_start(fmsg, name); in devlink_fmsg_binary_pair_nest_start()
778 fmsg->putting_binary = true; in devlink_fmsg_binary_pair_nest_start()
782 void devlink_fmsg_binary_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_binary_pair_nest_end() argument
784 if (fmsg->err) in devlink_fmsg_binary_pair_nest_end()
787 if (!fmsg->putting_binary) in devlink_fmsg_binary_pair_nest_end()
788 fmsg->err = -EINVAL; in devlink_fmsg_binary_pair_nest_end()
790 fmsg->putting_binary = false; in devlink_fmsg_binary_pair_nest_end()
791 devlink_fmsg_arr_pair_nest_end(fmsg); in devlink_fmsg_binary_pair_nest_end()
795 static void devlink_fmsg_put_value(struct devlink_fmsg *fmsg, in devlink_fmsg_put_value() argument
801 if (fmsg->err) in devlink_fmsg_put_value()
805 fmsg->err = -EMSGSIZE; in devlink_fmsg_put_value()
811 fmsg->err = -ENOMEM; in devlink_fmsg_put_value()
819 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_put_value()
822 static void devlink_fmsg_bool_put(struct devlink_fmsg *fmsg, bool value) in devlink_fmsg_bool_put() argument
824 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_bool_put()
825 devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_FLAG); in devlink_fmsg_bool_put()
828 static void devlink_fmsg_u8_put(struct devlink_fmsg *fmsg, u8 value) in devlink_fmsg_u8_put() argument
830 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u8_put()
831 devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U8); in devlink_fmsg_u8_put()
834 void devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value) in devlink_fmsg_u32_put() argument
836 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u32_put()
837 devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U32); in devlink_fmsg_u32_put()
841 static void devlink_fmsg_u64_put(struct devlink_fmsg *fmsg, u64 value) in devlink_fmsg_u64_put() argument
843 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u64_put()
844 devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U64); in devlink_fmsg_u64_put()
847 void devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value) in devlink_fmsg_string_put() argument
849 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_string_put()
850 devlink_fmsg_put_value(fmsg, value, strlen(value) + 1, NLA_NUL_STRING); in devlink_fmsg_string_put()
854 void devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value, in devlink_fmsg_binary_put() argument
857 if (!fmsg->err && !fmsg->putting_binary) in devlink_fmsg_binary_put()
858 fmsg->err = -EINVAL; in devlink_fmsg_binary_put()
860 devlink_fmsg_put_value(fmsg, value, value_len, NLA_BINARY); in devlink_fmsg_binary_put()
864 void devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_bool_pair_put() argument
867 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_bool_pair_put()
868 devlink_fmsg_bool_put(fmsg, value); in devlink_fmsg_bool_pair_put()
869 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_bool_pair_put()
873 void devlink_fmsg_u8_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u8_pair_put() argument
876 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u8_pair_put()
877 devlink_fmsg_u8_put(fmsg, value); in devlink_fmsg_u8_pair_put()
878 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u8_pair_put()
882 void devlink_fmsg_u32_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u32_pair_put() argument
885 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u32_pair_put()
886 devlink_fmsg_u32_put(fmsg, value); in devlink_fmsg_u32_pair_put()
887 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u32_pair_put()
891 void devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u64_pair_put() argument
894 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u64_pair_put()
895 devlink_fmsg_u64_put(fmsg, value); in devlink_fmsg_u64_pair_put()
896 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u64_pair_put()
900 void devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_string_pair_put() argument
903 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_string_pair_put()
904 devlink_fmsg_string_put(fmsg, value); in devlink_fmsg_string_pair_put()
905 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_string_pair_put()
909 void devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_binary_pair_put() argument
915 devlink_fmsg_binary_pair_nest_start(fmsg, name); in devlink_fmsg_binary_pair_put()
922 devlink_fmsg_binary_put(fmsg, value + offset, data_size); in devlink_fmsg_binary_pair_put()
925 devlink_fmsg_binary_pair_nest_end(fmsg); in devlink_fmsg_binary_pair_put()
926 fmsg->putting_binary = false; in devlink_fmsg_binary_pair_put()
975 devlink_fmsg_prepare_skb(struct devlink_fmsg *fmsg, struct sk_buff *skb, in devlink_fmsg_prepare_skb() argument
987 list_for_each_entry(item, &fmsg->item_list, list) { in devlink_fmsg_prepare_skb()
1024 static int devlink_fmsg_snd(struct devlink_fmsg *fmsg, in devlink_fmsg_snd() argument
1035 if (fmsg->err) in devlink_fmsg_snd()
1036 return fmsg->err; in devlink_fmsg_snd()
1052 err = devlink_fmsg_prepare_skb(fmsg, skb, &index); in devlink_fmsg_snd()
1081 static int devlink_fmsg_dumpit(struct devlink_fmsg *fmsg, struct sk_buff *skb, in devlink_fmsg_dumpit() argument
1091 if (fmsg->err) in devlink_fmsg_dumpit()
1092 return fmsg->err; in devlink_fmsg_dumpit()
1101 err = devlink_fmsg_prepare_skb(fmsg, skb, &index); in devlink_fmsg_dumpit()
1119 struct devlink_fmsg *fmsg; in devlink_nl_health_reporter_diagnose_doit() local
1129 fmsg = devlink_fmsg_alloc(); in devlink_nl_health_reporter_diagnose_doit()
1130 if (!fmsg) in devlink_nl_health_reporter_diagnose_doit()
1133 devlink_fmsg_obj_nest_start(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1135 err = reporter->ops->diagnose(reporter, fmsg, info->extack); in devlink_nl_health_reporter_diagnose_doit()
1139 devlink_fmsg_obj_nest_end(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1141 err = devlink_fmsg_snd(fmsg, info, in devlink_nl_health_reporter_diagnose_doit()
1145 devlink_fmsg_free(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1250 void devlink_fmsg_dump_skb(struct devlink_fmsg *fmsg, const struct sk_buff *skb) in devlink_fmsg_dump_skb() argument
1259 devlink_fmsg_pair_nest_start(fmsg, "skb"); in devlink_fmsg_dump_skb()
1260 devlink_fmsg_obj_nest_start(fmsg); in devlink_fmsg_dump_skb()
1261 devlink_fmsg_put(fmsg, "actual len", skb->len); in devlink_fmsg_dump_skb()
1262 devlink_fmsg_put(fmsg, "head len", skb_headlen(skb)); in devlink_fmsg_dump_skb()
1263 devlink_fmsg_put(fmsg, "data len", skb->data_len); in devlink_fmsg_dump_skb()
1264 devlink_fmsg_put(fmsg, "tail len", skb_tailroom(skb)); in devlink_fmsg_dump_skb()
1265 devlink_fmsg_put(fmsg, "MAC", has_mac ? skb->mac_header : -1); in devlink_fmsg_dump_skb()
1266 devlink_fmsg_put(fmsg, "MAC len", in devlink_fmsg_dump_skb()
1268 devlink_fmsg_put(fmsg, "network hdr", skb->network_header); in devlink_fmsg_dump_skb()
1269 devlink_fmsg_put(fmsg, "network hdr len", in devlink_fmsg_dump_skb()
1271 devlink_fmsg_put(fmsg, "transport hdr", in devlink_fmsg_dump_skb()
1273 devlink_fmsg_put(fmsg, "csum", (__force u32)skb->csum); in devlink_fmsg_dump_skb()
1274 devlink_fmsg_put(fmsg, "csum_ip_summed", (u8)skb->ip_summed); in devlink_fmsg_dump_skb()
1275 devlink_fmsg_put(fmsg, "csum_complete_sw", !!skb->csum_complete_sw); in devlink_fmsg_dump_skb()
1276 devlink_fmsg_put(fmsg, "csum_valid", !!skb->csum_valid); in devlink_fmsg_dump_skb()
1277 devlink_fmsg_put(fmsg, "csum_level", (u8)skb->csum_level); in devlink_fmsg_dump_skb()
1278 devlink_fmsg_put(fmsg, "sw_hash", !!skb->sw_hash); in devlink_fmsg_dump_skb()
1279 devlink_fmsg_put(fmsg, "l4_hash", !!skb->l4_hash); in devlink_fmsg_dump_skb()
1280 devlink_fmsg_put(fmsg, "proto", ntohs(skb->protocol)); in devlink_fmsg_dump_skb()
1281 devlink_fmsg_put(fmsg, "pkt_type", (u8)skb->pkt_type); in devlink_fmsg_dump_skb()
1282 devlink_fmsg_put(fmsg, "iif", skb->skb_iif); in devlink_fmsg_dump_skb()
1285 devlink_fmsg_pair_nest_start(fmsg, "sk"); in devlink_fmsg_dump_skb()
1286 devlink_fmsg_obj_nest_start(fmsg); in devlink_fmsg_dump_skb()
1287 devlink_fmsg_put(fmsg, "family", sk->sk_type); in devlink_fmsg_dump_skb()
1288 devlink_fmsg_put(fmsg, "type", sk->sk_type); in devlink_fmsg_dump_skb()
1289 devlink_fmsg_put(fmsg, "proto", sk->sk_protocol); in devlink_fmsg_dump_skb()
1290 devlink_fmsg_obj_nest_end(fmsg); in devlink_fmsg_dump_skb()
1291 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_dump_skb()
1294 devlink_fmsg_obj_nest_end(fmsg); in devlink_fmsg_dump_skb()
1295 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_dump_skb()
1297 devlink_fmsg_pair_nest_start(fmsg, "shinfo"); in devlink_fmsg_dump_skb()
1298 devlink_fmsg_obj_nest_start(fmsg); in devlink_fmsg_dump_skb()
1299 devlink_fmsg_put(fmsg, "tx_flags", sh->tx_flags); in devlink_fmsg_dump_skb()
1300 devlink_fmsg_put(fmsg, "nr_frags", sh->nr_frags); in devlink_fmsg_dump_skb()
1301 devlink_fmsg_put(fmsg, "gso_size", sh->gso_size); in devlink_fmsg_dump_skb()
1302 devlink_fmsg_put(fmsg, "gso_type", sh->gso_type); in devlink_fmsg_dump_skb()
1303 devlink_fmsg_put(fmsg, "gso_segs", sh->gso_segs); in devlink_fmsg_dump_skb()
1304 devlink_fmsg_obj_nest_end(fmsg); in devlink_fmsg_dump_skb()
1305 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_dump_skb()