[PATCH net-next v1 4/8] net: ieee8021q: add tt_to_pcp()
flat view
COOLING4d
From: Oleksij Rempel <o.rempel@pengutronix.de>
Date: 2026-10-02 11:58:54
Also in:
lkml
Subsystem:
networking [general], the rest · Maintainers:
"David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds
Add ieee8021q_tt_to_pcp(), the inverse of ieee8021q_pcp_to_tt(): it encodes an 802.1Q traffic type back to its Priority Code Point, and completes the pcp/tt helper family. A driver that reseeds its PCP classifier through ieee8021q_pcp_to_tt() stores traffic types in the hardware tables, while the dcbnl priority ops exchange 802.1p priorities across the DSA boundary. Reading such a table back therefore needs the reverse mapping to restore the 802.1p value, which no existing helper provides. Because pcp_to_tt only transposes Best Effort and Background and is the identity elsewhere the two directions are numerically equal; provide tt_to_pcp as its own named function so the read path does not decode a traffic type as if it were a PCP. The first user is the Realtek rtl8365mb DSA driver, whose dcbnl get_default_prio and get_dscp_prio paths read back traffic types and must return 802.1p priorities. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> --- include/net/ieee8021q.h | 6 ++++++ net/core/ieee8021q_helpers.c | 40 ++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+)
diff --git a/include/net/ieee8021q.h b/include/net/ieee8021q.h
index d24e4036577b..b09572da0289 100644
--- a/include/net/ieee8021q.h
+++ b/include/net/ieee8021q.h@@ -39,6 +39,7 @@ enum ieee8021q_traffic_type { int ietf_dscp_to_ieee8021q_tt(u8 dscp); int ieee8021q_pcp_to_tt(u8 pcp); +int ieee8021q_tt_to_pcp(enum ieee8021q_traffic_type tt); int ieee8021q_tt_to_tc(enum ieee8021q_traffic_type tt, unsigned int num_queues); #else
@@ -53,6 +54,11 @@ static inline int ieee8021q_pcp_to_tt(u8 pcp) return -EOPNOTSUPP; } +static inline int ieee8021q_tt_to_pcp(enum ieee8021q_traffic_type tt) +{ + return -EOPNOTSUPP; +} + static inline int ieee8021q_tt_to_tc(enum ieee8021q_traffic_type tt, unsigned int num_queues) {
diff --git a/net/core/ieee8021q_helpers.c b/net/core/ieee8021q_helpers.c
index 520d86d592eb..205c11793473 100644
--- a/net/core/ieee8021q_helpers.c
+++ b/net/core/ieee8021q_helpers.c@@ -267,3 +267,43 @@ int ieee8021q_pcp_to_tt(u8 pcp) return -EINVAL; } EXPORT_SYMBOL_GPL(ieee8021q_pcp_to_tt); + +/** + * ieee8021q_tt_to_pcp - Map an IEEE 802.1Q traffic type to a PCP + * @tt: IEEE 802.1Q traffic type + * + * Encode @tt back to its IEEE 802.1Q Priority Code Point per Table I-7 + * ("Priority Code Point decoding") for the 8P0D encoding, the inverse of + * ieee8021q_pcp_to_tt(). It is nearly the identity, except traffic types Best + * Effort and Background map to swapped PCP values: Best Effort is the default + * (PCP 0) despite being higher priority than Background (PCP 1) (Table I-2: + * BE = priority 0, BK = priority 1). + * + * Return: the PCP value, or a negative value on error. + */ +int ieee8021q_tt_to_pcp(enum ieee8021q_traffic_type tt) +{ + switch (tt) { + case IEEE8021Q_TT_BK: + return 1; + case IEEE8021Q_TT_BE: + return 0; + case IEEE8021Q_TT_EE: + return 2; + case IEEE8021Q_TT_CA: + return 3; + case IEEE8021Q_TT_VI: + return 4; + case IEEE8021Q_TT_VO: + return 5; + case IEEE8021Q_TT_IC: + return 6; + case IEEE8021Q_TT_NC: + return 7; + case IEEE8021Q_TT_MAX: + break; + } + + return -EINVAL; +} +EXPORT_SYMBOL_GPL(ieee8021q_tt_to_pcp);
--
2.47.3