netlink_gen.c 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287
  1. // SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
  2. /* Do not edit directly, auto-generated from: */
  3. /* Documentation/netlink/specs/devlink.yaml */
  4. /* YNL-GEN kernel source */
  5. /* To regenerate run: tools/net/ynl/ynl-regen.sh */
  6. #include <net/netlink.h>
  7. #include <net/genetlink.h>
  8. #include "netlink_gen.h"
  9. #include <uapi/linux/devlink.h>
  10. /* Sparse enums validation callbacks */
  11. static int
  12. devlink_attr_param_type_validate(const struct nlattr *attr,
  13. struct netlink_ext_ack *extack)
  14. {
  15. switch (nla_get_u8(attr)) {
  16. case DEVLINK_VAR_ATTR_TYPE_U8:
  17. fallthrough;
  18. case DEVLINK_VAR_ATTR_TYPE_U16:
  19. fallthrough;
  20. case DEVLINK_VAR_ATTR_TYPE_U32:
  21. fallthrough;
  22. case DEVLINK_VAR_ATTR_TYPE_U64:
  23. fallthrough;
  24. case DEVLINK_VAR_ATTR_TYPE_STRING:
  25. fallthrough;
  26. case DEVLINK_VAR_ATTR_TYPE_FLAG:
  27. fallthrough;
  28. case DEVLINK_VAR_ATTR_TYPE_NUL_STRING:
  29. fallthrough;
  30. case DEVLINK_VAR_ATTR_TYPE_BINARY:
  31. return 0;
  32. }
  33. NL_SET_ERR_MSG_ATTR(extack, attr, "invalid enum value");
  34. return -EINVAL;
  35. }
  36. /* Common nested types */
  37. const struct nla_policy devlink_dl_port_function_nl_policy[DEVLINK_PORT_FN_ATTR_CAPS + 1] = {
  38. [DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR] = { .type = NLA_BINARY, },
  39. [DEVLINK_PORT_FN_ATTR_STATE] = NLA_POLICY_MAX(NLA_U8, 1),
  40. [DEVLINK_PORT_FN_ATTR_OPSTATE] = NLA_POLICY_MAX(NLA_U8, 1),
  41. [DEVLINK_PORT_FN_ATTR_CAPS] = NLA_POLICY_BITFIELD32(15),
  42. };
  43. const struct nla_policy devlink_dl_rate_tc_bws_nl_policy[DEVLINK_RATE_TC_ATTR_BW + 1] = {
  44. [DEVLINK_RATE_TC_ATTR_INDEX] = NLA_POLICY_MAX(NLA_U8, DEVLINK_RATE_TC_INDEX_MAX),
  45. [DEVLINK_RATE_TC_ATTR_BW] = { .type = NLA_U32, },
  46. };
  47. const struct nla_policy devlink_dl_selftest_id_nl_policy[DEVLINK_ATTR_SELFTEST_ID_FLASH + 1] = {
  48. [DEVLINK_ATTR_SELFTEST_ID_FLASH] = { .type = NLA_FLAG, },
  49. };
  50. /* DEVLINK_CMD_GET - do */
  51. static const struct nla_policy devlink_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  52. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  53. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  54. };
  55. /* DEVLINK_CMD_PORT_GET - do */
  56. static const struct nla_policy devlink_port_get_do_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
  57. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  58. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  59. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  60. };
  61. /* DEVLINK_CMD_PORT_GET - dump */
  62. static const struct nla_policy devlink_port_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  63. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  64. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  65. };
  66. /* DEVLINK_CMD_PORT_SET - do */
  67. static const struct nla_policy devlink_port_set_nl_policy[DEVLINK_ATTR_PORT_FUNCTION + 1] = {
  68. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  69. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  70. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  71. [DEVLINK_ATTR_PORT_TYPE] = NLA_POLICY_MAX(NLA_U16, 3),
  72. [DEVLINK_ATTR_PORT_FUNCTION] = NLA_POLICY_NESTED(devlink_dl_port_function_nl_policy),
  73. };
  74. /* DEVLINK_CMD_PORT_NEW - do */
  75. static const struct nla_policy devlink_port_new_nl_policy[DEVLINK_ATTR_PORT_PCI_SF_NUMBER + 1] = {
  76. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  77. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  78. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  79. [DEVLINK_ATTR_PORT_FLAVOUR] = NLA_POLICY_MAX(NLA_U16, 7),
  80. [DEVLINK_ATTR_PORT_PCI_PF_NUMBER] = { .type = NLA_U16, },
  81. [DEVLINK_ATTR_PORT_PCI_SF_NUMBER] = { .type = NLA_U32, },
  82. [DEVLINK_ATTR_PORT_CONTROLLER_NUMBER] = { .type = NLA_U32, },
  83. };
  84. /* DEVLINK_CMD_PORT_DEL - do */
  85. static const struct nla_policy devlink_port_del_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
  86. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  87. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  88. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  89. };
  90. /* DEVLINK_CMD_PORT_SPLIT - do */
  91. static const struct nla_policy devlink_port_split_nl_policy[DEVLINK_ATTR_PORT_SPLIT_COUNT + 1] = {
  92. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  93. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  94. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  95. [DEVLINK_ATTR_PORT_SPLIT_COUNT] = { .type = NLA_U32, },
  96. };
  97. /* DEVLINK_CMD_PORT_UNSPLIT - do */
  98. static const struct nla_policy devlink_port_unsplit_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
  99. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  100. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  101. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  102. };
  103. /* DEVLINK_CMD_SB_GET - do */
  104. static const struct nla_policy devlink_sb_get_do_nl_policy[DEVLINK_ATTR_SB_INDEX + 1] = {
  105. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  106. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  107. [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
  108. };
  109. /* DEVLINK_CMD_SB_GET - dump */
  110. static const struct nla_policy devlink_sb_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  111. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  112. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  113. };
  114. /* DEVLINK_CMD_SB_POOL_GET - do */
  115. static const struct nla_policy devlink_sb_pool_get_do_nl_policy[DEVLINK_ATTR_SB_POOL_INDEX + 1] = {
  116. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  117. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  118. [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
  119. [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
  120. };
  121. /* DEVLINK_CMD_SB_POOL_GET - dump */
  122. static const struct nla_policy devlink_sb_pool_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  123. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  124. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  125. };
  126. /* DEVLINK_CMD_SB_POOL_SET - do */
  127. static const struct nla_policy devlink_sb_pool_set_nl_policy[DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE + 1] = {
  128. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  129. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  130. [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
  131. [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
  132. [DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE] = NLA_POLICY_MAX(NLA_U8, 1),
  133. [DEVLINK_ATTR_SB_POOL_SIZE] = { .type = NLA_U32, },
  134. };
  135. /* DEVLINK_CMD_SB_PORT_POOL_GET - do */
  136. static const struct nla_policy devlink_sb_port_pool_get_do_nl_policy[DEVLINK_ATTR_SB_POOL_INDEX + 1] = {
  137. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  138. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  139. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  140. [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
  141. [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
  142. };
  143. /* DEVLINK_CMD_SB_PORT_POOL_GET - dump */
  144. static const struct nla_policy devlink_sb_port_pool_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  145. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  146. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  147. };
  148. /* DEVLINK_CMD_SB_PORT_POOL_SET - do */
  149. static const struct nla_policy devlink_sb_port_pool_set_nl_policy[DEVLINK_ATTR_SB_THRESHOLD + 1] = {
  150. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  151. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  152. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  153. [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
  154. [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
  155. [DEVLINK_ATTR_SB_THRESHOLD] = { .type = NLA_U32, },
  156. };
  157. /* DEVLINK_CMD_SB_TC_POOL_BIND_GET - do */
  158. static const struct nla_policy devlink_sb_tc_pool_bind_get_do_nl_policy[DEVLINK_ATTR_SB_TC_INDEX + 1] = {
  159. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  160. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  161. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  162. [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
  163. [DEVLINK_ATTR_SB_POOL_TYPE] = NLA_POLICY_MAX(NLA_U8, 1),
  164. [DEVLINK_ATTR_SB_TC_INDEX] = { .type = NLA_U16, },
  165. };
  166. /* DEVLINK_CMD_SB_TC_POOL_BIND_GET - dump */
  167. static const struct nla_policy devlink_sb_tc_pool_bind_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  168. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  169. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  170. };
  171. /* DEVLINK_CMD_SB_TC_POOL_BIND_SET - do */
  172. static const struct nla_policy devlink_sb_tc_pool_bind_set_nl_policy[DEVLINK_ATTR_SB_TC_INDEX + 1] = {
  173. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  174. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  175. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  176. [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
  177. [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
  178. [DEVLINK_ATTR_SB_POOL_TYPE] = NLA_POLICY_MAX(NLA_U8, 1),
  179. [DEVLINK_ATTR_SB_TC_INDEX] = { .type = NLA_U16, },
  180. [DEVLINK_ATTR_SB_THRESHOLD] = { .type = NLA_U32, },
  181. };
  182. /* DEVLINK_CMD_SB_OCC_SNAPSHOT - do */
  183. static const struct nla_policy devlink_sb_occ_snapshot_nl_policy[DEVLINK_ATTR_SB_INDEX + 1] = {
  184. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  185. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  186. [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
  187. };
  188. /* DEVLINK_CMD_SB_OCC_MAX_CLEAR - do */
  189. static const struct nla_policy devlink_sb_occ_max_clear_nl_policy[DEVLINK_ATTR_SB_INDEX + 1] = {
  190. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  191. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  192. [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
  193. };
  194. /* DEVLINK_CMD_ESWITCH_GET - do */
  195. static const struct nla_policy devlink_eswitch_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  196. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  197. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  198. };
  199. /* DEVLINK_CMD_ESWITCH_SET - do */
  200. static const struct nla_policy devlink_eswitch_set_nl_policy[DEVLINK_ATTR_ESWITCH_ENCAP_MODE + 1] = {
  201. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  202. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  203. [DEVLINK_ATTR_ESWITCH_MODE] = NLA_POLICY_MAX(NLA_U16, 2),
  204. [DEVLINK_ATTR_ESWITCH_INLINE_MODE] = NLA_POLICY_MAX(NLA_U8, 3),
  205. [DEVLINK_ATTR_ESWITCH_ENCAP_MODE] = NLA_POLICY_MAX(NLA_U8, 1),
  206. };
  207. /* DEVLINK_CMD_DPIPE_TABLE_GET - do */
  208. static const struct nla_policy devlink_dpipe_table_get_nl_policy[DEVLINK_ATTR_DPIPE_TABLE_NAME + 1] = {
  209. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  210. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  211. [DEVLINK_ATTR_DPIPE_TABLE_NAME] = { .type = NLA_NUL_STRING, },
  212. };
  213. /* DEVLINK_CMD_DPIPE_ENTRIES_GET - do */
  214. static const struct nla_policy devlink_dpipe_entries_get_nl_policy[DEVLINK_ATTR_DPIPE_TABLE_NAME + 1] = {
  215. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  216. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  217. [DEVLINK_ATTR_DPIPE_TABLE_NAME] = { .type = NLA_NUL_STRING, },
  218. };
  219. /* DEVLINK_CMD_DPIPE_HEADERS_GET - do */
  220. static const struct nla_policy devlink_dpipe_headers_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  221. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  222. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  223. };
  224. /* DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET - do */
  225. static const struct nla_policy devlink_dpipe_table_counters_set_nl_policy[DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED + 1] = {
  226. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  227. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  228. [DEVLINK_ATTR_DPIPE_TABLE_NAME] = { .type = NLA_NUL_STRING, },
  229. [DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED] = { .type = NLA_U8, },
  230. };
  231. /* DEVLINK_CMD_RESOURCE_SET - do */
  232. static const struct nla_policy devlink_resource_set_nl_policy[DEVLINK_ATTR_RESOURCE_SIZE + 1] = {
  233. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  234. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  235. [DEVLINK_ATTR_RESOURCE_ID] = { .type = NLA_U64, },
  236. [DEVLINK_ATTR_RESOURCE_SIZE] = { .type = NLA_U64, },
  237. };
  238. /* DEVLINK_CMD_RESOURCE_DUMP - do */
  239. static const struct nla_policy devlink_resource_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  240. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  241. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  242. };
  243. /* DEVLINK_CMD_RELOAD - do */
  244. static const struct nla_policy devlink_reload_nl_policy[DEVLINK_ATTR_RELOAD_LIMITS + 1] = {
  245. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  246. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  247. [DEVLINK_ATTR_RELOAD_ACTION] = NLA_POLICY_RANGE(NLA_U8, 1, 2),
  248. [DEVLINK_ATTR_RELOAD_LIMITS] = NLA_POLICY_BITFIELD32(6),
  249. [DEVLINK_ATTR_NETNS_PID] = { .type = NLA_U32, },
  250. [DEVLINK_ATTR_NETNS_FD] = { .type = NLA_U32, },
  251. [DEVLINK_ATTR_NETNS_ID] = { .type = NLA_U32, },
  252. };
  253. /* DEVLINK_CMD_PARAM_GET - do */
  254. static const struct nla_policy devlink_param_get_do_nl_policy[DEVLINK_ATTR_PARAM_NAME + 1] = {
  255. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  256. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  257. [DEVLINK_ATTR_PARAM_NAME] = { .type = NLA_NUL_STRING, },
  258. };
  259. /* DEVLINK_CMD_PARAM_GET - dump */
  260. static const struct nla_policy devlink_param_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  261. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  262. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  263. };
  264. /* DEVLINK_CMD_PARAM_SET - do */
  265. static const struct nla_policy devlink_param_set_nl_policy[DEVLINK_ATTR_PARAM_RESET_DEFAULT + 1] = {
  266. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  267. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  268. [DEVLINK_ATTR_PARAM_NAME] = { .type = NLA_NUL_STRING, },
  269. [DEVLINK_ATTR_PARAM_TYPE] = NLA_POLICY_VALIDATE_FN(NLA_U8, &devlink_attr_param_type_validate),
  270. [DEVLINK_ATTR_PARAM_VALUE_CMODE] = NLA_POLICY_MAX(NLA_U8, 2),
  271. [DEVLINK_ATTR_PARAM_RESET_DEFAULT] = { .type = NLA_FLAG, },
  272. };
  273. /* DEVLINK_CMD_REGION_GET - do */
  274. static const struct nla_policy devlink_region_get_do_nl_policy[DEVLINK_ATTR_REGION_NAME + 1] = {
  275. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  276. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  277. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  278. [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING, },
  279. };
  280. /* DEVLINK_CMD_REGION_GET - dump */
  281. static const struct nla_policy devlink_region_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  282. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  283. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  284. };
  285. /* DEVLINK_CMD_REGION_NEW - do */
  286. static const struct nla_policy devlink_region_new_nl_policy[DEVLINK_ATTR_REGION_SNAPSHOT_ID + 1] = {
  287. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  288. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  289. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  290. [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING, },
  291. [DEVLINK_ATTR_REGION_SNAPSHOT_ID] = { .type = NLA_U32, },
  292. };
  293. /* DEVLINK_CMD_REGION_DEL - do */
  294. static const struct nla_policy devlink_region_del_nl_policy[DEVLINK_ATTR_REGION_SNAPSHOT_ID + 1] = {
  295. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  296. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  297. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  298. [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING, },
  299. [DEVLINK_ATTR_REGION_SNAPSHOT_ID] = { .type = NLA_U32, },
  300. };
  301. /* DEVLINK_CMD_REGION_READ - dump */
  302. static const struct nla_policy devlink_region_read_nl_policy[DEVLINK_ATTR_REGION_DIRECT + 1] = {
  303. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  304. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  305. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  306. [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING, },
  307. [DEVLINK_ATTR_REGION_SNAPSHOT_ID] = { .type = NLA_U32, },
  308. [DEVLINK_ATTR_REGION_DIRECT] = { .type = NLA_FLAG, },
  309. [DEVLINK_ATTR_REGION_CHUNK_ADDR] = { .type = NLA_U64, },
  310. [DEVLINK_ATTR_REGION_CHUNK_LEN] = { .type = NLA_U64, },
  311. };
  312. /* DEVLINK_CMD_PORT_PARAM_GET - do */
  313. static const struct nla_policy devlink_port_param_get_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
  314. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  315. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  316. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  317. };
  318. /* DEVLINK_CMD_PORT_PARAM_SET - do */
  319. static const struct nla_policy devlink_port_param_set_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
  320. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  321. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  322. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  323. };
  324. /* DEVLINK_CMD_INFO_GET - do */
  325. static const struct nla_policy devlink_info_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  326. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  327. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  328. };
  329. /* DEVLINK_CMD_HEALTH_REPORTER_GET - do */
  330. static const struct nla_policy devlink_health_reporter_get_do_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
  331. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  332. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  333. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  334. [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
  335. };
  336. /* DEVLINK_CMD_HEALTH_REPORTER_GET - dump */
  337. static const struct nla_policy devlink_health_reporter_get_dump_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
  338. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  339. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  340. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  341. };
  342. /* DEVLINK_CMD_HEALTH_REPORTER_SET - do */
  343. static const struct nla_policy devlink_health_reporter_set_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_BURST_PERIOD + 1] = {
  344. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  345. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  346. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  347. [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
  348. [DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD] = { .type = NLA_U64, },
  349. [DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER] = { .type = NLA_U8, },
  350. [DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP] = { .type = NLA_U8, },
  351. [DEVLINK_ATTR_HEALTH_REPORTER_BURST_PERIOD] = { .type = NLA_U64, },
  352. };
  353. /* DEVLINK_CMD_HEALTH_REPORTER_RECOVER - do */
  354. static const struct nla_policy devlink_health_reporter_recover_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
  355. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  356. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  357. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  358. [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
  359. };
  360. /* DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE - do */
  361. static const struct nla_policy devlink_health_reporter_diagnose_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
  362. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  363. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  364. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  365. [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
  366. };
  367. /* DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET - dump */
  368. static const struct nla_policy devlink_health_reporter_dump_get_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
  369. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  370. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  371. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  372. [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
  373. };
  374. /* DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR - do */
  375. static const struct nla_policy devlink_health_reporter_dump_clear_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
  376. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  377. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  378. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  379. [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
  380. };
  381. /* DEVLINK_CMD_FLASH_UPDATE - do */
  382. static const struct nla_policy devlink_flash_update_nl_policy[DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK + 1] = {
  383. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  384. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  385. [DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME] = { .type = NLA_NUL_STRING, },
  386. [DEVLINK_ATTR_FLASH_UPDATE_COMPONENT] = { .type = NLA_NUL_STRING, },
  387. [DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK] = NLA_POLICY_BITFIELD32(3),
  388. };
  389. /* DEVLINK_CMD_TRAP_GET - do */
  390. static const struct nla_policy devlink_trap_get_do_nl_policy[DEVLINK_ATTR_TRAP_NAME + 1] = {
  391. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  392. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  393. [DEVLINK_ATTR_TRAP_NAME] = { .type = NLA_NUL_STRING, },
  394. };
  395. /* DEVLINK_CMD_TRAP_GET - dump */
  396. static const struct nla_policy devlink_trap_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  397. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  398. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  399. };
  400. /* DEVLINK_CMD_TRAP_SET - do */
  401. static const struct nla_policy devlink_trap_set_nl_policy[DEVLINK_ATTR_TRAP_ACTION + 1] = {
  402. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  403. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  404. [DEVLINK_ATTR_TRAP_NAME] = { .type = NLA_NUL_STRING, },
  405. [DEVLINK_ATTR_TRAP_ACTION] = NLA_POLICY_MAX(NLA_U8, 2),
  406. };
  407. /* DEVLINK_CMD_TRAP_GROUP_GET - do */
  408. static const struct nla_policy devlink_trap_group_get_do_nl_policy[DEVLINK_ATTR_TRAP_GROUP_NAME + 1] = {
  409. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  410. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  411. [DEVLINK_ATTR_TRAP_GROUP_NAME] = { .type = NLA_NUL_STRING, },
  412. };
  413. /* DEVLINK_CMD_TRAP_GROUP_GET - dump */
  414. static const struct nla_policy devlink_trap_group_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  415. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  416. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  417. };
  418. /* DEVLINK_CMD_TRAP_GROUP_SET - do */
  419. static const struct nla_policy devlink_trap_group_set_nl_policy[DEVLINK_ATTR_TRAP_POLICER_ID + 1] = {
  420. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  421. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  422. [DEVLINK_ATTR_TRAP_GROUP_NAME] = { .type = NLA_NUL_STRING, },
  423. [DEVLINK_ATTR_TRAP_ACTION] = NLA_POLICY_MAX(NLA_U8, 2),
  424. [DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, },
  425. };
  426. /* DEVLINK_CMD_TRAP_POLICER_GET - do */
  427. static const struct nla_policy devlink_trap_policer_get_do_nl_policy[DEVLINK_ATTR_TRAP_POLICER_ID + 1] = {
  428. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  429. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  430. [DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, },
  431. };
  432. /* DEVLINK_CMD_TRAP_POLICER_GET - dump */
  433. static const struct nla_policy devlink_trap_policer_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  434. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  435. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  436. };
  437. /* DEVLINK_CMD_TRAP_POLICER_SET - do */
  438. static const struct nla_policy devlink_trap_policer_set_nl_policy[DEVLINK_ATTR_TRAP_POLICER_BURST + 1] = {
  439. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  440. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  441. [DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, },
  442. [DEVLINK_ATTR_TRAP_POLICER_RATE] = { .type = NLA_U64, },
  443. [DEVLINK_ATTR_TRAP_POLICER_BURST] = { .type = NLA_U64, },
  444. };
  445. /* DEVLINK_CMD_HEALTH_REPORTER_TEST - do */
  446. static const struct nla_policy devlink_health_reporter_test_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
  447. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  448. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  449. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  450. [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
  451. };
  452. /* DEVLINK_CMD_RATE_GET - do */
  453. static const struct nla_policy devlink_rate_get_do_nl_policy[DEVLINK_ATTR_RATE_NODE_NAME + 1] = {
  454. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  455. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  456. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  457. [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
  458. };
  459. /* DEVLINK_CMD_RATE_GET - dump */
  460. static const struct nla_policy devlink_rate_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  461. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  462. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  463. };
  464. /* DEVLINK_CMD_RATE_SET - do */
  465. static const struct nla_policy devlink_rate_set_nl_policy[DEVLINK_ATTR_RATE_TC_BWS + 1] = {
  466. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  467. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  468. [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
  469. [DEVLINK_ATTR_RATE_TX_SHARE] = { .type = NLA_U64, },
  470. [DEVLINK_ATTR_RATE_TX_MAX] = { .type = NLA_U64, },
  471. [DEVLINK_ATTR_RATE_TX_PRIORITY] = { .type = NLA_U32, },
  472. [DEVLINK_ATTR_RATE_TX_WEIGHT] = { .type = NLA_U32, },
  473. [DEVLINK_ATTR_RATE_PARENT_NODE_NAME] = { .type = NLA_NUL_STRING, },
  474. [DEVLINK_ATTR_RATE_TC_BWS] = NLA_POLICY_NESTED(devlink_dl_rate_tc_bws_nl_policy),
  475. };
  476. /* DEVLINK_CMD_RATE_NEW - do */
  477. static const struct nla_policy devlink_rate_new_nl_policy[DEVLINK_ATTR_RATE_TC_BWS + 1] = {
  478. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  479. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  480. [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
  481. [DEVLINK_ATTR_RATE_TX_SHARE] = { .type = NLA_U64, },
  482. [DEVLINK_ATTR_RATE_TX_MAX] = { .type = NLA_U64, },
  483. [DEVLINK_ATTR_RATE_TX_PRIORITY] = { .type = NLA_U32, },
  484. [DEVLINK_ATTR_RATE_TX_WEIGHT] = { .type = NLA_U32, },
  485. [DEVLINK_ATTR_RATE_PARENT_NODE_NAME] = { .type = NLA_NUL_STRING, },
  486. [DEVLINK_ATTR_RATE_TC_BWS] = NLA_POLICY_NESTED(devlink_dl_rate_tc_bws_nl_policy),
  487. };
  488. /* DEVLINK_CMD_RATE_DEL - do */
  489. static const struct nla_policy devlink_rate_del_nl_policy[DEVLINK_ATTR_RATE_NODE_NAME + 1] = {
  490. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  491. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  492. [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
  493. };
  494. /* DEVLINK_CMD_LINECARD_GET - do */
  495. static const struct nla_policy devlink_linecard_get_do_nl_policy[DEVLINK_ATTR_LINECARD_INDEX + 1] = {
  496. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  497. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  498. [DEVLINK_ATTR_LINECARD_INDEX] = { .type = NLA_U32, },
  499. };
  500. /* DEVLINK_CMD_LINECARD_GET - dump */
  501. static const struct nla_policy devlink_linecard_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  502. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  503. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  504. };
  505. /* DEVLINK_CMD_LINECARD_SET - do */
  506. static const struct nla_policy devlink_linecard_set_nl_policy[DEVLINK_ATTR_LINECARD_TYPE + 1] = {
  507. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  508. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  509. [DEVLINK_ATTR_LINECARD_INDEX] = { .type = NLA_U32, },
  510. [DEVLINK_ATTR_LINECARD_TYPE] = { .type = NLA_NUL_STRING, },
  511. };
  512. /* DEVLINK_CMD_SELFTESTS_GET - do */
  513. static const struct nla_policy devlink_selftests_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
  514. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  515. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  516. };
  517. /* DEVLINK_CMD_SELFTESTS_RUN - do */
  518. static const struct nla_policy devlink_selftests_run_nl_policy[DEVLINK_ATTR_SELFTESTS + 1] = {
  519. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  520. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  521. [DEVLINK_ATTR_SELFTESTS] = NLA_POLICY_NESTED(devlink_dl_selftest_id_nl_policy),
  522. };
  523. /* DEVLINK_CMD_NOTIFY_FILTER_SET - do */
  524. static const struct nla_policy devlink_notify_filter_set_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
  525. [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
  526. [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
  527. [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
  528. };
  529. /* Ops table for devlink */
  530. const struct genl_split_ops devlink_nl_ops[74] = {
  531. {
  532. .cmd = DEVLINK_CMD_GET,
  533. .validate = GENL_DONT_VALIDATE_STRICT,
  534. .pre_doit = devlink_nl_pre_doit,
  535. .doit = devlink_nl_get_doit,
  536. .post_doit = devlink_nl_post_doit,
  537. .policy = devlink_get_nl_policy,
  538. .maxattr = DEVLINK_ATTR_DEV_NAME,
  539. .flags = GENL_CMD_CAP_DO,
  540. },
  541. {
  542. .cmd = DEVLINK_CMD_GET,
  543. .validate = GENL_DONT_VALIDATE_DUMP,
  544. .dumpit = devlink_nl_get_dumpit,
  545. .flags = GENL_CMD_CAP_DUMP,
  546. },
  547. {
  548. .cmd = DEVLINK_CMD_PORT_GET,
  549. .validate = GENL_DONT_VALIDATE_STRICT,
  550. .pre_doit = devlink_nl_pre_doit_port,
  551. .doit = devlink_nl_port_get_doit,
  552. .post_doit = devlink_nl_post_doit,
  553. .policy = devlink_port_get_do_nl_policy,
  554. .maxattr = DEVLINK_ATTR_PORT_INDEX,
  555. .flags = GENL_CMD_CAP_DO,
  556. },
  557. {
  558. .cmd = DEVLINK_CMD_PORT_GET,
  559. .dumpit = devlink_nl_port_get_dumpit,
  560. .policy = devlink_port_get_dump_nl_policy,
  561. .maxattr = DEVLINK_ATTR_DEV_NAME,
  562. .flags = GENL_CMD_CAP_DUMP,
  563. },
  564. {
  565. .cmd = DEVLINK_CMD_PORT_SET,
  566. .validate = GENL_DONT_VALIDATE_STRICT,
  567. .pre_doit = devlink_nl_pre_doit_port,
  568. .doit = devlink_nl_port_set_doit,
  569. .post_doit = devlink_nl_post_doit,
  570. .policy = devlink_port_set_nl_policy,
  571. .maxattr = DEVLINK_ATTR_PORT_FUNCTION,
  572. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  573. },
  574. {
  575. .cmd = DEVLINK_CMD_PORT_NEW,
  576. .validate = GENL_DONT_VALIDATE_STRICT,
  577. .pre_doit = devlink_nl_pre_doit,
  578. .doit = devlink_nl_port_new_doit,
  579. .post_doit = devlink_nl_post_doit,
  580. .policy = devlink_port_new_nl_policy,
  581. .maxattr = DEVLINK_ATTR_PORT_PCI_SF_NUMBER,
  582. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  583. },
  584. {
  585. .cmd = DEVLINK_CMD_PORT_DEL,
  586. .validate = GENL_DONT_VALIDATE_STRICT,
  587. .pre_doit = devlink_nl_pre_doit_port,
  588. .doit = devlink_nl_port_del_doit,
  589. .post_doit = devlink_nl_post_doit,
  590. .policy = devlink_port_del_nl_policy,
  591. .maxattr = DEVLINK_ATTR_PORT_INDEX,
  592. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  593. },
  594. {
  595. .cmd = DEVLINK_CMD_PORT_SPLIT,
  596. .validate = GENL_DONT_VALIDATE_STRICT,
  597. .pre_doit = devlink_nl_pre_doit_port,
  598. .doit = devlink_nl_port_split_doit,
  599. .post_doit = devlink_nl_post_doit,
  600. .policy = devlink_port_split_nl_policy,
  601. .maxattr = DEVLINK_ATTR_PORT_SPLIT_COUNT,
  602. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  603. },
  604. {
  605. .cmd = DEVLINK_CMD_PORT_UNSPLIT,
  606. .validate = GENL_DONT_VALIDATE_STRICT,
  607. .pre_doit = devlink_nl_pre_doit_port,
  608. .doit = devlink_nl_port_unsplit_doit,
  609. .post_doit = devlink_nl_post_doit,
  610. .policy = devlink_port_unsplit_nl_policy,
  611. .maxattr = DEVLINK_ATTR_PORT_INDEX,
  612. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  613. },
  614. {
  615. .cmd = DEVLINK_CMD_SB_GET,
  616. .validate = GENL_DONT_VALIDATE_STRICT,
  617. .pre_doit = devlink_nl_pre_doit,
  618. .doit = devlink_nl_sb_get_doit,
  619. .post_doit = devlink_nl_post_doit,
  620. .policy = devlink_sb_get_do_nl_policy,
  621. .maxattr = DEVLINK_ATTR_SB_INDEX,
  622. .flags = GENL_CMD_CAP_DO,
  623. },
  624. {
  625. .cmd = DEVLINK_CMD_SB_GET,
  626. .dumpit = devlink_nl_sb_get_dumpit,
  627. .policy = devlink_sb_get_dump_nl_policy,
  628. .maxattr = DEVLINK_ATTR_DEV_NAME,
  629. .flags = GENL_CMD_CAP_DUMP,
  630. },
  631. {
  632. .cmd = DEVLINK_CMD_SB_POOL_GET,
  633. .validate = GENL_DONT_VALIDATE_STRICT,
  634. .pre_doit = devlink_nl_pre_doit,
  635. .doit = devlink_nl_sb_pool_get_doit,
  636. .post_doit = devlink_nl_post_doit,
  637. .policy = devlink_sb_pool_get_do_nl_policy,
  638. .maxattr = DEVLINK_ATTR_SB_POOL_INDEX,
  639. .flags = GENL_CMD_CAP_DO,
  640. },
  641. {
  642. .cmd = DEVLINK_CMD_SB_POOL_GET,
  643. .dumpit = devlink_nl_sb_pool_get_dumpit,
  644. .policy = devlink_sb_pool_get_dump_nl_policy,
  645. .maxattr = DEVLINK_ATTR_DEV_NAME,
  646. .flags = GENL_CMD_CAP_DUMP,
  647. },
  648. {
  649. .cmd = DEVLINK_CMD_SB_POOL_SET,
  650. .validate = GENL_DONT_VALIDATE_STRICT,
  651. .pre_doit = devlink_nl_pre_doit,
  652. .doit = devlink_nl_sb_pool_set_doit,
  653. .post_doit = devlink_nl_post_doit,
  654. .policy = devlink_sb_pool_set_nl_policy,
  655. .maxattr = DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE,
  656. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  657. },
  658. {
  659. .cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
  660. .validate = GENL_DONT_VALIDATE_STRICT,
  661. .pre_doit = devlink_nl_pre_doit_port,
  662. .doit = devlink_nl_sb_port_pool_get_doit,
  663. .post_doit = devlink_nl_post_doit,
  664. .policy = devlink_sb_port_pool_get_do_nl_policy,
  665. .maxattr = DEVLINK_ATTR_SB_POOL_INDEX,
  666. .flags = GENL_CMD_CAP_DO,
  667. },
  668. {
  669. .cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
  670. .dumpit = devlink_nl_sb_port_pool_get_dumpit,
  671. .policy = devlink_sb_port_pool_get_dump_nl_policy,
  672. .maxattr = DEVLINK_ATTR_DEV_NAME,
  673. .flags = GENL_CMD_CAP_DUMP,
  674. },
  675. {
  676. .cmd = DEVLINK_CMD_SB_PORT_POOL_SET,
  677. .validate = GENL_DONT_VALIDATE_STRICT,
  678. .pre_doit = devlink_nl_pre_doit_port,
  679. .doit = devlink_nl_sb_port_pool_set_doit,
  680. .post_doit = devlink_nl_post_doit,
  681. .policy = devlink_sb_port_pool_set_nl_policy,
  682. .maxattr = DEVLINK_ATTR_SB_THRESHOLD,
  683. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  684. },
  685. {
  686. .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
  687. .validate = GENL_DONT_VALIDATE_STRICT,
  688. .pre_doit = devlink_nl_pre_doit_port,
  689. .doit = devlink_nl_sb_tc_pool_bind_get_doit,
  690. .post_doit = devlink_nl_post_doit,
  691. .policy = devlink_sb_tc_pool_bind_get_do_nl_policy,
  692. .maxattr = DEVLINK_ATTR_SB_TC_INDEX,
  693. .flags = GENL_CMD_CAP_DO,
  694. },
  695. {
  696. .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
  697. .dumpit = devlink_nl_sb_tc_pool_bind_get_dumpit,
  698. .policy = devlink_sb_tc_pool_bind_get_dump_nl_policy,
  699. .maxattr = DEVLINK_ATTR_DEV_NAME,
  700. .flags = GENL_CMD_CAP_DUMP,
  701. },
  702. {
  703. .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_SET,
  704. .validate = GENL_DONT_VALIDATE_STRICT,
  705. .pre_doit = devlink_nl_pre_doit_port,
  706. .doit = devlink_nl_sb_tc_pool_bind_set_doit,
  707. .post_doit = devlink_nl_post_doit,
  708. .policy = devlink_sb_tc_pool_bind_set_nl_policy,
  709. .maxattr = DEVLINK_ATTR_SB_TC_INDEX,
  710. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  711. },
  712. {
  713. .cmd = DEVLINK_CMD_SB_OCC_SNAPSHOT,
  714. .validate = GENL_DONT_VALIDATE_STRICT,
  715. .pre_doit = devlink_nl_pre_doit,
  716. .doit = devlink_nl_sb_occ_snapshot_doit,
  717. .post_doit = devlink_nl_post_doit,
  718. .policy = devlink_sb_occ_snapshot_nl_policy,
  719. .maxattr = DEVLINK_ATTR_SB_INDEX,
  720. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  721. },
  722. {
  723. .cmd = DEVLINK_CMD_SB_OCC_MAX_CLEAR,
  724. .validate = GENL_DONT_VALIDATE_STRICT,
  725. .pre_doit = devlink_nl_pre_doit,
  726. .doit = devlink_nl_sb_occ_max_clear_doit,
  727. .post_doit = devlink_nl_post_doit,
  728. .policy = devlink_sb_occ_max_clear_nl_policy,
  729. .maxattr = DEVLINK_ATTR_SB_INDEX,
  730. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  731. },
  732. {
  733. .cmd = DEVLINK_CMD_ESWITCH_GET,
  734. .validate = GENL_DONT_VALIDATE_STRICT,
  735. .pre_doit = devlink_nl_pre_doit,
  736. .doit = devlink_nl_eswitch_get_doit,
  737. .post_doit = devlink_nl_post_doit,
  738. .policy = devlink_eswitch_get_nl_policy,
  739. .maxattr = DEVLINK_ATTR_DEV_NAME,
  740. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  741. },
  742. {
  743. .cmd = DEVLINK_CMD_ESWITCH_SET,
  744. .validate = GENL_DONT_VALIDATE_STRICT,
  745. .pre_doit = devlink_nl_pre_doit,
  746. .doit = devlink_nl_eswitch_set_doit,
  747. .post_doit = devlink_nl_post_doit,
  748. .policy = devlink_eswitch_set_nl_policy,
  749. .maxattr = DEVLINK_ATTR_ESWITCH_ENCAP_MODE,
  750. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  751. },
  752. {
  753. .cmd = DEVLINK_CMD_DPIPE_TABLE_GET,
  754. .validate = GENL_DONT_VALIDATE_STRICT,
  755. .pre_doit = devlink_nl_pre_doit,
  756. .doit = devlink_nl_dpipe_table_get_doit,
  757. .post_doit = devlink_nl_post_doit,
  758. .policy = devlink_dpipe_table_get_nl_policy,
  759. .maxattr = DEVLINK_ATTR_DPIPE_TABLE_NAME,
  760. .flags = GENL_CMD_CAP_DO,
  761. },
  762. {
  763. .cmd = DEVLINK_CMD_DPIPE_ENTRIES_GET,
  764. .validate = GENL_DONT_VALIDATE_STRICT,
  765. .pre_doit = devlink_nl_pre_doit,
  766. .doit = devlink_nl_dpipe_entries_get_doit,
  767. .post_doit = devlink_nl_post_doit,
  768. .policy = devlink_dpipe_entries_get_nl_policy,
  769. .maxattr = DEVLINK_ATTR_DPIPE_TABLE_NAME,
  770. .flags = GENL_CMD_CAP_DO,
  771. },
  772. {
  773. .cmd = DEVLINK_CMD_DPIPE_HEADERS_GET,
  774. .validate = GENL_DONT_VALIDATE_STRICT,
  775. .pre_doit = devlink_nl_pre_doit,
  776. .doit = devlink_nl_dpipe_headers_get_doit,
  777. .post_doit = devlink_nl_post_doit,
  778. .policy = devlink_dpipe_headers_get_nl_policy,
  779. .maxattr = DEVLINK_ATTR_DEV_NAME,
  780. .flags = GENL_CMD_CAP_DO,
  781. },
  782. {
  783. .cmd = DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
  784. .validate = GENL_DONT_VALIDATE_STRICT,
  785. .pre_doit = devlink_nl_pre_doit,
  786. .doit = devlink_nl_dpipe_table_counters_set_doit,
  787. .post_doit = devlink_nl_post_doit,
  788. .policy = devlink_dpipe_table_counters_set_nl_policy,
  789. .maxattr = DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED,
  790. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  791. },
  792. {
  793. .cmd = DEVLINK_CMD_RESOURCE_SET,
  794. .validate = GENL_DONT_VALIDATE_STRICT,
  795. .pre_doit = devlink_nl_pre_doit,
  796. .doit = devlink_nl_resource_set_doit,
  797. .post_doit = devlink_nl_post_doit,
  798. .policy = devlink_resource_set_nl_policy,
  799. .maxattr = DEVLINK_ATTR_RESOURCE_SIZE,
  800. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  801. },
  802. {
  803. .cmd = DEVLINK_CMD_RESOURCE_DUMP,
  804. .validate = GENL_DONT_VALIDATE_STRICT,
  805. .pre_doit = devlink_nl_pre_doit,
  806. .doit = devlink_nl_resource_dump_doit,
  807. .post_doit = devlink_nl_post_doit,
  808. .policy = devlink_resource_dump_nl_policy,
  809. .maxattr = DEVLINK_ATTR_DEV_NAME,
  810. .flags = GENL_CMD_CAP_DO,
  811. },
  812. {
  813. .cmd = DEVLINK_CMD_RELOAD,
  814. .validate = GENL_DONT_VALIDATE_STRICT,
  815. .pre_doit = devlink_nl_pre_doit_dev_lock,
  816. .doit = devlink_nl_reload_doit,
  817. .post_doit = devlink_nl_post_doit_dev_lock,
  818. .policy = devlink_reload_nl_policy,
  819. .maxattr = DEVLINK_ATTR_RELOAD_LIMITS,
  820. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  821. },
  822. {
  823. .cmd = DEVLINK_CMD_PARAM_GET,
  824. .validate = GENL_DONT_VALIDATE_STRICT,
  825. .pre_doit = devlink_nl_pre_doit,
  826. .doit = devlink_nl_param_get_doit,
  827. .post_doit = devlink_nl_post_doit,
  828. .policy = devlink_param_get_do_nl_policy,
  829. .maxattr = DEVLINK_ATTR_PARAM_NAME,
  830. .flags = GENL_CMD_CAP_DO,
  831. },
  832. {
  833. .cmd = DEVLINK_CMD_PARAM_GET,
  834. .dumpit = devlink_nl_param_get_dumpit,
  835. .policy = devlink_param_get_dump_nl_policy,
  836. .maxattr = DEVLINK_ATTR_DEV_NAME,
  837. .flags = GENL_CMD_CAP_DUMP,
  838. },
  839. {
  840. .cmd = DEVLINK_CMD_PARAM_SET,
  841. .validate = GENL_DONT_VALIDATE_STRICT,
  842. .pre_doit = devlink_nl_pre_doit,
  843. .doit = devlink_nl_param_set_doit,
  844. .post_doit = devlink_nl_post_doit,
  845. .policy = devlink_param_set_nl_policy,
  846. .maxattr = DEVLINK_ATTR_PARAM_RESET_DEFAULT,
  847. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  848. },
  849. {
  850. .cmd = DEVLINK_CMD_REGION_GET,
  851. .validate = GENL_DONT_VALIDATE_STRICT,
  852. .pre_doit = devlink_nl_pre_doit_port_optional,
  853. .doit = devlink_nl_region_get_doit,
  854. .post_doit = devlink_nl_post_doit,
  855. .policy = devlink_region_get_do_nl_policy,
  856. .maxattr = DEVLINK_ATTR_REGION_NAME,
  857. .flags = GENL_CMD_CAP_DO,
  858. },
  859. {
  860. .cmd = DEVLINK_CMD_REGION_GET,
  861. .dumpit = devlink_nl_region_get_dumpit,
  862. .policy = devlink_region_get_dump_nl_policy,
  863. .maxattr = DEVLINK_ATTR_DEV_NAME,
  864. .flags = GENL_CMD_CAP_DUMP,
  865. },
  866. {
  867. .cmd = DEVLINK_CMD_REGION_NEW,
  868. .validate = GENL_DONT_VALIDATE_STRICT,
  869. .pre_doit = devlink_nl_pre_doit_port_optional,
  870. .doit = devlink_nl_region_new_doit,
  871. .post_doit = devlink_nl_post_doit,
  872. .policy = devlink_region_new_nl_policy,
  873. .maxattr = DEVLINK_ATTR_REGION_SNAPSHOT_ID,
  874. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  875. },
  876. {
  877. .cmd = DEVLINK_CMD_REGION_DEL,
  878. .validate = GENL_DONT_VALIDATE_STRICT,
  879. .pre_doit = devlink_nl_pre_doit_port_optional,
  880. .doit = devlink_nl_region_del_doit,
  881. .post_doit = devlink_nl_post_doit,
  882. .policy = devlink_region_del_nl_policy,
  883. .maxattr = DEVLINK_ATTR_REGION_SNAPSHOT_ID,
  884. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  885. },
  886. {
  887. .cmd = DEVLINK_CMD_REGION_READ,
  888. .validate = GENL_DONT_VALIDATE_DUMP_STRICT,
  889. .dumpit = devlink_nl_region_read_dumpit,
  890. .policy = devlink_region_read_nl_policy,
  891. .maxattr = DEVLINK_ATTR_REGION_DIRECT,
  892. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
  893. },
  894. {
  895. .cmd = DEVLINK_CMD_PORT_PARAM_GET,
  896. .validate = GENL_DONT_VALIDATE_STRICT,
  897. .pre_doit = devlink_nl_pre_doit_port,
  898. .doit = devlink_nl_port_param_get_doit,
  899. .post_doit = devlink_nl_post_doit,
  900. .policy = devlink_port_param_get_nl_policy,
  901. .maxattr = DEVLINK_ATTR_PORT_INDEX,
  902. .flags = GENL_CMD_CAP_DO,
  903. },
  904. {
  905. .cmd = DEVLINK_CMD_PORT_PARAM_GET,
  906. .validate = GENL_DONT_VALIDATE_DUMP_STRICT,
  907. .dumpit = devlink_nl_port_param_get_dumpit,
  908. .flags = GENL_CMD_CAP_DUMP,
  909. },
  910. {
  911. .cmd = DEVLINK_CMD_PORT_PARAM_SET,
  912. .validate = GENL_DONT_VALIDATE_STRICT,
  913. .pre_doit = devlink_nl_pre_doit_port,
  914. .doit = devlink_nl_port_param_set_doit,
  915. .post_doit = devlink_nl_post_doit,
  916. .policy = devlink_port_param_set_nl_policy,
  917. .maxattr = DEVLINK_ATTR_PORT_INDEX,
  918. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  919. },
  920. {
  921. .cmd = DEVLINK_CMD_INFO_GET,
  922. .validate = GENL_DONT_VALIDATE_STRICT,
  923. .pre_doit = devlink_nl_pre_doit,
  924. .doit = devlink_nl_info_get_doit,
  925. .post_doit = devlink_nl_post_doit,
  926. .policy = devlink_info_get_nl_policy,
  927. .maxattr = DEVLINK_ATTR_DEV_NAME,
  928. .flags = GENL_CMD_CAP_DO,
  929. },
  930. {
  931. .cmd = DEVLINK_CMD_INFO_GET,
  932. .validate = GENL_DONT_VALIDATE_DUMP,
  933. .dumpit = devlink_nl_info_get_dumpit,
  934. .flags = GENL_CMD_CAP_DUMP,
  935. },
  936. {
  937. .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
  938. .validate = GENL_DONT_VALIDATE_STRICT,
  939. .pre_doit = devlink_nl_pre_doit_port_optional,
  940. .doit = devlink_nl_health_reporter_get_doit,
  941. .post_doit = devlink_nl_post_doit,
  942. .policy = devlink_health_reporter_get_do_nl_policy,
  943. .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
  944. .flags = GENL_CMD_CAP_DO,
  945. },
  946. {
  947. .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
  948. .dumpit = devlink_nl_health_reporter_get_dumpit,
  949. .policy = devlink_health_reporter_get_dump_nl_policy,
  950. .maxattr = DEVLINK_ATTR_PORT_INDEX,
  951. .flags = GENL_CMD_CAP_DUMP,
  952. },
  953. {
  954. .cmd = DEVLINK_CMD_HEALTH_REPORTER_SET,
  955. .validate = GENL_DONT_VALIDATE_STRICT,
  956. .pre_doit = devlink_nl_pre_doit_port_optional,
  957. .doit = devlink_nl_health_reporter_set_doit,
  958. .post_doit = devlink_nl_post_doit,
  959. .policy = devlink_health_reporter_set_nl_policy,
  960. .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_BURST_PERIOD,
  961. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  962. },
  963. {
  964. .cmd = DEVLINK_CMD_HEALTH_REPORTER_RECOVER,
  965. .validate = GENL_DONT_VALIDATE_STRICT,
  966. .pre_doit = devlink_nl_pre_doit_port_optional,
  967. .doit = devlink_nl_health_reporter_recover_doit,
  968. .post_doit = devlink_nl_post_doit,
  969. .policy = devlink_health_reporter_recover_nl_policy,
  970. .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
  971. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  972. },
  973. {
  974. .cmd = DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE,
  975. .validate = GENL_DONT_VALIDATE_STRICT,
  976. .pre_doit = devlink_nl_pre_doit_port_optional,
  977. .doit = devlink_nl_health_reporter_diagnose_doit,
  978. .post_doit = devlink_nl_post_doit,
  979. .policy = devlink_health_reporter_diagnose_nl_policy,
  980. .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
  981. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  982. },
  983. {
  984. .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET,
  985. .validate = GENL_DONT_VALIDATE_DUMP_STRICT,
  986. .dumpit = devlink_nl_health_reporter_dump_get_dumpit,
  987. .policy = devlink_health_reporter_dump_get_nl_policy,
  988. .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
  989. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
  990. },
  991. {
  992. .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
  993. .validate = GENL_DONT_VALIDATE_STRICT,
  994. .pre_doit = devlink_nl_pre_doit_port_optional,
  995. .doit = devlink_nl_health_reporter_dump_clear_doit,
  996. .post_doit = devlink_nl_post_doit,
  997. .policy = devlink_health_reporter_dump_clear_nl_policy,
  998. .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
  999. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1000. },
  1001. {
  1002. .cmd = DEVLINK_CMD_FLASH_UPDATE,
  1003. .validate = GENL_DONT_VALIDATE_STRICT,
  1004. .pre_doit = devlink_nl_pre_doit,
  1005. .doit = devlink_nl_flash_update_doit,
  1006. .post_doit = devlink_nl_post_doit,
  1007. .policy = devlink_flash_update_nl_policy,
  1008. .maxattr = DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK,
  1009. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1010. },
  1011. {
  1012. .cmd = DEVLINK_CMD_TRAP_GET,
  1013. .validate = GENL_DONT_VALIDATE_STRICT,
  1014. .pre_doit = devlink_nl_pre_doit,
  1015. .doit = devlink_nl_trap_get_doit,
  1016. .post_doit = devlink_nl_post_doit,
  1017. .policy = devlink_trap_get_do_nl_policy,
  1018. .maxattr = DEVLINK_ATTR_TRAP_NAME,
  1019. .flags = GENL_CMD_CAP_DO,
  1020. },
  1021. {
  1022. .cmd = DEVLINK_CMD_TRAP_GET,
  1023. .dumpit = devlink_nl_trap_get_dumpit,
  1024. .policy = devlink_trap_get_dump_nl_policy,
  1025. .maxattr = DEVLINK_ATTR_DEV_NAME,
  1026. .flags = GENL_CMD_CAP_DUMP,
  1027. },
  1028. {
  1029. .cmd = DEVLINK_CMD_TRAP_SET,
  1030. .validate = GENL_DONT_VALIDATE_STRICT,
  1031. .pre_doit = devlink_nl_pre_doit,
  1032. .doit = devlink_nl_trap_set_doit,
  1033. .post_doit = devlink_nl_post_doit,
  1034. .policy = devlink_trap_set_nl_policy,
  1035. .maxattr = DEVLINK_ATTR_TRAP_ACTION,
  1036. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1037. },
  1038. {
  1039. .cmd = DEVLINK_CMD_TRAP_GROUP_GET,
  1040. .validate = GENL_DONT_VALIDATE_STRICT,
  1041. .pre_doit = devlink_nl_pre_doit,
  1042. .doit = devlink_nl_trap_group_get_doit,
  1043. .post_doit = devlink_nl_post_doit,
  1044. .policy = devlink_trap_group_get_do_nl_policy,
  1045. .maxattr = DEVLINK_ATTR_TRAP_GROUP_NAME,
  1046. .flags = GENL_CMD_CAP_DO,
  1047. },
  1048. {
  1049. .cmd = DEVLINK_CMD_TRAP_GROUP_GET,
  1050. .dumpit = devlink_nl_trap_group_get_dumpit,
  1051. .policy = devlink_trap_group_get_dump_nl_policy,
  1052. .maxattr = DEVLINK_ATTR_DEV_NAME,
  1053. .flags = GENL_CMD_CAP_DUMP,
  1054. },
  1055. {
  1056. .cmd = DEVLINK_CMD_TRAP_GROUP_SET,
  1057. .validate = GENL_DONT_VALIDATE_STRICT,
  1058. .pre_doit = devlink_nl_pre_doit,
  1059. .doit = devlink_nl_trap_group_set_doit,
  1060. .post_doit = devlink_nl_post_doit,
  1061. .policy = devlink_trap_group_set_nl_policy,
  1062. .maxattr = DEVLINK_ATTR_TRAP_POLICER_ID,
  1063. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1064. },
  1065. {
  1066. .cmd = DEVLINK_CMD_TRAP_POLICER_GET,
  1067. .validate = GENL_DONT_VALIDATE_STRICT,
  1068. .pre_doit = devlink_nl_pre_doit,
  1069. .doit = devlink_nl_trap_policer_get_doit,
  1070. .post_doit = devlink_nl_post_doit,
  1071. .policy = devlink_trap_policer_get_do_nl_policy,
  1072. .maxattr = DEVLINK_ATTR_TRAP_POLICER_ID,
  1073. .flags = GENL_CMD_CAP_DO,
  1074. },
  1075. {
  1076. .cmd = DEVLINK_CMD_TRAP_POLICER_GET,
  1077. .dumpit = devlink_nl_trap_policer_get_dumpit,
  1078. .policy = devlink_trap_policer_get_dump_nl_policy,
  1079. .maxattr = DEVLINK_ATTR_DEV_NAME,
  1080. .flags = GENL_CMD_CAP_DUMP,
  1081. },
  1082. {
  1083. .cmd = DEVLINK_CMD_TRAP_POLICER_SET,
  1084. .validate = GENL_DONT_VALIDATE_STRICT,
  1085. .pre_doit = devlink_nl_pre_doit,
  1086. .doit = devlink_nl_trap_policer_set_doit,
  1087. .post_doit = devlink_nl_post_doit,
  1088. .policy = devlink_trap_policer_set_nl_policy,
  1089. .maxattr = DEVLINK_ATTR_TRAP_POLICER_BURST,
  1090. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1091. },
  1092. {
  1093. .cmd = DEVLINK_CMD_HEALTH_REPORTER_TEST,
  1094. .validate = GENL_DONT_VALIDATE_STRICT,
  1095. .pre_doit = devlink_nl_pre_doit_port_optional,
  1096. .doit = devlink_nl_health_reporter_test_doit,
  1097. .post_doit = devlink_nl_post_doit,
  1098. .policy = devlink_health_reporter_test_nl_policy,
  1099. .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
  1100. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1101. },
  1102. {
  1103. .cmd = DEVLINK_CMD_RATE_GET,
  1104. .validate = GENL_DONT_VALIDATE_STRICT,
  1105. .pre_doit = devlink_nl_pre_doit,
  1106. .doit = devlink_nl_rate_get_doit,
  1107. .post_doit = devlink_nl_post_doit,
  1108. .policy = devlink_rate_get_do_nl_policy,
  1109. .maxattr = DEVLINK_ATTR_RATE_NODE_NAME,
  1110. .flags = GENL_CMD_CAP_DO,
  1111. },
  1112. {
  1113. .cmd = DEVLINK_CMD_RATE_GET,
  1114. .dumpit = devlink_nl_rate_get_dumpit,
  1115. .policy = devlink_rate_get_dump_nl_policy,
  1116. .maxattr = DEVLINK_ATTR_DEV_NAME,
  1117. .flags = GENL_CMD_CAP_DUMP,
  1118. },
  1119. {
  1120. .cmd = DEVLINK_CMD_RATE_SET,
  1121. .validate = GENL_DONT_VALIDATE_STRICT,
  1122. .pre_doit = devlink_nl_pre_doit,
  1123. .doit = devlink_nl_rate_set_doit,
  1124. .post_doit = devlink_nl_post_doit,
  1125. .policy = devlink_rate_set_nl_policy,
  1126. .maxattr = DEVLINK_ATTR_RATE_TC_BWS,
  1127. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1128. },
  1129. {
  1130. .cmd = DEVLINK_CMD_RATE_NEW,
  1131. .validate = GENL_DONT_VALIDATE_STRICT,
  1132. .pre_doit = devlink_nl_pre_doit,
  1133. .doit = devlink_nl_rate_new_doit,
  1134. .post_doit = devlink_nl_post_doit,
  1135. .policy = devlink_rate_new_nl_policy,
  1136. .maxattr = DEVLINK_ATTR_RATE_TC_BWS,
  1137. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1138. },
  1139. {
  1140. .cmd = DEVLINK_CMD_RATE_DEL,
  1141. .validate = GENL_DONT_VALIDATE_STRICT,
  1142. .pre_doit = devlink_nl_pre_doit,
  1143. .doit = devlink_nl_rate_del_doit,
  1144. .post_doit = devlink_nl_post_doit,
  1145. .policy = devlink_rate_del_nl_policy,
  1146. .maxattr = DEVLINK_ATTR_RATE_NODE_NAME,
  1147. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1148. },
  1149. {
  1150. .cmd = DEVLINK_CMD_LINECARD_GET,
  1151. .validate = GENL_DONT_VALIDATE_STRICT,
  1152. .pre_doit = devlink_nl_pre_doit,
  1153. .doit = devlink_nl_linecard_get_doit,
  1154. .post_doit = devlink_nl_post_doit,
  1155. .policy = devlink_linecard_get_do_nl_policy,
  1156. .maxattr = DEVLINK_ATTR_LINECARD_INDEX,
  1157. .flags = GENL_CMD_CAP_DO,
  1158. },
  1159. {
  1160. .cmd = DEVLINK_CMD_LINECARD_GET,
  1161. .dumpit = devlink_nl_linecard_get_dumpit,
  1162. .policy = devlink_linecard_get_dump_nl_policy,
  1163. .maxattr = DEVLINK_ATTR_DEV_NAME,
  1164. .flags = GENL_CMD_CAP_DUMP,
  1165. },
  1166. {
  1167. .cmd = DEVLINK_CMD_LINECARD_SET,
  1168. .validate = GENL_DONT_VALIDATE_STRICT,
  1169. .pre_doit = devlink_nl_pre_doit,
  1170. .doit = devlink_nl_linecard_set_doit,
  1171. .post_doit = devlink_nl_post_doit,
  1172. .policy = devlink_linecard_set_nl_policy,
  1173. .maxattr = DEVLINK_ATTR_LINECARD_TYPE,
  1174. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1175. },
  1176. {
  1177. .cmd = DEVLINK_CMD_SELFTESTS_GET,
  1178. .validate = GENL_DONT_VALIDATE_STRICT,
  1179. .pre_doit = devlink_nl_pre_doit,
  1180. .doit = devlink_nl_selftests_get_doit,
  1181. .post_doit = devlink_nl_post_doit,
  1182. .policy = devlink_selftests_get_nl_policy,
  1183. .maxattr = DEVLINK_ATTR_DEV_NAME,
  1184. .flags = GENL_CMD_CAP_DO,
  1185. },
  1186. {
  1187. .cmd = DEVLINK_CMD_SELFTESTS_GET,
  1188. .validate = GENL_DONT_VALIDATE_DUMP,
  1189. .dumpit = devlink_nl_selftests_get_dumpit,
  1190. .flags = GENL_CMD_CAP_DUMP,
  1191. },
  1192. {
  1193. .cmd = DEVLINK_CMD_SELFTESTS_RUN,
  1194. .validate = GENL_DONT_VALIDATE_STRICT,
  1195. .pre_doit = devlink_nl_pre_doit,
  1196. .doit = devlink_nl_selftests_run_doit,
  1197. .post_doit = devlink_nl_post_doit,
  1198. .policy = devlink_selftests_run_nl_policy,
  1199. .maxattr = DEVLINK_ATTR_SELFTESTS,
  1200. .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
  1201. },
  1202. {
  1203. .cmd = DEVLINK_CMD_NOTIFY_FILTER_SET,
  1204. .doit = devlink_nl_notify_filter_set_doit,
  1205. .policy = devlink_notify_filter_set_nl_policy,
  1206. .maxattr = DEVLINK_ATTR_PORT_INDEX,
  1207. .flags = GENL_CMD_CAP_DO,
  1208. },
  1209. };