summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoranlan_cs <anlan_cs@tom.com>2024-06-15 20:34:20 +0800
committerMergify <37929162+mergify[bot]@users.noreply.github.com>2024-07-02 17:50:31 +0000
commit615097b6b06a2dec8bcc2ae9f5dc2e22eefea04a (patch)
tree9f9562a02828780ee7d223e04b4599234469acc8
parentfd25804c9335fc793b6b12cc5669e8412d618f83 (diff)
ldpd: fix wrong gtsm count
In linux networking stack, the received mpls packets will be processed by the host *twice*, one as mpls packet, the other as ip packet, so its ttl decreased 1. So, we need release the `IP_MINTTL` value if gtsm is enabled, it is for the mpls packets of neighbor session caused by the command: `label local advertise explicit-null`. This change makes the gtsm mechanism a bit deviation. Fix PR #8313 Signed-off-by: anlan_cs <vic.lan@pica8.com> (cherry picked from commit 1919df3a64d3fe6d4084c1d0b050b3e368860170)
-rw-r--r--ldpd/neighbor.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/ldpd/neighbor.c b/ldpd/neighbor.c
index 5209c55bb8..91bb603ffc 100644
--- a/ldpd/neighbor.c
+++ b/ldpd/neighbor.c
@@ -690,6 +690,18 @@ nbr_gtsm_setup(int fd, int af, struct nbr_params *nbrp)
if (nbrp && CHECK_FLAG(nbrp->flags, F_NBRP_GTSM_HOPS))
ttl = 256 - nbrp->gtsm_hops;
+ /*
+ * In linux networking stack, the received mpls packets
+ * will be processed by the host twice, one as mpls packet,
+ * the other as ip packet, so its ttl will be decreased 1.
+ * This behavior is based on the new kernel (5.10 and 6.1),
+ * and older versions may behave differently.
+ *
+ * Here, decrease 1 for IP_MINTTL if GTSM is enabled.
+ * And this workaround makes the GTSM mechanism a bit deviation.
+ */
+ ttl -= 1;
+
switch (af) {
case AF_INET:
if (sock_set_ipv4_minttl(fd, ttl) == -1)