netlink_gen.c 47 KB

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