Skip to content

zebra: Allow multiple Explicit Sids support with behavior uN #18736

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

raja-rajasekar
Copy link
Contributor

@raja-rajasekar raja-rajasekar commented Apr 29, 2025

In the current code, we cannot allocate more than one explicit Sid for same uN behavior even if they are from different/same(with differente node len) locator blocks.

For example, if we have the following config
    segment-routing
     srv6
      static-sids
       sid fcbb:bbbb:1::/48 locator MAIN behavior uN
       sid 1234:5678:1::/48 locator RAJA behavior uN
     srv6
      locators
       locator MAIN
        prefix fcbb:bbbb:1::/48 block-len 32 node-len 16 func-bits 16
       locator RAJA
        prefix 1234:5678:1::/48 block-len 32 node-len 16 func-bits 16

Although the locators blocks are different, and staticd request to allocate multiple sid seems valid, zebra allocates only the first static-sid and returns the below error for others.

ZEBRA: [NGMNY-JWMWQ] get_srv6_sid_explicit: cannot alloc SID 1234:5678:1:: for ctx End USP: ctx already associated with SID fcbb:bbbb:1::

But we should allow a node behave as a multiple Endpoints expecially if we have a topology where the node resides at the intersection of multiple zones/domain.

Fix is to skip the 'if' condition check to bail out of the behavior is END.

With fix:

ip -6 route show
1234:5678:1::/48 nhid 9  encap seg6local action End dev sr0 proto 196 metric 20 pref medium
fcbb:bbbb:1::/48 nhid 9  encap seg6local action End dev sr0 proto 196 metric 20 pref medium

Signed-off-by: Rajasekar Raja <[email protected]>

@frrbot frrbot bot added the zebra label Apr 29, 2025
@raja-rajasekar raja-rajasekar force-pushed the rajasekarr/multi_uN_support branch from 4693ab3 to 125ea35 Compare April 29, 2025 20:29
@github-actions github-actions bot added size/M and removed size/S labels Apr 29, 2025
@raja-rajasekar raja-rajasekar force-pushed the rajasekarr/multi_uN_support branch from 125ea35 to ebbae8c Compare April 29, 2025 20:30
@raja-rajasekar
Copy link
Contributor Author

ci:rerun

@raja-rajasekar raja-rajasekar force-pushed the rajasekarr/multi_uN_support branch from ebbae8c to 0901ffc Compare April 30, 2025 17:07
@github-actions github-actions bot added size/L and removed size/M labels Apr 30, 2025
@raja-rajasekar raja-rajasekar requested a review from ton31337 April 30, 2025 17:07
Copy link
Member

@ton31337 ton31337 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@cscarpitta
Copy link
Contributor

I'm seeing some errors reported by Address Sanitizer after applying your patch when I try to delete and re-allocate a SID.

=================================================================
==727642==ERROR: AddressSanitizer: heap-use-after-free on address 0x504000323a50 at pc 0xe22c26be588c bp 0xfffffb654dd0 sp 0xfffffb6545b0
READ of size 32 at 0x504000323a50 thread T0
    #0 0xe22c26be5888 in MemcmpInterceptorCommon(void*, int (*)(void const*, void const*, unsigned long), void const*, void const*, unsigned long) ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:813
    #1 0xe22c26be5c28 in memcmp ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:845
    #2 0xe22c26be5c28 in memcmp ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:840
    #3 0xb3b7dbcc7ef8 in get_srv6_sid_explicit zebra/zebra_srv6.c:1508
    #4 0xb3b7dbccab60 in get_srv6_sid zebra/zebra_srv6.c:1802
    #5 0xb3b7dbcce55c in srv6_manager_get_sid_internal zebra/zebra_srv6.c:2309
    #6 0xb3b7dbcbcbec in hook_call_srv6_manager_get_sid zebra/zebra_srv6.c:66
    #7 0xb3b7dbcbd4bc in srv6_manager_get_sid_call zebra/zebra_srv6.c:114
    #8 0xb3b7dbbf4448 in zread_srv6_manager_get_srv6_sid zebra/zapi_msg.c:3078
    #9 0xb3b7dbbf5044 in zread_srv6_manager_request zebra/zapi_msg.c:3146
    #10 0xb3b7dbc06010 in zserv_handle_commands zebra/zapi_msg.c:4185
    #11 0xb3b7dbe72bdc in zserv_process_messages zebra/zserv.c:557
    #12 0xe22c2658eeec in event_call lib/event.c:2019
    #13 0xe22c263aa954 in frr_run lib/libfrr.c:1247
    #14 0xb3b7dbb5e3f8 in main zebra/main.c:543
    #15 0xe22c25bf84c0 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #16 0xe22c25bf8594 in __libc_start_main_impl ../csu/libc-start.c:360
    #17 0xb3b7dbafa7ec in _start (/usr/lib/frr/zebra+0x2da7ec) (BuildId: 1309728c5539bce24f385eca9a7fa970f9779e33)

0x504000323a50 is located 0 bytes inside of 40-byte region [0x504000323a50,0x504000323a78)
freed by thread T0 here:
    #0 0xe22c26c161b4 in free ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:52
    #1 0xe22c263f5270 in qfree lib/memory.c:131
    #2 0xb3b7dbcbd6a0 in zebra_srv6_sid_ctx_free zebra/zebra_srv6.c:152
    #3 0xb3b7dbcce184 in release_srv6_sid zebra/zebra_srv6.c:2243
    #4 0xb3b7dbccfbf4 in srv6_manager_release_sid_internal zebra/zebra_srv6.c:2420
    #5 0xb3b7dbcbced8 in hook_call_srv6_manager_release_sid zebra/zebra_srv6.c:71
    #6 0xb3b7dbcbd51c in srv6_manager_release_sid_call zebra/zebra_srv6.c:121
    #7 0xb3b7dbbf482c in zread_srv6_manager_release_srv6_sid zebra/zapi_msg.c:3103
    #8 0xb3b7dbbf5090 in zread_srv6_manager_request zebra/zapi_msg.c:3149
    #9 0xb3b7dbc06010 in zserv_handle_commands zebra/zapi_msg.c:4185
    #10 0xb3b7dbe72bdc in zserv_process_messages zebra/zserv.c:557
    #11 0xe22c2658eeec in event_call lib/event.c:2019
    #12 0xe22c263aa954 in frr_run lib/libfrr.c:1247
    #13 0xb3b7dbb5e3f8 in main zebra/main.c:543
    #14 0xe22c25bf84c0 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #15 0xe22c25bf8594 in __libc_start_main_impl ../csu/libc-start.c:360
    #16 0xb3b7dbafa7ec in _start (/usr/lib/frr/zebra+0x2da7ec) (BuildId: 1309728c5539bce24f385eca9a7fa970f9779e33)

previously allocated by thread T0 here:
    #0 0xe22c26c1709c in calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
    #1 0xe22c263f4f74 in qcalloc lib/memory.c:106
    #2 0xb3b7dbcbd63c in zebra_srv6_sid_ctx_alloc zebra/zebra_srv6.c:144
    #3 0xb3b7dbcc8720 in get_srv6_sid_explicit zebra/zebra_srv6.c:1569
    #4 0xb3b7dbccab60 in get_srv6_sid zebra/zebra_srv6.c:1802
    #5 0xb3b7dbcce55c in srv6_manager_get_sid_internal zebra/zebra_srv6.c:2309
    #6 0xb3b7dbcbcbec in hook_call_srv6_manager_get_sid zebra/zebra_srv6.c:66
    #7 0xb3b7dbcbd4bc in srv6_manager_get_sid_call zebra/zebra_srv6.c:114
    #8 0xb3b7dbbf4448 in zread_srv6_manager_get_srv6_sid zebra/zapi_msg.c:3078
    #9 0xb3b7dbbf5044 in zread_srv6_manager_request zebra/zapi_msg.c:3146
    #10 0xb3b7dbc06010 in zserv_handle_commands zebra/zapi_msg.c:4185
    #11 0xb3b7dbe72bdc in zserv_process_messages zebra/zserv.c:557
    #12 0xe22c2658eeec in event_call lib/event.c:2019
    #13 0xe22c263aa954 in frr_run lib/libfrr.c:1247
    #14 0xb3b7dbb5e3f8 in main zebra/main.c:543
    #15 0xe22c25bf84c0 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #16 0xe22c25bf8594 in __libc_start_main_impl ../csu/libc-start.c:360
    #17 0xb3b7dbafa7ec in _start (/usr/lib/frr/zebra+0x2da7ec) (BuildId: 1309728c5539bce24f385eca9a7fa970f9779e33)

SUMMARY: AddressSanitizer: heap-use-after-free ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:813 in MemcmpInterceptorCommon(void*, int (*)(void const*, void const*, unsigned long), void const*, void const*, unsigned long)
Shadow bytes around the buggy address:
  0x504000323780: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
  0x504000323800: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
  0x504000323880: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
  0x504000323900: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
  0x504000323980: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
=>0x504000323a00: fa fa fd fd fd fd fd fa fa fa[fd]fd fd fd fd fa
  0x504000323a80: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fd
  0x504000323b00: fa fa fd fd fd fd fd fd fa fa fd fd fd fd fd fd
  0x504000323b80: fa fa fd fd fd fd fd fd fa fa fd fd fd fd fd fa
  0x504000323c00: fa fa fd fd fd fd fd fd fa fa 00 00 00 00 00 00
  0x504000323c80: fa fa 00 00 00 00 00 fa fa fa fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==727642==ABORTING

@raja-rajasekar raja-rajasekar force-pushed the rajasekarr/multi_uN_support branch from 0901ffc to fe06893 Compare May 5, 2025 22:43
@raja-rajasekar raja-rajasekar changed the title zebra: Allow multiple Explicit Sids support for same ctx zebra: Allow multiple Explicit Sids support with behavior uN May 5, 2025
@github-actions github-actions bot added the rebase PR needs rebase label May 5, 2025
@raja-rajasekar raja-rajasekar force-pushed the rajasekarr/multi_uN_support branch from fe06893 to f70e05c Compare May 6, 2025 00:43
@raja-rajasekar
Copy link
Contributor Author

I'm seeing some errors reported by Address Sanitizer after applying your patch when I try to delete and re-allocate a SID.

=================================================================
==727642==ERROR: AddressSanitizer: heap-use-after-free on address 0x504000323a50 at pc 0xe22c26be588c bp 0xfffffb654dd0 sp 0xfffffb6545b0
READ of size 32 at 0x504000323a50 thread T0
    #0 0xe22c26be5888 in MemcmpInterceptorCommon(void*, int (*)(void const*, void const*, unsigned long), void const*, void const*, unsigned long) ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:813
    #1 0xe22c26be5c28 in memcmp ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:845
    #2 0xe22c26be5c28 in memcmp ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:840
    #3 0xb3b7dbcc7ef8 in get_srv6_sid_explicit zebra/zebra_srv6.c:1508
    #4 0xb3b7dbccab60 in get_srv6_sid zebra/zebra_srv6.c:1802
    #5 0xb3b7dbcce55c in srv6_manager_get_sid_internal zebra/zebra_srv6.c:2309
    #6 0xb3b7dbcbcbec in hook_call_srv6_manager_get_sid zebra/zebra_srv6.c:66
    #7 0xb3b7dbcbd4bc in srv6_manager_get_sid_call zebra/zebra_srv6.c:114
    #8 0xb3b7dbbf4448 in zread_srv6_manager_get_srv6_sid zebra/zapi_msg.c:3078
    #9 0xb3b7dbbf5044 in zread_srv6_manager_request zebra/zapi_msg.c:3146
    #10 0xb3b7dbc06010 in zserv_handle_commands zebra/zapi_msg.c:4185
    #11 0xb3b7dbe72bdc in zserv_process_messages zebra/zserv.c:557
    #12 0xe22c2658eeec in event_call lib/event.c:2019
    #13 0xe22c263aa954 in frr_run lib/libfrr.c:1247
    #14 0xb3b7dbb5e3f8 in main zebra/main.c:543
    #15 0xe22c25bf84c0 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #16 0xe22c25bf8594 in __libc_start_main_impl ../csu/libc-start.c:360
    #17 0xb3b7dbafa7ec in _start (/usr/lib/frr/zebra+0x2da7ec) (BuildId: 1309728c5539bce24f385eca9a7fa970f9779e33)

0x504000323a50 is located 0 bytes inside of 40-byte region [0x504000323a50,0x504000323a78)
freed by thread T0 here:
    #0 0xe22c26c161b4 in free ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:52
    #1 0xe22c263f5270 in qfree lib/memory.c:131
    #2 0xb3b7dbcbd6a0 in zebra_srv6_sid_ctx_free zebra/zebra_srv6.c:152
    #3 0xb3b7dbcce184 in release_srv6_sid zebra/zebra_srv6.c:2243
    #4 0xb3b7dbccfbf4 in srv6_manager_release_sid_internal zebra/zebra_srv6.c:2420
    #5 0xb3b7dbcbced8 in hook_call_srv6_manager_release_sid zebra/zebra_srv6.c:71
    #6 0xb3b7dbcbd51c in srv6_manager_release_sid_call zebra/zebra_srv6.c:121
    #7 0xb3b7dbbf482c in zread_srv6_manager_release_srv6_sid zebra/zapi_msg.c:3103
    #8 0xb3b7dbbf5090 in zread_srv6_manager_request zebra/zapi_msg.c:3149
    #9 0xb3b7dbc06010 in zserv_handle_commands zebra/zapi_msg.c:4185
    #10 0xb3b7dbe72bdc in zserv_process_messages zebra/zserv.c:557
    #11 0xe22c2658eeec in event_call lib/event.c:2019
    #12 0xe22c263aa954 in frr_run lib/libfrr.c:1247
    #13 0xb3b7dbb5e3f8 in main zebra/main.c:543
    #14 0xe22c25bf84c0 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #15 0xe22c25bf8594 in __libc_start_main_impl ../csu/libc-start.c:360
    #16 0xb3b7dbafa7ec in _start (/usr/lib/frr/zebra+0x2da7ec) (BuildId: 1309728c5539bce24f385eca9a7fa970f9779e33)

previously allocated by thread T0 here:
    #0 0xe22c26c1709c in calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
    #1 0xe22c263f4f74 in qcalloc lib/memory.c:106
    #2 0xb3b7dbcbd63c in zebra_srv6_sid_ctx_alloc zebra/zebra_srv6.c:144
    #3 0xb3b7dbcc8720 in get_srv6_sid_explicit zebra/zebra_srv6.c:1569
    #4 0xb3b7dbccab60 in get_srv6_sid zebra/zebra_srv6.c:1802
    #5 0xb3b7dbcce55c in srv6_manager_get_sid_internal zebra/zebra_srv6.c:2309
    #6 0xb3b7dbcbcbec in hook_call_srv6_manager_get_sid zebra/zebra_srv6.c:66
    #7 0xb3b7dbcbd4bc in srv6_manager_get_sid_call zebra/zebra_srv6.c:114
    #8 0xb3b7dbbf4448 in zread_srv6_manager_get_srv6_sid zebra/zapi_msg.c:3078
    #9 0xb3b7dbbf5044 in zread_srv6_manager_request zebra/zapi_msg.c:3146
    #10 0xb3b7dbc06010 in zserv_handle_commands zebra/zapi_msg.c:4185
    #11 0xb3b7dbe72bdc in zserv_process_messages zebra/zserv.c:557
    #12 0xe22c2658eeec in event_call lib/event.c:2019
    #13 0xe22c263aa954 in frr_run lib/libfrr.c:1247
    #14 0xb3b7dbb5e3f8 in main zebra/main.c:543
    #15 0xe22c25bf84c0 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #16 0xe22c25bf8594 in __libc_start_main_impl ../csu/libc-start.c:360
    #17 0xb3b7dbafa7ec in _start (/usr/lib/frr/zebra+0x2da7ec) (BuildId: 1309728c5539bce24f385eca9a7fa970f9779e33)

SUMMARY: AddressSanitizer: heap-use-after-free ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:813 in MemcmpInterceptorCommon(void*, int (*)(void const*, void const*, unsigned long), void const*, void const*, unsigned long)
Shadow bytes around the buggy address:
  0x504000323780: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
  0x504000323800: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
  0x504000323880: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
  0x504000323900: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
  0x504000323980: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fa
=>0x504000323a00: fa fa fd fd fd fd fd fa fa fa[fd]fd fd fd fd fa
  0x504000323a80: fa fa fd fd fd fd fd fa fa fa fd fd fd fd fd fd
  0x504000323b00: fa fa fd fd fd fd fd fd fa fa fd fd fd fd fd fd
  0x504000323b80: fa fa fd fd fd fd fd fd fa fa fd fd fd fd fd fa
  0x504000323c00: fa fa fd fd fd fd fd fd fa fa 00 00 00 00 00 00
  0x504000323c80: fa fa 00 00 00 00 00 fa fa fa fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==727642==ABORTING

Thanks Carmine.. Can you check now?
The original fix (of removing the check) is wrong for behaviour other than uN because once we find a matching ctx, things go for a toss.
Essentially, what we want is to allow multiple ZEBRA_SEG6_LOCAL_ACTION_END , which is what the current fix does..

Let me know now if things look good.

In the current code, we cannot allocate more than one explicit Sid for
same uN behavior even if they are from different/same(with
differente node len) locator blocks.

For example, if we have the following config
    segment-routing
     srv6
      static-sids
       sid fcbb:bbbb:1::/48 locator MAIN behavior uN
       sid 1234:5678:1::/48 locator RAJA behavior uN
     srv6
      locators
       locator MAIN
        prefix fcbb:bbbb:1::/48 block-len 32 node-len 16 func-bits 16
       locator RAJA
        prefix 1234:5678:1::/48 block-len 32 node-len 16 func-bits 16

Although the locators blocks are different, and staticd request to
allocate multiple sid seems valid, zebra allocates only the first
static-sid and returns the below error for others.
ZEBRA: [NGMNY-JWMWQ] get_srv6_sid_explicit: cannot alloc SID 1234:5678:1:: for ctx End USP: ctx already associated with SID fcbb:bbbb:1::

But we should allow a node behave as a multiple Endpoints expecially if
we have a topology where the node resides at the intersection of
multiple zones/domain.

Fix is to skip the 'if' condition check to bail out of the behavior is
END.

With fix:

ip -6 route show
1234:5678:1::/48 nhid 9  encap seg6local action End dev sr0 proto 196 metric 20 pref medium
fcbb:bbbb:1::/48 nhid 9  encap seg6local action End dev sr0 proto 196 metric 20 pref medium

Signed-off-by: Rajasekar Raja <[email protected]>
@raja-rajasekar raja-rajasekar force-pushed the rajasekarr/multi_uN_support branch from f70e05c to 6913929 Compare May 6, 2025 04:58
@raja-rajasekar
Copy link
Contributor Author

ci:rerun

1 similar comment
@raja-rajasekar
Copy link
Contributor Author

ci:rerun

@cscarpitta cscarpitta self-requested a review May 7, 2025 10:56
Copy link
Contributor

@cscarpitta cscarpitta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is also another issue.

Start from this configuration:

segment-routing
 srv6
  static-sids
   sid fcbb:bbbb:1::/48 locator MAIN behavior uN
   sid fcbb:cccc:1::/48 locator MAIN1 behavior uN
  !
  locators
   locator MAIN1
    prefix fcbb:bbbb:1::/48 block-len 32 node-len 16 func-bits 16
    prefix fcbb:cccc:1::/48 block-len 32 node-len 16 func-bits 0 

The two SIDs are allocated correctly:

router1# show segment-routing srv6 sid
 SID            Behavior    Context    Daemon/Instance    Locator    AllocationType  
 -------------------------  ---------  -----------------  ---------  ----------------
 fcbb:bbbb:1::  End         -          static(0)          MAIN       explicit        
 fcbb:cccc:1::  End         -          static(0)          MAIN1      explicit        

But when you try to remove a SID, FRR removes the wrong one:

router1# no sid fcbb:cccc:1::/48 locator MAIN1 behavior uN
router1# 
router1# 
router1# show segment-routing srv6 sid
 SID            Behavior    Context    Daemon/Instance    Locator    AllocationType  
 -------------------------  ---------  -----------------  ---------  ----------------
 fcbb:cccc:1::  End         -          static(0)          MAIN1      explicit        

@raja-rajasekar
Copy link
Contributor Author

raja-rajasekar commented May 13, 2025

@cscarpitta I think that's an excellent test case.

The issue is that the struct srv6_sid_ctx in the case of uN has no differentiating factor I.e. when we call srv6_manager_release_sid_internal(), the first sid with ctx (End) is what is picked and released...

i think in the ctx, we need to add something extra in case of multiple uN as a differentiating factor when requesting from clients.. maybe some id which we need to keep track of or do you have something in your mind ?

for example in static_zebra_request_srv6_sid()

	switch (sid->behavior) {
	case SRV6_ENDPOINT_BEHAVIOR_END:
	case SRV6_ENDPOINT_BEHAVIOR_END_PSP:
	case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID:
	case SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID_PSP:
		ctx.behavior = ZEBRA_SEG6_LOCAL_ACTION_END;
		break;

so nothing to differentiate..,

maybe something like ctx.uN_id or maybe locator etc...??

@raja-rajasekar
Copy link
Contributor Author

#18806 covers this + more scenarios . So closing this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants