]> git.proxmox.com Git - mirror_frr.git/commitdiff
zebra, lib: add support for SRv6 End.DT46 behavior
authorCarmine Scarpitta <carmine.scarpitta@uniroma2.it>
Fri, 22 Jul 2022 23:32:04 +0000 (01:32 +0200)
committerCarmine Scarpitta <carmine.scarpitta@uniroma2.it>
Tue, 18 Oct 2022 13:37:25 +0000 (15:37 +0200)
This commit enables zebra to install End.DT46 nexthops into the Linux kernel.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
lib/srv6.c
lib/srv6.h
zebra/rt_netlink.c

index 6a658444c6ddb7d53bd86128086215069cf4aa29..4dd6dd7c49c53bdf093e7f8d565469b0ea9a2c67 100644 (file)
@@ -57,6 +57,8 @@ const char *seg6local_action2str(uint32_t action)
                return "End.AS";
        case ZEBRA_SEG6_LOCAL_ACTION_END_AM:
                return "End.AM";
+       case ZEBRA_SEG6_LOCAL_ACTION_END_DT46:
+               return "End.DT46";
        case ZEBRA_SEG6_LOCAL_ACTION_UNSPEC:
                return "unspec";
        default:
@@ -105,6 +107,7 @@ const char *seg6local_context2str(char *str, size_t size,
        case ZEBRA_SEG6_LOCAL_ACTION_END_T:
        case ZEBRA_SEG6_LOCAL_ACTION_END_DT6:
        case ZEBRA_SEG6_LOCAL_ACTION_END_DT4:
+       case ZEBRA_SEG6_LOCAL_ACTION_END_DT46:
                snprintf(str, size, "table %u", ctx->table);
                return str;
 
index e0db30cd13e1681f04cc5ee708e0ec015b95561a..6e0c3ce99d1d94643ffe291f6655677ba84b0685 100644 (file)
@@ -60,6 +60,7 @@ enum seg6local_action_t {
        ZEBRA_SEG6_LOCAL_ACTION_END_AS       = 13,
        ZEBRA_SEG6_LOCAL_ACTION_END_AM       = 14,
        ZEBRA_SEG6_LOCAL_ACTION_END_BPF      = 15,
+       ZEBRA_SEG6_LOCAL_ACTION_END_DT46     = 16,
 };
 
 struct seg6_segs {
index e883033d59c61297a94ed2307dce7452a73cd1fd..3a8f5264f42133c3e5df3ee62e1b6965b2744021 100644 (file)
@@ -1540,6 +1540,16 @@ static bool _netlink_route_build_singlepath(const struct prefix *p,
                                                   ctx->table))
                                        return false;
                                break;
+                       case ZEBRA_SEG6_LOCAL_ACTION_END_DT46:
+                               if (!nl_attr_put32(nlmsg, req_size,
+                                                  SEG6_LOCAL_ACTION,
+                                                  SEG6_LOCAL_ACTION_END_DT46))
+                                       return false;
+                               if (!nl_attr_put32(nlmsg, req_size,
+                                                  SEG6_LOCAL_VRFTABLE,
+                                                  ctx->table))
+                                       return false;
+                               break;
                        default:
                                zlog_err("%s: unsupport seg6local behaviour action=%u",
                                         __func__,
@@ -2706,6 +2716,18 @@ ssize_t netlink_nexthop_msg_encode(uint16_t cmd,
                                                            ctx->table))
                                                        return 0;
                                                break;
+                                       case SEG6_LOCAL_ACTION_END_DT46:
+                                               if (!nl_attr_put32(
+                                                           &req->n, buflen,
+                                                           SEG6_LOCAL_ACTION,
+                                                           SEG6_LOCAL_ACTION_END_DT46))
+                                                       return 0;
+                                               if (!nl_attr_put32(
+                                                           &req->n, buflen,
+                                                           SEG6_LOCAL_VRFTABLE,
+                                                           ctx->table))
+                                                       return 0;
+                                               break;
                                        default:
                                                zlog_err("%s: unsupport seg6local behaviour action=%u",
                                                         __func__, action);