Cisco XRdで使用できるSRv6 Endpoint behavior (uSID) 色々試してみた

Cisco XRd (7.11.21)のshow segmet-routing srv6 managerコマンド上で表示されるEndpoint behaviorの挙動を可能な範囲で確認してみた
現時点で勉強不足および勝手な憶測が多分に含まれるので今後適宜修正予定

以下コマンド上表示されるEndpoint behavior

```
RP/0/RP0/CPU0:xrd01#show segment-routing srv6 manager 
(略)
Platform Capabilities:
  SRv6: Yes
  TILFA: Yes
  Microloop-Avoidance: Yes
  Endpoint behaviors: 
    End.DX6
    End.DX4
    End.DT6
    End.DT4
    End.DT46
    End.DX2
    End.DT2U
    End.DT2M
    End (PSP/USD)
    End.X (PSP/USD)
    uN (shift)
    uN (PSP/USD)
    uA (shift)
    uA (PSP/USD)
    uDX6
    uDX4
    uDT6
    uDT4
    uDT46
    uDX2
    uDT2U
    uDT2M
    uB6 (Insert.Red)
    uB6 (Encaps.Red)
    uB6 (PSP/USD Insert.Red)
    uB6 (PSP/USD Encaps.Red)
（略）
```

uSIDでの確認となるので、今回確認するbehaviorは下記の12個
uN (shift)
uN (PSP/USD)
uA (PSP/USD)
uDX6
uDX4
uDT6
uDT4
uDT46
uDX2
uDT2U
uDT2M
uB6 (Insert.Red)
uB6 (Encaps.Red)

※ uB6 (PSP/USD Insert.Red)とuB6 (PSP/USD Encaps.Red)に関しては結構色々調べてみたりconfigを試してみたがshow segment-routing srv6 sid上には表示されることはなかったので今回はスルー。uA(shift)はuNでshiftの挙動を確認するので割愛

そのうちEnd-to-Endでのping OKによる挙動確認ができたのは下記の8個
uN (PSP/USD)
uA (PSP/USD)
uDX6
uDX4
uDT6
uDT4
uDT46
uDX2

uDT2U、uDT2M、uB6 (Insert.Red)、uB6 (Encaps.Red)に関してはshow segment-routing srv6 sid上に表示させることは出来たが、ping NGだった。xrd-control-planeを利用していることが原因の可能性があるため余裕ある時にxrd vRouterで試すか、XRvで試すかしてみる予定
（uDT2U、uDT2Mは今持っているXRvのversionだとcommitしようとすると
VPLS Bridge domains not supported on this platformとエラーになってしまうため、vRouterでダメだったら現状お手上げ）

全てのconfig投入後のsrv6 sidは以下の通り。uDT46のみxr05側に実装

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/60e97c48-57ee-47b5-a5b1-da45a7d0f44a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/90619dba-893b-432d-a719-0d139ee2df6f.png)



## 構成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/e62e3fa2-f428-4c83-9ee2-e318629b476a.png)

XR1、XR5がPE相当で、vrfとしてGREENとBLUEの二つを設定
IFはRouterの左側IFをGi0/0/0/0
右側IFをGi0/0/0/1
上下IFをGi0/0/0/2
XR4/XR10間はGi0/0/0/3
各Routerの最終configは最後の方に記載




## 挙動確認
挙動確認方法としては、
1. XR1(PE/Head-End)からXR5(PE/Endpoint)へのping/traceroute
2. XR11,XR12(左側CE GREEN/BLUE)からXR13,14,15,16(右側CE GREEN/BLUE)へのping
の二パターンを実施してそれぞれのRouterにてwiresharkでパケットを確認していく

### uN (PSP/USD、shift)
まずは基本的な動作のuNから
uNのbehaviorはshift-onlyとpsp-usdの二種類がある

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/94668705-7d90-403f-9b13-72db4fa0df1a.png)

基本的にはpsp-usdを利用すれば良いと思っており、shiftを積極的に利用する場面が今回の挙動理解を通してあまり想像できなかった
・PSPは次が最終ノードの場合、SRHをpopする
・USDは自身が最終ノードの場合、次ヘッダー処理を行う
※参照（https://www.nic.ad.jp/ja/materials/iw/2019/proceedings/s04/s4-miyasaka.pdf） p24

shiftの場合、単純なuNの転送処理はできるが、最終ノードとしてパケットを受け取った後の処理ができないため、最終ノードにてパケットをdropしているように見える。そのため、P-Router上での使用は問題ないがPE-Router上だと機能しないので、使い道としてはP-Rotuer上のみな気がしている

uN(PSP/USD, shift)のconfigは以下

```
segment-routing
 srv6
  locators
   locator PSPUSD
    micro-segment behavior unode psp-usd
    prefix fcbb:bb11:1::/48
   !
   locator SHIFT
    micro-segment behavior unode shift-only
    prefix fcbb:bb22:1::/48
   !
```
config投入後はuNのsidが有効となる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/1344f181-0a20-4aaa-a818-1785b69fa829.png)

SRv6 routerからであればSID宛へのping確認が可能
XR5のSIDは以下だがこのうちPSP/USDであればどれでもping OK、shiftに関してはping NGとなる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/4aafa781-c411-47d9-a1ad-0fbc3b2d46d0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/d7b979d2-bb9a-4f84-a5ab-bca759a4bc05.png)


SRHの扱いを確認するため、SRv6 Policy explicitにて複数のRouterを経由させてることでSRHを付与
経路は以下のように指定。ドキュメント的には最後のindex 90に設定しているfcbb:bb11:5::はendpointなので設定は不要とあるが、これを設定しないと何故かinedex 80のfcbb:bb11:10::が設定されずfcbb:bb11:6:7:2:3:8:5:9::となってしまうため今回はendpointまで設定を実施。ここらへんの理由は別途確認予定
```
segment-routing
 traffic-eng
  segment-lists
   srv6
    sid-format usid-f3216
   !
   segment-list FULL-PATH
    srv6
     index 10 sid fcbb:bb11:6::
     index 20 sid fcbb:bb11:7::
     index 30 sid fcbb:bb11:2::
     index 40 sid fcbb:bb11:3::
     index 50 sid fcbb:bb11:8::
     index 60 sid fcbb:bb11:9::
     index 70 sid fcbb:bb11:4::
     index 80 sid fcbb:bb11:10::
     index 90 sid fcbb:bb11:5::
    !
   !
  policy COLOR10
   srv6
    locator PSPUSD binding-sid dynamic behavior ub6-insert-reduced
   !
   color 10 end-point ipv6 fcbb:bb11:5::1
   candidate-paths
    preference 100
     explicit segment-list FULL-PATH
     !
    !
   !
  !
```

ping/tracerouteはpolicy宛でも可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/4df865b1-5342-4ca9-ab97-771a073377a6.png)

※CEからpingを打った場合のDAはfcbb:bb11:6:7:2:3:8:9::のようになるが、このping/tracerouteの方法だと何故か最初のDAがfcbb:bb11:6::となりその後はSRH2つに格納される形になっている。ここらへんの仕組みは今回調べてないので、仕組み理解は後日

この時のIPv6 HeaderおよびSRHの様子をキャプチャポイントごとに確認してみる
キャプチャするpingはuDT4のSIDが含まれる形(SRv6 L3VPN)となるが、XR11→XR13のpingで確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/4f62145c-e9eb-4017-8a94-eccf825bdc69.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/787dea7f-7762-4da8-8f44-074dd48f7fa4.png)

① （XR1→XR6)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/74a7b93a-5f8d-42e3-a1b0-f8000af1d49d.png)


Destination Addressがfcbb:bb11:6:7:2:3:8:9となっており、uSIDが6node以上となっているので、残りのSIDがSRHに格納されている
正しく13.13.13.13/32の経路に対してSRv6 Policyが適用されている

②（XR6→XR7）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/79a60bb1-fb48-4388-93fa-8ab4ba68bd60.png)

XR6でuNが正しく処理されているので、Destination Addressから"6"が削除され、16bit左にshiftされ、shitした分"0"が追加となりfcbb:bb11:7:2:3:7:8:9:0となっている

③（XR8→XR9）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/49837496-493c-472a-b165-0453bd6a2ddf.png)

同様の処理がXR8に到達するまで経由するRouterにて実行され、XR9到達時のDAはfcbb:bb11:9::となる

④（XR9→XR4）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/9ae4c84f-277b-44c0-8988-1594ed8bd418.png)

DAにはSRHのAddress[1]に格納されていたAddressが設定され、Segments Leftの値が-1される
このタイミングではSegments Leftは0でないため、削除されない

⑤（XR10→XR5）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/f2cf8818-9f14-407b-994a-fceabd6b3389.png)

PSPによる正しくSRHがpopされており、XR5に転送されている
uN(PSP/USD)は問題なし
続いてuN(Shift)

fcbb:bb22:X/48をShiftとしてlocator設定しているので、fcbb:bb22のアドレスが設定されていればshiftの起動確認ができていることになる
構成としては、XR12(12.12.12.12/32)→XE15(15.15.15.15/32)のping確認で、uN(PSP/USD)と同様にexplicitによる確認(color 30)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/6181427c-acc5-4cf3-943b-2cc0f53635cd.png)

結果としてはpingはNGとなっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/875c0d6a-c7a4-4c28-9852-f78765f54b4b.png)

キャプチャを見ながらどこでNGとなっているか確認してみる
XR1→XR6→XR7のキャプチャを確認することここはPSP/USDと同様正しくshift処理されている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/bcff38aa-f023-4ed4-b38a-bcf0528ab9d8.png)

NG箇所としてはXR9→XR4に転送する箇所となり、DAのuSIDが全て処理され次のSRHのAddressが設定されるタイミングでNGとなって、XR9がおそらくDAを設定できずにここでdropしている
下のキャプチャに関しては、XR9のIF anyで取得しているが、XR8→XR9で受信したicmpしか確認できない（XR9→XR4のicmp requestがキャプチャされてない）

なのでshiftの挙動としては、単純なshift処理のみ対応可能ということになるため、PEでの次ヘッダ処理やSRHが-1となるRouterでは機能しない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/ccf1bfb6-ca15-4ad5-9ff5-1211992a25b6.png)

### uA (PSP/USD)
shiftの挙動は概ねわかったのでuAに関してはPSP/USDのみ確認
configは以下
```
router isis CORE
 is-type level-2-only
 net 49.0000.0000.0001.00
 distribute link-state
 address-family ipv6 unicast
  metric-style wide
  segment-routing srv6
   locator SHIFT
   !
   locator PSPUSD
   !
  !
 !
 interface GigabitEthernet0/0/0/1
  point-to-point
  address-family ipv6 unicast
  !
 !
 interface GigabitEthernet0/0/0/2
  point-to-point
  address-family ipv6 unicast
  !
 !
!
```
isisの設定を実施し、isis neighborが確立するとshow segment-routing srv6 sid上にuAとして表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/f59025eb-6035-45f9-87b2-a26e72aad3d7.png)
neighbor確立しているIF分SIDがアサインされる


こちらも確認方法としては、explicit path設定をして挙動確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/6bc59491-adca-459f-8a08-0c152192c222.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/5ab3b2b0-4422-4312-90f2-824463ccd0f6.png)

今回変更したのはindex 30でXR7→XR2の転送をuAを利用しての転送として挙動を確認
uAはRouter内でのみアサインされているので、XR7上でsidを確認する必要がある
uA SIDは動的に払い出されるため再起動等が発生すると値が変わってしまうため本来explicit等で使う場合には固定設定した上でsegment-listで使用する形となる

まずはXR1からのtracerouteで確認
XR7のXR2向け(XR7 Gi0/0/0/2)のuA fcbb:bb11:7:e000::が設定されており、正しくXR2に転送されている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/37b97fa2-f2ee-4c48-b7cc-0c1900973c34.png)

CEからのpingでも確認
キャプチャはXR7とXR2で実施

XR7ではuA fcbb:bb11:7:e000を処理してキャプチャ的にはどのIFに転送しているか分からないが、XR2接続先のGi0/0/0/2から正しく転送している

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/a352478c-99cc-4f79-98a3-4225f23aba4e.png)

XR2もXR7からのパケットをそのままfcbb:bb11:3::にしたがってXR3に転送している

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/7e5c51bf-04f9-435e-8c4e-e6f8136c3f02.png)

### uDT4/uDT6/uDT46
ここからのbehaviorはuB6以外 L2VPN/L3VPNといったSRv6 VPN関連のBehaviorとなる
比較的利用場面が多そうな順番で確認していく
まずはすでにCE間でのping確認の際に合わせて挙動確認できているが、L3VPN(IPv4/IPv6)を利用する際のbehavior
per-vrf設定だとuDT4/6を利用(特定のRouting tableをLookup)し、per-ce設定だとuDX2/4を利用(特定のInterfaceへRouting)する挙動となる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/e8a465c6-85c3-472f-a482-84979f86157a.png)


configは以下
```
router bgp 100
 bgp router-id 1.1.1.1
 address-family vpnv4 unicast
 !
 address-family vpnv6 unicast
 !
 neighbor fcbb:bb11:5::1
  remote-as 100
  update-source Loopback0
  address-family vpnv4 unicast
  !
  address-family vpnv6 unicast
  !
 !
 vrf GREEN
  rd auto
  address-family ipv4 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-vrf
   !
  !
  address-family ipv6 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-vrf
   !
  !
  neighbor 2001:11:1::11
   remote-as 65000
   address-family ipv6 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
  neighbor 192.168.111.11
   remote-as 65000
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !      
  !
 !
!
```
こちらもbgpがestablishしたタイミングからshow segment-routing srv6 sid上に表示される
L3VPN IPv4とL3VPN IPv6それぞれにuSIDが割り当てられる形となるので、XR13からXR11宛として11.11.11.11/32のIPv4であればuSIDとしてfcbb:bb11:1:e0008::が使用され、fcbb:bb11:11::1/128宛であればfcbb:bb11:1:e0007::が使用される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/afe2abbe-46c8-4c2f-ae49-bd0371f29c99.png)

XR5側はuDT46のconfig設定
BGP配下のvrf設定にてalloc modeでper-vrf46を指定することでuDT46のsidが割り当てられる
XR11からXR13宛として13.13.13.13/32、fcbb:bb11:13::1/128どちらでもfcbb:bb11:1:e0008が使用される

```
 vrf GREEN
  rd auto
  address-family ipv4 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-vrf-46
   !
  !
  address-family ipv6 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-vrf-46
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/f092b963-5f1d-4e00-a20e-278b57d3710a.png)

パケットにて実際の挙動を確認。まずはuDT4/uDT6の確認としてXR13からXR11宛のpingをIPv4,IPv6実施してそれぞれ異なるsidが使用されping OKであることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/af7842ad-14d4-4b61-a60b-165f11c043d7.png)

IPv4アドレス宛はuDT4のfcbb:bb11:e008::が使用されてIPv6アドレス宛はuDT6のfcbb:bb11:e007::が使用されている

次はuDT46の確認でXR11からXR13宛にIPv4,IPv6のpingを実行して確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/f21ac861-4547-4b28-adfd-5f0ec4b7d3e6.png)

こちらIPv4,IPv6ともにfcbb:bb11:1:e008::が利用されおり、1つのsidでL3VPN IPv4/IPv6の処理が可能となる

### uDX4/uDX6
先ほどはper-vrf設定だったがこちらはper-ce設定時に使用する挙動となる
こちらはvrf BLUE構成で確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/f13509cc-68d8-4413-a7fc-9875fe10f364.png)


configはBGP配下で以下
```
 vrf BLUE
  rd auto
  address-family ipv4 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-ce
   !
  !
  address-family ipv6 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-ce
   !
  !
```

per-vrfはvrf毎にsidが割り当てられるが、per-ceはce毎(IF毎)にsidが割り当てられており、XR5側はCEが2台繋がっている構成のため、uDX2/uDX4がそれぞれ2つずつ割り当てられている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/0fbe0133-b53e-4f04-a494-71bc82aa8c21.png)

XR12からXR15宛がfcbb:bb11:5:e005::(uDX4),fcbb:bb11:5:e0006::(uDX6)
XR13からXR16宛がfcbb:bb11:5:e009::(uDX4),fcbb:bb11:5:e0007::(uDX6)
であることをキャプチャにて確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/d6de9158-ba5a-4dce-917f-102a1f2337a7.png)

それぞれ想定通りのsidにて処理されている


### uDX2
こちらはSRv6 L2VPN構成時に使用されるBehavior。uDX2は特定のIFに転送する処理となるため、P2P構成のE-LINE構成時に使用される
L2VPNはEVPNを使用
L2VPN周り(EVPN含めて)の細かな挙動確認および技術理解はまた後日。今回は基本的にはsidを割り当てるためのconfigとパケットとして正しくsidが利用されているかの確認レベル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/52760d89-c559-422a-b8a4-dd5c803aa0b6.png)

configは以下。config説明等もこれまた後日
```
interface GigabitEthernet0/0/0/0.300 l2transport
 encapsulation dot1q 300
 rewrite ingress tag pop 1 symmetric
!
router bgp 100
 bgp router-id 1.1.1.1
 address-family l2vpn evpn
 !
 neighbor fcbb:bb11:5::1
  address-family l2vpn evpn
  !
 !
!
evpn
 segment-routing srv6
  locator PSPUSD
  !
 !
!
l2vpn
 xconnect group EVPN
  p2p EVPN
   interface GigabitEthernet0/0/0/0.300
   neighbor evpn evi 300 target 300 source 300 segment-routing srv6
   !
  !
 !
!
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/a1702838-e05e-48e2-9809-68eb1c053eab.png)


XR11(172.16.0.11)からXR13(172.16.0.13)宛の同一セグメントへのpingを実施して挙動を確認
pingはOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/3f4ad17c-234a-4e8a-aa17-c9718c23b1a0.png)

uSIDも正しくuDT2のfcbb:bb11:5:e002::が使用されている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/e753d44b-68ad-4621-8d38-d34d7a9dc3ed.png)

### uDT2U/uDT2M
こちらはVLAN L2 tableをlookupして転送する挙動となっており、複数拠点のE-LAN構成時に使用されるbehavior
P2PのL2VPN(E-LINE)はuDT2、複数拠点のL2VPN(E-LAN)はuDT2U/uDT2Mという感じ
uDT2Mはほとんど調べられてないためあまり理解できておらず。BUMトラフィックに対して利用されるような雰囲気
冒頭にも記載したがこちらはping NG状態であり、キャプチャ上でもsidの利用を確認することができなかった。設定的には問題なさそうで、interfaceとしてはarpを受信しているにも関わらずshow evpn evi vpn-id x macにて
mac addressが表示されずで原因は現時点で不明

configは以下
```
interface GigabitEthernet0/0/0/3.400 l2transport
 encapsulation dot1q 400
 rewrite ingress tag pop 1 symmetric
!
evpn
 evi 400 segment-routing srv6
  advertise-mac
  !
  locator PSPUSD
  !
 !
!
l2vpn
 bridge group E-LAN
  bridge-domain E-LAN
   interface GigabitEthernet0/0/0/3.400
   !
   evi 400 segment-routing srv6
   !
  !
 !
!
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/9f7ae8de-5349-40d7-8c7f-d71461b83f4e.png)



### uB6 (Insert.Red/Encaps.Red)
最後はBinding sidのbehavior
SRv6 Policyに割り当てられるsidとなり、uB6を使用することでuSIDの利用を節約することが可能となる
こちらはInsertはなんとなく挙動は確認できたが、Encapsは色々試してみたが全く上手くいかず
結構調べてみてはしたものの情報としてはたどり着くことができずちゃんとした挙動確認は当分先になりそう

configは以下
```
segment-routing
 traffic-eng
  segment-lists
   srv6
    sid-format usid-f3216
   !
   segment-list FULL-PATH
    srv6
     index 10 sid fcbb:bb11:6::
     index 20 sid fcbb:bb11:7::
     index 30 sid fcbb:bb11:2::
     index 40 sid fcbb:bb11:3::
     index 50 sid fcbb:bb11:8::
     index 60 sid fcbb:bb11:9::
     index 70 sid fcbb:bb11:4::
     index 80 sid fcbb:bb11:10::
     index 90 sid fcbb:bb11:5::
    !
   !
  policy COLOR10
   srv6
    locator PSPUSD binding-sid dynamic behavior ub6-insert-reduced
   !
   color 10 end-point ipv6 fcbb:bb11:5::1
   candidate-paths
    preference 100
     explicit segment-list FULL-PATH
     !
    !
   !
  !
  policy COLOR20
   srv6
    locator PSPUSD binding-sid dynamic behavior ub6-encaps-reduced
   !
   color 20 end-point ipv6 fcbb:bb11:5::1
   candidate-paths
    preference 100
     explicit segment-list FULL-PATH
     !
    !
   !
  !
```
locator PSPUSD binding-sid dynamic behaviorの引数として ub6-insert-reducedを設定するとuB6(Insert.Red)、ub6-encaps-reducedを設定すると(Encaps.Red)のuSIDが割り当てられる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/ced02685-cd81-4c39-b0a8-b3622cc44159.png)

今回の挙動確認方法としては、XR3にSRv6 Policyを設定させて割り当てられてsidをXR1のexplicit pathにて指定させることで、XR3に転送された後、XR3にて設定したPolicyに従って転送されるかどうかで確認した

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/8f286a7b-bdeb-4b80-9ccb-dd9f5c7dc723.png)

```
# XR1のPolicy設定
segment-routing
 traffic-eng
  segment-lists
   segment-list PATH
    srv6
     index 10 sid fcbb:bb11:3:e003::
    !
   !
  policy COLOR40
   srv6
    locator PSPUSD binding-sid dynamic behavior ub6-insert-reduced
   !
   color 40 end-point ipv6 fcbb:bb11:5::1
   candidate-paths
    preference 100
     explicit segment-list PATH
     !
```

XRのPolicy設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/3f98b8e8-3198-42d8-bb36-2cd6ff5153d8.png)

想定としてはXR1→XR3→XR8→XR9→XR10→XR5にて転送されてping OKとなるかと思っていたが、pingはNG

XR3まではfcbb:bb11:3:e003::で到達しているがその後、XR3でICMPv6のParameter Problemをreplyしており、XR3からXR8への転送ができていない状態

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/2ee9c37a-01cf-4cc5-b3dd-bc7d4fdaa7cf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/49d747f4-8098-4083-8e23-598f3222045c.png)

ただXR1からのtracerouteで via srv6-carriersにuB6を指定すると、XR3では正しくuB6を処理しているように見える。ただpingはNGとなっておりキャプチャを見てみるとICMPv6パケットがMalformed Packetとなっており、icmpとして処理されていないため、XR10でdropしているようにみえる
キャプチャ上ではfcbb:bb11:3:e003::がfcbb:bb11:8:9:10::に変換されているので、uB6は機能しているようには見えるが、それ以外の何かしらの原因がありpingがNGとなっているようにみえる。現時点で原因は全く不明

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/145092d2-d376-4b92-8bb3-7e06d70357ff.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83723/68f98b6f-821e-4507-881d-d5411f0ef89c.png)

というわけで可能な範囲でSRv6 Endpoint behavior (uSID) を色々と試してみた。まだまだ課題は山積みかつ勉強不足箇所多すぎということで少しずつ理解できるよう定期的にSRv6のお勉強頑張っていきたい

そして今回の記事を新たに判明したことがあり次第定期的に更新していければと

## Config（関連箇所のみ記載）
### XR1
XR1の最終的なconfigは以下（関係のある箇所のみ抽出）

```
vrf BLUE
 address-family ipv4 unicast
  import route-target
   200:200
  !
  export route-target
   200:200
  !
 !
 address-family ipv6 unicast
  import route-target
   200:200
  !
  export route-target
   200:200
  !
 !
!
vrf GREEN
 address-family ipv4 unicast
  import route-target
   100:100
  !
  export route-target
   100:100
  !
 !
 address-family ipv6 unicast
  import route-target
   100:100
  !       
  export route-target
   100:100
  !
 !
!
interface Loopback0
 ipv4 address 1.1.1.1 255.255.255.255
 ipv6 address fcbb:bb11:1::1/128
!
interface GigabitEthernet0/0/0/0.100
 vrf GREEN
 ipv4 address 192.168.111.1 255.255.255.0
 ipv6 address 2001:11:1::1/64
 encapsulation dot1q 100
!
interface GigabitEthernet0/0/0/0.300 l2transport
 encapsulation dot1q 300
 rewrite ingress tag pop 1 symmetric
!
interface GigabitEthernet0/0/0/1
 ipv6 enable
!
interface GigabitEthernet0/0/0/2
 ipv6 enable
!         
interface GigabitEthernet0/0/0/3.200
 vrf BLUE
 ipv4 address 192.168.121.1 255.255.255.0
 ipv6 address 2001:12:1::1/64
 encapsulation dot1q 200
!
interface GigabitEthernet0/0/0/3.400 l2transport
 encapsulation dot1q 400
 rewrite ingress tag pop 1 symmetric
!
interface preconfigure GigabitEthernet0/0/0/4
 l2transport
 !
!
route-policy PASS
  pass
end-policy
!
router isis CORE
 is-type level-2-only
 net 49.0000.0000.0001.00
 distribute link-state
 address-family ipv6 unicast
  metric-style wide
  segment-routing srv6
   locator SHIFT
   !
   locator PSPUSD
   !
  !
 !
 interface GigabitEthernet0/0/0/1
  point-to-point
  address-family ipv6 unicast
  !
 !        
 interface GigabitEthernet0/0/0/2
  point-to-point
  address-family ipv6 unicast
  !
 !
!
router bgp 100
 bgp router-id 1.1.1.1
 address-family vpnv4 unicast
 !
 address-family vpnv6 unicast
 !
 address-family l2vpn evpn
 !
 neighbor fcbb:bb11:5::1
  remote-as 100
  update-source Loopback0
  address-family vpnv4 unicast
  !
  address-family vpnv6 unicast
  !
  address-family l2vpn evpn
  !
 !
 vrf BLUE
  rd auto
  address-family ipv4 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-ce
   !
  !
  address-family ipv6 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-ce
   !
  !
  neighbor 2001:12:1::12
   remote-as 65100
   address-family ipv6 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
  neighbor 192.168.121.12
   remote-as 65100
   as-override
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
   !
  !
 !
 vrf GREEN
  rd auto
  address-family ipv4 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-vrf
   !
  !
  address-family ipv6 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-vrf
   !
  !
  neighbor 2001:11:1::11
   remote-as 65000
   address-family ipv6 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
  neighbor 192.168.111.11
   remote-as 65000
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
 !
!
evpn      
 evi 400 segment-routing srv6
  advertise-mac
  !
  locator PSPUSD
  !
 !
 segment-routing srv6
  locator PSPUSD
  !
 !
!
l2vpn
 xconnect group EVPN
  p2p EVPN
   interface GigabitEthernet0/0/0/0.300
   neighbor evpn evi 300 target 300 source 300 segment-routing srv6
   !
  !
 !
 bridge group E-LAN
  bridge-domain E-LAN
   interface GigabitEthernet0/0/0/3.400
   !
   evi 400 segment-routing srv6
   !
  !
 !
!
segment-routing
 traffic-eng
  segment-lists
   srv6
    sid-format usid-f3216
   !
   segment-list PATH
    srv6
     index 10 sid fcbb:bb11:3:e003::
    !
   !
   segment-list PATH2
    srv6
     index 10 sid fcbb:bb11:3:e004::
    !
   !      
   segment-list FULL-PATH
    srv6
     index 10 sid fcbb:bb11:6::
     index 20 sid fcbb:bb11:7::
     index 30 sid fcbb:bb11:3::
     index 40 sid fcbb:bb11:8::
     index 50 sid fcbb:bb11:9::
     index 60 sid fcbb:bb11:4::
     index 70 sid fcbb:bb11:10::
     index 80 sid fcbb:bb11:5::
    !
   !
   segment-list FULL-PATH-SHIFT
    srv6
     index 10 sid fcbb:bb22:6::
     index 20 sid fcbb:bb22:7::
     index 30 sid fcbb:bb22:3::
     index 40 sid fcbb:bb22:8::
     index 50 sid fcbb:bb22:9::
     index 60 sid fcbb:bb22:4::
     index 70 sid fcbb:bb22:10::
     index 80 sid fcbb:bb22:5::
    !
   !
  !
  policy COLOR10
   srv6
    locator PSPUSD binding-sid dynamic behavior ub6-insert-reduced
   !
   color 10 end-point ipv6 fcbb:bb11:5::1
   candidate-paths
    preference 100
     explicit segment-list FULL-PATH
     !
    !
   !
  !
  policy COLOR20
   srv6
    locator PSPUSD binding-sid dynamic behavior ub6-encaps-reduced
   !
   color 20 end-point ipv6 fcbb:bb11:5::1
   candidate-paths
    preference 100
     explicit segment-list FULL-PATH
     !
    !
   !
  !
  policy COLOR30
   srv6
    locator SHIFT binding-sid dynamic behavior ub6-insert-reduced
   !
   color 30 end-point ipv6 fcbb:bb11:5::1
   candidate-paths
    preference 100
     explicit segment-list FULL-PATH-SHIFT
     !
    !
   !
  !
  policy COLOR40
   srv6
    locator PSPUSD binding-sid dynamic behavior ub6-insert-reduced
   !
   color 40 end-point ipv6 fcbb:bb11:5::1
   candidate-paths
    preference 100
     explicit segment-list PATH
     !
    !
   !
  !
  policy COLOR50
   srv6
    locator PSPUSD binding-sid dynamic behavior ub6-encaps-reduced
   !
   color 50 end-point ipv6 fcbb:bb11:5::1
   candidate-paths
    preference 100
     explicit segment-list PATH2
     !
    !
   !
  !
 !
 srv6
  locators
   locator SHIFT
    micro-segment behavior unode shift-only
    prefix fcbb:bb22:1::/48
   !
   locator PSPUSD
    micro-segment behavior unode psp-usd
    prefix fcbb:bb11:1::/48
   !
  !
 !
!
```
### XR5
```
vrf BLUE
 address-family ipv4 unicast
  import route-target
   200:200
  !
  export route-policy SET-COLOR
  export route-target
   200:200
  !
 !
 address-family ipv6 unicast
  import route-target
   200:200
  !
  export route-target
   200:200
  !
 !
!
vrf GREEN
 address-family ipv4 unicast
  import route-target
   100:100
  !
  export route-policy SET-COLOR
  export route-target
   100:100
  !
 !
 address-family ipv6 unicast
  import route-target
   100:100
  !
  export route-target
   100:100
  !
 !
!
interface Loopback0
 ipv4 address 5.5.5.5 255.255.255.255
 ipv6 address fcbb:bb11:5::1/128
!
interface GigabitEthernet0/0/0/0
 ipv6 enable
!
interface GigabitEthernet0/0/0/1.100
 vrf GREEN
 ipv4 address 192.168.135.5 255.255.255.0
 ipv6 address 2001:13:5::5/64
 encapsulation dot1q 100
!
interface GigabitEthernet0/0/0/1.300 l2transport
 encapsulation dot1q 300
 rewrite ingress tag pop 1 symmetric
!
interface GigabitEthernet0/0/0/2
 ipv6 enable
!
interface GigabitEthernet0/0/0/3.100
 vrf GREEN
 ipv4 address 192.168.145.5 255.255.255.0
 ipv6 address 2001:14:5::5/64
 encapsulation dot1q 100
!
interface GigabitEthernet0/0/0/4.200
 vrf BLUE
 ipv4 address 192.168.155.5 255.255.255.0
 ipv6 address 2001:15:5::5/64
 encapsulation dot1q 200
!
interface GigabitEthernet0/0/0/4.400 l2transport
 encapsulation dot1q 400
 rewrite ingress tag pop 1 symmetric
!
interface GigabitEthernet0/0/0/5.200
 vrf BLUE
 ipv4 address 192.168.165.5 255.255.255.0
 ipv6 address 2001:16:5::5/64
 encapsulation dot1q 200
!
interface GigabitEthernet0/0/0/5.400 l2transport
 encapsulation dot1q 400
 rewrite ingress tag pop 1 symmetric
!
extcommunity-set opaque COLOR10
  10
end-set
!
extcommunity-set opaque COLOR20
  20
end-set
!
extcommunity-set opaque COLOR30
  30
end-set
!
extcommunity-set opaque COLOR40
  40
end-set
!
extcommunity-set opaque COLOR50
  50
end-set
!
prefix-set 16.16.0.16
  16.16.0.16
end-set
!
prefix-set 13.13.13.13
  13.13.13.13
end-set
!
prefix-set 14.14.14.14
  14.14.14.14
end-set
!
prefix-set 15.15.15.15
  15.15.15.15
end-set
!
prefix-set 16.16.16.16
  16.16.16.16
end-set
!
route-policy PASS
  pass
end-policy
!
route-policy SET-COLOR
  if destination in 13.13.13.13 then
    set extcommunity color COLOR10
  elseif destination in 14.14.14.14 then
    set extcommunity color COLOR20
  elseif destination in 15.15.15.15 then
    set extcommunity color COLOR30
  elseif destination in 16.16.16.16 then
    set extcommunity color COLOR40
  elseif destination in 16.16.0.16 then
    set extcommunity color COLOR50
  endif
end-policy
!
router isis CORE
 is-type level-2-only
 net 49.0000.0000.0005.00
 distribute link-state
 address-family ipv6 unicast
  metric-style wide
  segment-routing srv6
   locator SHIFT
   !
   locator PSPUSD
   !
  !
 !
 interface GigabitEthernet0/0/0/0
  point-to-point
  address-family ipv6 unicast
  !
 !
 interface GigabitEthernet0/0/0/2
  point-to-point
  address-family ipv6 unicast
  !
 !
!
router bgp 100
 bgp router-id 5.5.5.5
 address-family ipv4 unicast
 !
 address-family vpnv4 unicast
 !
 address-family vpnv6 unicast
 !
 address-family l2vpn evpn
 !
 neighbor fcbb:bb11:1::1
  remote-as 100
  update-source Loopback0
  address-family vpnv4 unicast
  !
  address-family vpnv6 unicast
  !
  address-family l2vpn evpn
  !
 !
 vrf BLUE
  rd auto
  address-family ipv4 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-ce
   !
  !
  address-family ipv6 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-ce
   !
  !
  neighbor 2001:15:5::15
   remote-as 65100
   address-family ipv6 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
  neighbor 2001:16:5::16
   remote-as 65100
   address-family ipv6 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
  neighbor 192.168.155.15
   remote-as 65100
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
  neighbor 192.168.165.16
   remote-as 65100
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
 !
 vrf GREEN
  rd auto
  address-family ipv4 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-vrf-46
   !
  !
  address-family ipv6 unicast
   segment-routing srv6
    locator PSPUSD
    alloc mode per-vrf-46
   !
  !
  neighbor 2001:13:5::13
   remote-as 65000
   address-family ipv6 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
  neighbor 2001:14:5::14
   remote-as 65000
   address-family ipv6 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
  neighbor 192.168.135.13
   remote-as 65000
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
  neighbor 192.168.145.14
   remote-as 65000
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
    as-override
   !
  !
 !
!
evpn
 evi 400 segment-routing srv6
  advertise-mac
  !
  locator PSPUSD
  !
 !
 segment-routing srv6
  locator PSPUSD
  !
 !
!
l2vpn
 xconnect group EVPN
  p2p EVPN
   interface GigabitEthernet0/0/0/1.300
   neighbor evpn evi 300 target 300 source 300 segment-routing srv6
   !
  !
 !
 bridge group E-LAN
  bridge-domain E-LAN
   interface GigabitEthernet0/0/0/4.400
   !
   interface GigabitEthernet0/0/0/5.400
   !
   evi 400 segment-routing srv6
   !      
  !
 !
!
segment-routing
 srv6
  locators
   locator SHIFT
    micro-segment behavior unode shift-only
    prefix fcbb:bb22:5::/48
   !
   locator PSPUSD
    micro-segment behavior unode psp-usd
    prefix fcbb:bb11:5::/48
   !
  !
 !
!
```