/** @file * @brief Various priority to traffic class mappings * * This is not to be included by the application. */ /* * Copyright (c) 2018 Intel Corporation. * * SPDX-License-Identifier: Apache-2.0 */ #ifndef __TC_MAPPING_H #define __TC_MAPPING_H #include /* All the maps below use priorities and indexes, below is the list of them * according to 802.1Q - table I-2. * * Priority Acronym Traffic types * 1 (lowest) BK Background * 0 (default) BE Best effort * 2 EE Excellent effort * 3 CA Critical applications * 4 VI Video, < 100 ms latency and jitter * 5 VO Voice, < 10 ms latency and jitter * 6 IC Internetwork control * 7 (highest) NC Network control */ /* Helper macros used to generate the map to use */ #define PRIORITY2TC_GEN_INNER(TYPE, COUNT) priority2tc_ ## TYPE ## _ ## COUNT #define PRIORITY2TC_GEN(TYPE, COUNT) PRIORITY2TC_GEN_INNER(TYPE, COUNT) #if defined(CONFIG_NET_TC_MAPPING_STRICT) && (NET_TC_COUNT > 0) /* This is the recommended priority to traffic class mapping for * implementations that do not support the credit-based shaper transmission * selection algorithm. * Ref: 802.1Q - chapter 8.6.6 - table 8-4 */ #if NET_TC_TX_COUNT == 1 || NET_TC_RX_COUNT == 1 static const uint8_t priority2tc_strict_1[] = {0, 0, 0, 0, 0, 0, 0, 0}; #endif #if NET_TC_TX_COUNT == 2 || NET_TC_RX_COUNT == 2 static const uint8_t priority2tc_strict_2[] = {0, 0, 0, 0, 1, 1, 1, 1}; #endif #if NET_TC_TX_COUNT == 3 || NET_TC_RX_COUNT == 3 static const uint8_t priority2tc_strict_3[] = {0, 0, 0, 0, 1, 1, 2, 2}; #endif #if NET_TC_TX_COUNT == 4 || NET_TC_RX_COUNT == 4 static const uint8_t priority2tc_strict_4[] = {0, 0, 1, 1, 2, 2, 3, 3}; #endif #if NET_TC_TX_COUNT == 5 || NET_TC_RX_COUNT == 5 static const uint8_t priority2tc_strict_5[] = {0, 0, 1, 1, 2, 2, 3, 4}; #endif #if NET_TC_TX_COUNT == 6 || NET_TC_RX_COUNT == 6 static const uint8_t priority2tc_strict_6[] = {1, 0, 2, 2, 3, 3, 4, 5}; #endif #if NET_TC_TX_COUNT == 7 || NET_TC_RX_COUNT == 7 static const uint8_t priority2tc_strict_7[] = {1, 0, 2, 3, 4, 4, 5, 6}; #endif #if NET_TC_TX_COUNT == 8 || NET_TC_RX_COUNT == 8 static const uint8_t priority2tc_strict_8[] = {1, 0, 2, 3, 4, 5, 6, 7}; #endif #if NET_TC_TX_COUNT > 0 static const uint8_t *tx_prio2tc_map = PRIORITY2TC_GEN(strict, NET_TC_TX_COUNT); #endif #if NET_TC_RX_COUNT > 0 static const uint8_t *rx_prio2tc_map = PRIORITY2TC_GEN(strict, NET_TC_RX_COUNT); #endif #elif defined(CONFIG_NET_TC_MAPPING_SR_CLASS_A_AND_B) && (NET_TC_COUNT > 0) /* This is the recommended priority to traffic class mapping for a system that * supports SR (Stream Reservation) class A and SR class B. * Ref: 802.1Q - chapter 34.5 - table 34-1 */ #if NET_TC_TX_COUNT == 2 || NET_TC_RX_COUNT == 2 static const uint8_t priority2tc_sr_ab_2[] = {0, 0, 1, 1, 0, 0, 0, 0}; #endif #if NET_TC_TX_COUNT == 3 || NET_TC_RX_COUNT == 3 static const uint8_t priority2tc_sr_ab_3[] = {0, 0, 1, 2, 0, 0, 0, 0}; #endif #if NET_TC_TX_COUNT == 4 || NET_TC_RX_COUNT == 4 static const uint8_t priority2tc_sr_ab_4[] = {0, 0, 2, 3, 1, 1, 1, 1}; #endif #if NET_TC_TX_COUNT == 5 || NET_TC_RX_COUNT == 5 static const uint8_t priority2tc_sr_ab_5[] = {0, 0, 3, 4, 1, 1, 2, 2}; #endif #if NET_TC_TX_COUNT == 6 || NET_TC_RX_COUNT == 6 static const uint8_t priority2tc_sr_ab_6[] = {0, 0, 4, 5, 1, 1, 2, 3}; #endif #if NET_TC_TX_COUNT == 7 || NET_TC_RX_COUNT == 7 static const uint8_t priority2tc_sr_ab_7[] = {0, 0, 5, 6, 1, 2, 3, 4}; #endif #if NET_TC_TX_COUNT == 8 || NET_TC_RX_COUNT == 8 static const uint8_t priority2tc_sr_ab_8[] = {1, 0, 6, 7, 2, 3, 4, 5}; #endif #if NET_TC_TX_COUNT > 0 static const uint8_t *tx_prio2tc_map = PRIORITY2TC_GEN(sr_ab, NET_TC_TX_COUNT); #endif #if NET_TC_RX_COUNT > 0 static const uint8_t *rx_prio2tc_map = PRIORITY2TC_GEN(sr_ab, NET_TC_RX_COUNT); #endif #elif defined(CONFIG_NET_TC_MAPPING_SR_CLASS_B_ONLY) && (NET_TC_COUNT > 0) /* This is the recommended priority to traffic class mapping for a system that * supports SR (Stream Reservation) class B only. * Ref: 802.1Q - chapter 34.5 - table 34-2 */ #if NET_TC_TX_COUNT == 2 || NET_TC_RX_COUNT == 2 static const uint8_t priority2tc_sr_b_2[] = {0, 0, 1, 0, 0, 0, 0, 0}; #endif #if NET_TC_TX_COUNT == 3 || NET_TC_RX_COUNT == 3 static const uint8_t priority2tc_sr_b_3[] = {0, 0, 2, 0, 1, 1, 1, 1}; #endif #if NET_TC_TX_COUNT == 4 || NET_TC_RX_COUNT == 4 static const uint8_t priority2tc_sr_b_4[] = {0, 0, 3, 0, 1, 1, 2, 2}; #endif #if NET_TC_TX_COUNT == 5 || NET_TC_RX_COUNT == 5 static const uint8_t priority2tc_sr_b_5[] = {0, 0, 4, 1, 2, 2, 3, 3}; #endif #if NET_TC_TX_COUNT == 6 || NET_TC_RX_COUNT == 6 static const uint8_t priority2tc_sr_b_6[] = {0, 0, 5, 1, 2, 2, 3, 4}; #endif #if NET_TC_TX_COUNT == 7 || NET_TC_RX_COUNT == 7 static const uint8_t priority2tc_sr_b_7[] = {1, 0, 6, 2, 3, 3, 4, 5}; #endif #if NET_TC_TX_COUNT == 8 || NET_TC_RX_COUNT == 8 static const uint8_t priority2tc_sr_b_8[] = {1, 0, 7, 2, 3, 4, 5, 6}; #endif #if NET_TC_TX_COUNT > 0 static const uint8_t *tx_prio2tc_map = PRIORITY2TC_GEN(sr_b, NET_TC_TX_COUNT); #endif #if NET_TC_RX_COUNT > 0 static const uint8_t *rx_prio2tc_map = PRIORITY2TC_GEN(sr_b, NET_TC_RX_COUNT); #endif #endif #endif /* __TC_MAPPING_H */