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