1bfcd3a46SJiri Pirko /* 2bfcd3a46SJiri Pirko * include/uapi/linux/devlink.h - Network physical device Netlink interface 3bfcd3a46SJiri Pirko * Copyright (c) 2016 Mellanox Technologies. All rights reserved. 4bfcd3a46SJiri Pirko * Copyright (c) 2016 Jiri Pirko <[email protected]> 5bfcd3a46SJiri Pirko * 6bfcd3a46SJiri Pirko * This program is free software; you can redistribute it and/or modify 7bfcd3a46SJiri Pirko * it under the terms of the GNU General Public License as published by 8bfcd3a46SJiri Pirko * the Free Software Foundation; either version 2 of the License, or 9bfcd3a46SJiri Pirko * (at your option) any later version. 10bfcd3a46SJiri Pirko */ 11bfcd3a46SJiri Pirko 12bfcd3a46SJiri Pirko #ifndef _UAPI_LINUX_DEVLINK_H_ 13bfcd3a46SJiri Pirko #define _UAPI_LINUX_DEVLINK_H_ 14bfcd3a46SJiri Pirko 15bfcd3a46SJiri Pirko #define DEVLINK_GENL_NAME "devlink" 16bfcd3a46SJiri Pirko #define DEVLINK_GENL_VERSION 0x1 17bfcd3a46SJiri Pirko #define DEVLINK_GENL_MCGRP_CONFIG_NAME "config" 18bfcd3a46SJiri Pirko 19bfcd3a46SJiri Pirko enum devlink_command { 20bfcd3a46SJiri Pirko /* don't change the order or add anything between, this is ABI! */ 21bfcd3a46SJiri Pirko DEVLINK_CMD_UNSPEC, 22bfcd3a46SJiri Pirko 23bfcd3a46SJiri Pirko DEVLINK_CMD_GET, /* can dump */ 24bfcd3a46SJiri Pirko DEVLINK_CMD_SET, 25bfcd3a46SJiri Pirko DEVLINK_CMD_NEW, 26bfcd3a46SJiri Pirko DEVLINK_CMD_DEL, 27bfcd3a46SJiri Pirko 28bfcd3a46SJiri Pirko DEVLINK_CMD_PORT_GET, /* can dump */ 29bfcd3a46SJiri Pirko DEVLINK_CMD_PORT_SET, 30bfcd3a46SJiri Pirko DEVLINK_CMD_PORT_NEW, 31bfcd3a46SJiri Pirko DEVLINK_CMD_PORT_DEL, 32bfcd3a46SJiri Pirko 33bfcd3a46SJiri Pirko DEVLINK_CMD_PORT_SPLIT, 34bfcd3a46SJiri Pirko DEVLINK_CMD_PORT_UNSPLIT, 35bfcd3a46SJiri Pirko 36bf797471SJiri Pirko DEVLINK_CMD_SB_GET, /* can dump */ 37bf797471SJiri Pirko DEVLINK_CMD_SB_SET, 38bf797471SJiri Pirko DEVLINK_CMD_SB_NEW, 39bf797471SJiri Pirko DEVLINK_CMD_SB_DEL, 40bf797471SJiri Pirko 41bf797471SJiri Pirko DEVLINK_CMD_SB_POOL_GET, /* can dump */ 42bf797471SJiri Pirko DEVLINK_CMD_SB_POOL_SET, 43bf797471SJiri Pirko DEVLINK_CMD_SB_POOL_NEW, 44bf797471SJiri Pirko DEVLINK_CMD_SB_POOL_DEL, 45bf797471SJiri Pirko 46bf797471SJiri Pirko DEVLINK_CMD_SB_PORT_POOL_GET, /* can dump */ 47bf797471SJiri Pirko DEVLINK_CMD_SB_PORT_POOL_SET, 48bf797471SJiri Pirko DEVLINK_CMD_SB_PORT_POOL_NEW, 49bf797471SJiri Pirko DEVLINK_CMD_SB_PORT_POOL_DEL, 50bf797471SJiri Pirko 51bf797471SJiri Pirko DEVLINK_CMD_SB_TC_POOL_BIND_GET, /* can dump */ 52bf797471SJiri Pirko DEVLINK_CMD_SB_TC_POOL_BIND_SET, 53bf797471SJiri Pirko DEVLINK_CMD_SB_TC_POOL_BIND_NEW, 54bf797471SJiri Pirko DEVLINK_CMD_SB_TC_POOL_BIND_DEL, 55bf797471SJiri Pirko 56df38dafdSJiri Pirko /* Shared buffer occupancy monitoring commands */ 57df38dafdSJiri Pirko DEVLINK_CMD_SB_OCC_SNAPSHOT, 58df38dafdSJiri Pirko DEVLINK_CMD_SB_OCC_MAX_CLEAR, 59df38dafdSJiri Pirko 60*adf200f3SJiri Pirko DEVLINK_CMD_ESWITCH_GET, 61*adf200f3SJiri Pirko #define DEVLINK_CMD_ESWITCH_MODE_GET /* obsolete, never use this! */ \ 62*adf200f3SJiri Pirko DEVLINK_CMD_ESWITCH_GET 63*adf200f3SJiri Pirko 64*adf200f3SJiri Pirko DEVLINK_CMD_ESWITCH_SET, 65*adf200f3SJiri Pirko #define DEVLINK_CMD_ESWITCH_MODE_SET /* obsolete, never use this! */ \ 66*adf200f3SJiri Pirko DEVLINK_CMD_ESWITCH_SET 67*adf200f3SJiri Pirko 68bfcd3a46SJiri Pirko /* add new commands above here */ 69bfcd3a46SJiri Pirko 70bfcd3a46SJiri Pirko __DEVLINK_CMD_MAX, 71bfcd3a46SJiri Pirko DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1 72bfcd3a46SJiri Pirko }; 73bfcd3a46SJiri Pirko 74bfcd3a46SJiri Pirko enum devlink_port_type { 75bfcd3a46SJiri Pirko DEVLINK_PORT_TYPE_NOTSET, 76bfcd3a46SJiri Pirko DEVLINK_PORT_TYPE_AUTO, 77bfcd3a46SJiri Pirko DEVLINK_PORT_TYPE_ETH, 78bfcd3a46SJiri Pirko DEVLINK_PORT_TYPE_IB, 79bfcd3a46SJiri Pirko }; 80bfcd3a46SJiri Pirko 81bf797471SJiri Pirko enum devlink_sb_pool_type { 82bf797471SJiri Pirko DEVLINK_SB_POOL_TYPE_INGRESS, 83bf797471SJiri Pirko DEVLINK_SB_POOL_TYPE_EGRESS, 84bf797471SJiri Pirko }; 85bf797471SJiri Pirko 86bf797471SJiri Pirko /* static threshold - limiting the maximum number of bytes. 87bf797471SJiri Pirko * dynamic threshold - limiting the maximum number of bytes 88bf797471SJiri Pirko * based on the currently available free space in the shared buffer pool. 89bf797471SJiri Pirko * In this mode, the maximum quota is calculated based 90bf797471SJiri Pirko * on the following formula: 91bf797471SJiri Pirko * max_quota = alpha / (1 + alpha) * Free_Buffer 92bf797471SJiri Pirko * While Free_Buffer is the amount of none-occupied buffer associated to 93bf797471SJiri Pirko * the relevant pool. 94bf797471SJiri Pirko * The value range which can be passed is 0-20 and serves 95bf797471SJiri Pirko * for computation of alpha by following formula: 96bf797471SJiri Pirko * alpha = 2 ^ (passed_value - 10) 97bf797471SJiri Pirko */ 98bf797471SJiri Pirko 99bf797471SJiri Pirko enum devlink_sb_threshold_type { 100bf797471SJiri Pirko DEVLINK_SB_THRESHOLD_TYPE_STATIC, 101bf797471SJiri Pirko DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC, 102bf797471SJiri Pirko }; 103bf797471SJiri Pirko 104bf797471SJiri Pirko #define DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX 20 105bf797471SJiri Pirko 10608f4b591SOr Gerlitz enum devlink_eswitch_mode { 10708f4b591SOr Gerlitz DEVLINK_ESWITCH_MODE_LEGACY, 10808f4b591SOr Gerlitz DEVLINK_ESWITCH_MODE_SWITCHDEV, 10908f4b591SOr Gerlitz }; 11008f4b591SOr Gerlitz 11159bfde01SRoi Dayan enum devlink_eswitch_inline_mode { 11259bfde01SRoi Dayan DEVLINK_ESWITCH_INLINE_MODE_NONE, 11359bfde01SRoi Dayan DEVLINK_ESWITCH_INLINE_MODE_LINK, 11459bfde01SRoi Dayan DEVLINK_ESWITCH_INLINE_MODE_NETWORK, 11559bfde01SRoi Dayan DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT, 11659bfde01SRoi Dayan }; 11759bfde01SRoi Dayan 118bfcd3a46SJiri Pirko enum devlink_attr { 119bfcd3a46SJiri Pirko /* don't change the order or add anything between, this is ABI! */ 120bfcd3a46SJiri Pirko DEVLINK_ATTR_UNSPEC, 121bfcd3a46SJiri Pirko 122bfcd3a46SJiri Pirko /* bus name + dev name together are a handle for devlink entity */ 123bfcd3a46SJiri Pirko DEVLINK_ATTR_BUS_NAME, /* string */ 124bfcd3a46SJiri Pirko DEVLINK_ATTR_DEV_NAME, /* string */ 125bfcd3a46SJiri Pirko 126bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_INDEX, /* u32 */ 127bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_TYPE, /* u16 */ 128bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_DESIRED_TYPE, /* u16 */ 129bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_NETDEV_IFINDEX, /* u32 */ 130bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_NETDEV_NAME, /* string */ 131bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_IBDEV_NAME, /* string */ 132bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_SPLIT_COUNT, /* u32 */ 133bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_SPLIT_GROUP, /* u32 */ 134bf797471SJiri Pirko DEVLINK_ATTR_SB_INDEX, /* u32 */ 135bf797471SJiri Pirko DEVLINK_ATTR_SB_SIZE, /* u32 */ 136bf797471SJiri Pirko DEVLINK_ATTR_SB_INGRESS_POOL_COUNT, /* u16 */ 137bf797471SJiri Pirko DEVLINK_ATTR_SB_EGRESS_POOL_COUNT, /* u16 */ 138bf797471SJiri Pirko DEVLINK_ATTR_SB_INGRESS_TC_COUNT, /* u16 */ 139bf797471SJiri Pirko DEVLINK_ATTR_SB_EGRESS_TC_COUNT, /* u16 */ 140bf797471SJiri Pirko DEVLINK_ATTR_SB_POOL_INDEX, /* u16 */ 141bf797471SJiri Pirko DEVLINK_ATTR_SB_POOL_TYPE, /* u8 */ 142bf797471SJiri Pirko DEVLINK_ATTR_SB_POOL_SIZE, /* u32 */ 143bf797471SJiri Pirko DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE, /* u8 */ 144bf797471SJiri Pirko DEVLINK_ATTR_SB_THRESHOLD, /* u32 */ 145bf797471SJiri Pirko DEVLINK_ATTR_SB_TC_INDEX, /* u16 */ 146df38dafdSJiri Pirko DEVLINK_ATTR_SB_OCC_CUR, /* u32 */ 147df38dafdSJiri Pirko DEVLINK_ATTR_SB_OCC_MAX, /* u32 */ 14808f4b591SOr Gerlitz DEVLINK_ATTR_ESWITCH_MODE, /* u16 */ 14959bfde01SRoi Dayan DEVLINK_ATTR_ESWITCH_INLINE_MODE, /* u8 */ 150bfcd3a46SJiri Pirko 151bfcd3a46SJiri Pirko /* add new attributes above here, update the policy in devlink.c */ 152bfcd3a46SJiri Pirko 153bfcd3a46SJiri Pirko __DEVLINK_ATTR_MAX, 154bfcd3a46SJiri Pirko DEVLINK_ATTR_MAX = __DEVLINK_ATTR_MAX - 1 155bfcd3a46SJiri Pirko }; 156bfcd3a46SJiri Pirko 157bfcd3a46SJiri Pirko #endif /* _UAPI_LINUX_DEVLINK_H_ */ 158