From: Hangbin Liu <[email protected]>

Previously End.X only supported NEXT-C-SID, with a plain fallback to
input_action_end_x_core(). Add PSP End.X processing by reusing
end_flv8986_core().

Add SEG6_LOCAL_FLV8986_SUPP_OPS to SEG6_LOCAL_END_X_FLV_SUPP_OPS so
End.X advertises PSP flavor support.

Signed-off-by: Hangbin Liu <[email protected]>
---
 net/ipv6/seg6_local.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/net/ipv6/seg6_local.c b/net/ipv6/seg6_local.c
index 584e6aca3893..7462da1da362 100644
--- a/net/ipv6/seg6_local.c
+++ b/net/ipv6/seg6_local.c
@@ -121,7 +121,8 @@ struct bpf_lwt_prog {
 
 #define SEG6_LOCAL_END_FLV_SUPP_OPS    (SEG6_F_LOCAL_FLV_NEXT_CSID | \
                                         SEG6_LOCAL_FLV8986_SUPP_OPS)
-#define SEG6_LOCAL_END_X_FLV_SUPP_OPS  SEG6_F_LOCAL_FLV_NEXT_CSID
+#define SEG6_LOCAL_END_X_FLV_SUPP_OPS  (SEG6_F_LOCAL_FLV_NEXT_CSID | \
+                                        SEG6_LOCAL_FLV8986_SUPP_OPS)
 
 struct seg6_flavors_info {
        /* Flavor operations */
@@ -841,12 +842,19 @@ static int input_action_end_x(struct sk_buff *skb, struct 
seg6_local_lwt *slwt)
 {
        const struct seg6_flavors_info *finfo = &slwt->flv_info;
        __u32 fops = finfo->flv_ops;
+       int ret;
+
+       if (!fops)
+               return input_action_end_x_core(skb, slwt);
 
        /* check for the presence of NEXT-C-SID since it applies first */
        if (seg6_next_csid_enabled(fops))
                return end_x_next_csid_core(skb, slwt);
 
-       return input_action_end_x_core(skb, slwt);
+       ret = end_flv8986_core(skb, slwt);
+       if (ret)
+               return ret;
+       return input_action_end_x_finish(skb, slwt);
 }
 
 static int input_action_end_t(struct sk_buff *skb, struct seg6_local_lwt *slwt)

-- 
2.55.0


Reply via email to