]> git.puffer.fish Git - mirror/frr.git/commitdiff
ldpd: fix wrong gtsm count 16337/head
authoranlan_cs <anlan_cs@tom.com>
Sat, 15 Jun 2024 12:34:20 +0000 (20:34 +0800)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Tue, 2 Jul 2024 17:50:31 +0000 (17:50 +0000)
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)

ldpd/neighbor.c

index 5209c55bb8549420ee2fbc57df8066bf4693d589..91bb603ffcc518adee1bafb832d6ba0681a8519b 100644 (file)
@@ -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)