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 6008f4b591SOr Gerlitz DEVLINK_CMD_ESWITCH_MODE_GET, 6108f4b591SOr Gerlitz DEVLINK_CMD_ESWITCH_MODE_SET, 62bfcd3a46SJiri Pirko /* add new commands above here */ 63bfcd3a46SJiri Pirko 64bfcd3a46SJiri Pirko __DEVLINK_CMD_MAX, 65bfcd3a46SJiri Pirko DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1 66bfcd3a46SJiri Pirko }; 67bfcd3a46SJiri Pirko 68bfcd3a46SJiri Pirko enum devlink_port_type { 69bfcd3a46SJiri Pirko DEVLINK_PORT_TYPE_NOTSET, 70bfcd3a46SJiri Pirko DEVLINK_PORT_TYPE_AUTO, 71bfcd3a46SJiri Pirko DEVLINK_PORT_TYPE_ETH, 72bfcd3a46SJiri Pirko DEVLINK_PORT_TYPE_IB, 73bfcd3a46SJiri Pirko }; 74bfcd3a46SJiri Pirko 75bf797471SJiri Pirko enum devlink_sb_pool_type { 76bf797471SJiri Pirko DEVLINK_SB_POOL_TYPE_INGRESS, 77bf797471SJiri Pirko DEVLINK_SB_POOL_TYPE_EGRESS, 78bf797471SJiri Pirko }; 79bf797471SJiri Pirko 80bf797471SJiri Pirko /* static threshold - limiting the maximum number of bytes. 81bf797471SJiri Pirko * dynamic threshold - limiting the maximum number of bytes 82bf797471SJiri Pirko * based on the currently available free space in the shared buffer pool. 83bf797471SJiri Pirko * In this mode, the maximum quota is calculated based 84bf797471SJiri Pirko * on the following formula: 85bf797471SJiri Pirko * max_quota = alpha / (1 + alpha) * Free_Buffer 86bf797471SJiri Pirko * While Free_Buffer is the amount of none-occupied buffer associated to 87bf797471SJiri Pirko * the relevant pool. 88bf797471SJiri Pirko * The value range which can be passed is 0-20 and serves 89bf797471SJiri Pirko * for computation of alpha by following formula: 90bf797471SJiri Pirko * alpha = 2 ^ (passed_value - 10) 91bf797471SJiri Pirko */ 92bf797471SJiri Pirko 93bf797471SJiri Pirko enum devlink_sb_threshold_type { 94bf797471SJiri Pirko DEVLINK_SB_THRESHOLD_TYPE_STATIC, 95bf797471SJiri Pirko DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC, 96bf797471SJiri Pirko }; 97bf797471SJiri Pirko 98bf797471SJiri Pirko #define DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX 20 99bf797471SJiri Pirko 10008f4b591SOr Gerlitz enum devlink_eswitch_mode { 10108f4b591SOr Gerlitz DEVLINK_ESWITCH_MODE_LEGACY, 10208f4b591SOr Gerlitz DEVLINK_ESWITCH_MODE_SWITCHDEV, 10308f4b591SOr Gerlitz }; 10408f4b591SOr Gerlitz 105*59bfde01SRoi Dayan enum devlink_eswitch_inline_mode { 106*59bfde01SRoi Dayan DEVLINK_ESWITCH_INLINE_MODE_NONE, 107*59bfde01SRoi Dayan DEVLINK_ESWITCH_INLINE_MODE_LINK, 108*59bfde01SRoi Dayan DEVLINK_ESWITCH_INLINE_MODE_NETWORK, 109*59bfde01SRoi Dayan DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT, 110*59bfde01SRoi Dayan }; 111*59bfde01SRoi Dayan 112bfcd3a46SJiri Pirko enum devlink_attr { 113bfcd3a46SJiri Pirko /* don't change the order or add anything between, this is ABI! */ 114bfcd3a46SJiri Pirko DEVLINK_ATTR_UNSPEC, 115bfcd3a46SJiri Pirko 116bfcd3a46SJiri Pirko /* bus name + dev name together are a handle for devlink entity */ 117bfcd3a46SJiri Pirko DEVLINK_ATTR_BUS_NAME, /* string */ 118bfcd3a46SJiri Pirko DEVLINK_ATTR_DEV_NAME, /* string */ 119bfcd3a46SJiri Pirko 120bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_INDEX, /* u32 */ 121bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_TYPE, /* u16 */ 122bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_DESIRED_TYPE, /* u16 */ 123bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_NETDEV_IFINDEX, /* u32 */ 124bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_NETDEV_NAME, /* string */ 125bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_IBDEV_NAME, /* string */ 126bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_SPLIT_COUNT, /* u32 */ 127bfcd3a46SJiri Pirko DEVLINK_ATTR_PORT_SPLIT_GROUP, /* u32 */ 128bf797471SJiri Pirko DEVLINK_ATTR_SB_INDEX, /* u32 */ 129bf797471SJiri Pirko DEVLINK_ATTR_SB_SIZE, /* u32 */ 130bf797471SJiri Pirko DEVLINK_ATTR_SB_INGRESS_POOL_COUNT, /* u16 */ 131bf797471SJiri Pirko DEVLINK_ATTR_SB_EGRESS_POOL_COUNT, /* u16 */ 132bf797471SJiri Pirko DEVLINK_ATTR_SB_INGRESS_TC_COUNT, /* u16 */ 133bf797471SJiri Pirko DEVLINK_ATTR_SB_EGRESS_TC_COUNT, /* u16 */ 134bf797471SJiri Pirko DEVLINK_ATTR_SB_POOL_INDEX, /* u16 */ 135bf797471SJiri Pirko DEVLINK_ATTR_SB_POOL_TYPE, /* u8 */ 136bf797471SJiri Pirko DEVLINK_ATTR_SB_POOL_SIZE, /* u32 */ 137bf797471SJiri Pirko DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE, /* u8 */ 138bf797471SJiri Pirko DEVLINK_ATTR_SB_THRESHOLD, /* u32 */ 139bf797471SJiri Pirko DEVLINK_ATTR_SB_TC_INDEX, /* u16 */ 140df38dafdSJiri Pirko DEVLINK_ATTR_SB_OCC_CUR, /* u32 */ 141df38dafdSJiri Pirko DEVLINK_ATTR_SB_OCC_MAX, /* u32 */ 14208f4b591SOr Gerlitz DEVLINK_ATTR_ESWITCH_MODE, /* u16 */ 143*59bfde01SRoi Dayan DEVLINK_ATTR_ESWITCH_INLINE_MODE, /* u8 */ 144bfcd3a46SJiri Pirko 145bfcd3a46SJiri Pirko /* add new attributes above here, update the policy in devlink.c */ 146bfcd3a46SJiri Pirko 147bfcd3a46SJiri Pirko __DEVLINK_ATTR_MAX, 148bfcd3a46SJiri Pirko DEVLINK_ATTR_MAX = __DEVLINK_ATTR_MAX - 1 149bfcd3a46SJiri Pirko }; 150bfcd3a46SJiri Pirko 151bfcd3a46SJiri Pirko #endif /* _UAPI_LINUX_DEVLINK_H_ */ 152