From 81e7bb3dbd791898e5a37891c7d675e1b9f4ab44 Mon Sep 17 00:00:00 2001 From: Louis Scalbert Date: Thu, 2 Feb 2023 15:44:31 +0100 Subject: [PATCH 1/3] lib: fix traffic engineering extended mask RFC7471 and RFC8570 have defined the Extended Traffic Engineering metrics that are carried within TLV of 32 bits data length. Extended metrics, excepting bandwidth ones, use the following format: > 0 1 2 3 > 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 > +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > | Type | Length | > +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > |A| RESERVED | Value | > +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Data contains a flag/reserved of 8 bits and a 24 bits value. The TE_EXT_MASK mask macro extracts a 28 bits value from a 32 bits variable instead of 24 bits. It works in most of the case because RESERVED bits are generally set to 0. Fix the TE_EXT_MASK mask. Fixes: 16f1b9ee29 ("Update Traffic Engineering Support for OSPFD") Signed-off-by: Louis Scalbert --- lib/if.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/if.h b/lib/if.h index a653246ccb..acd60e9d06 100644 --- a/lib/if.h +++ b/lib/if.h @@ -140,7 +140,7 @@ struct if_stats { #endif /* HAVE_PROC_NET_DEV */ /* Here are "non-official" architectural constants. */ -#define TE_EXT_MASK 0x0FFFFFFF +#define TE_EXT_MASK 0x00FFFFFF #define TE_EXT_ANORMAL 0x80000000 #define LOSS_PRECISION 0.000003 /* TE_MEGA_BIT and TE_BYTE are utilized to convert TE bandwidth */ From 129ad38b07a06619bb8bb97120a4c6b80e633432 Mon Sep 17 00:00:00 2001 From: Louis Scalbert Date: Thu, 2 Feb 2023 16:13:39 +0100 Subject: [PATCH 2/3] isisd: fix te link delay display Apply the TE_EXT_MASK mask to display a 24 bits instead of a wrong 32 bits value that includes unrelated bits. Fixes: 1b3f47d04c ("isisd: Update TLVs processing for TE, RI & SR") Signed-off-by: Louis Scalbert --- isisd/isis_te.c | 2 +- isisd/isis_tlvs.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/isisd/isis_te.c b/isisd/isis_te.c index 155d1e6fed..e431e8934c 100644 --- a/isisd/isis_te.c +++ b/isisd/isis_te.c @@ -1540,7 +1540,7 @@ static void show_ext_sub(struct vty *vty, char *name, sbuf_push(&buf, 4, "%s Average Link Delay: %u (micro-sec)\n", IS_ANORMAL(ext->delay) ? "Anomalous" : "Normal", - ext->delay); + ext->delay & TE_EXT_MASK); if (IS_SUBTLV(ext, EXT_MM_DELAY)) { sbuf_push(&buf, 4, "%s Min/Max Link Delay: %u / %u (micro-sec)\n", IS_ANORMAL(ext->min_delay) ? "Anomalous" : "Normal", diff --git a/isisd/isis_tlvs.c b/isisd/isis_tlvs.c index 8907fa256b..ae0a208d21 100644 --- a/isisd/isis_tlvs.c +++ b/isisd/isis_tlvs.c @@ -401,7 +401,7 @@ static void format_item_ext_subtlvs(struct isis_ext_subtlvs *exts, "%s Average Link Delay: %u (micro-sec)\n", IS_ANORMAL(exts->delay) ? "Anomalous" : "Normal", - exts->delay); + exts->delay & TE_EXT_MASK); } if (IS_SUBTLV(exts, EXT_MM_DELAY)) { if (json) { From e84179b6ef01408a84f9fd69355e5e41916578eb Mon Sep 17 00:00:00 2001 From: Louis Scalbert Date: Thu, 2 Feb 2023 16:06:59 +0100 Subject: [PATCH 3/3] isisd: use the te anormal macro Use the te anormal macro Signed-off-by: Louis Scalbert --- isisd/isis_tlvs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isisd/isis_tlvs.h b/isisd/isis_tlvs.h index 905032bda1..52dfb7a84f 100644 --- a/isisd/isis_tlvs.h +++ b/isisd/isis_tlvs.h @@ -484,7 +484,7 @@ enum ext_subtlv_size { * For Delay and packet Loss, upper bit (A) indicates if the value is * normal (0) or anomalous (1). */ -#define IS_ANORMAL(v) (v & 0x80000000) +#define IS_ANORMAL(v) (v & TE_EXT_ANORMAL) struct isis_ext_subtlvs {