Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Next Hop Group on SONiC (Japanese)

ebiken
November 23, 2022

Next Hop Group on SONiC (Japanese)

Next Hop や Next Hop Group の概要と、SONiC での設定方法、各種データベース(CONFIG_DB, APPL_DB, ASIC_DB)エントリの形式を解説

English Version: https://speakerdeck.com/ebiken/next-hop-group-on-sonic-english

ebiken

November 23, 2022
Tweet

More Decks by ebiken

Other Decks in Technology

Transcript

  1. Next Hop Group on SONiC Twitter: @ebiken https://github.com/ebiken Next Hop

    Group on SONiC | Twitter: @ebiken | 2022/11/23
  2. • Next Hop Group (NHG) 概要 • Route Entry &

    Next Hop • Route Entry & Next Hop データ構造 • Next Hop Group on SONiC • SONiC における Next Hop Group (Multipath Route) • ASIC_DB エントリ • CLIで設定した場合の各種 DB の変化(CONFIG_DB, APPL_DB, ASIC_DB) • その他:参考情報 • (参考)ASIC_DB エントリの変化(詳細)(CLI で設定した場合) • (参考)SWSS / SAI の動作ログ(swss.rec , sairedis.rec)(CLI で設定した場合) • (参考)FRR での Next Hop Group 確認方法 • (参考)direct attached network に関する nexthop_id • (参考)ASIC エントリ確認方法 • 参考文献 Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23 目次 Wedge100BF-32X (Tofino) SONiC-OS-master.143513-dirty-20220903.195418
  3. Next Hop Group (NHG) 概要 Next Hop Group on SONiC

    | Twitter: @ebiken | 2022/11/23
  4. • route は宛先(prefix)に対応した転送先情報 gateway (gw) と device (dev) を保持 •

    この場合の prefix は Longest Prefix Match に利用されマスク(len)を含む • gw (address) により dev が決定する場合等、dev を指定しなくてもOS等により解 決される場合もあり • gw の MAC アドレスは別途解決され neightbor table に保存される(Linuxの場合) • 実装により様々な保持の仕方(データ構造)が存在する Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23 Route Entry & Next Hop A B C D route prefix: D dev : ens0 gw : B ens0 route ens1
  5. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    Route Entry & Next Hop データ構造 route prefix dev gateway route prefix nexthop nexthop dev gateway ip route add <prefix> via <gw> [dev <device>] ip route add <prefix> nexthop via <gw> [dev <device>] route group nexthop nexthop dev gateway nexthop dev gateway nexthop dev gateway nexthop group nexthop[N] ① route entry に nexthop 情報 を内包(Linux 5.2 以前) ② route entry と nexthop object の分離(Linux 5.3 以降) ※ Linux 5.2 は nexthop サポートに向け たリファクタリングが含まれる。但し、 fib_info には fib_nh のみ含まれ nexthop はまだ含まれない Linux コマンド
  6. Next Hop Group on SONiC Next Hop Group on SONiC

    | Twitter: @ebiken | 2022/11/23
  7. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    SONiC における Next Hop Group (Multipath Route) ROUTE_TABLE Key: 10.99.0.0/24 Value: 'nexthop': '10.0.0.100,10.0.0.101' 'ifname': 'Ethernet0,Ethernet0' 'weight': '1,1' ROUTE_TABLE Key: 10.99.0.0/24 Value: 'nexthop_group': 'nhg1' NEXT_HOP_GROUP_TABLE Key: nhg1 Value: 'nexthop': '10.0.0.100,10.0.0.101' 'ifname': 'Ethernet0,Ethernet0' APPL_DBエントリの形式が異なる2通りの方法が存在(20220903時点) ROUTE_TABLE エントリのみ (NEXT_HOP_GROUP_TABLE エントリ無し) ASIC_DBエントリの形式は共通 CLI の有無 APPL_DB 形式 ASIC_DB 形式 ROUTE_TABLE + NEXT_HOP_GROUP_TABLE エントリ APPL_DB に直接エントリを追加する必要あり CLIから設定可能 config route add prefix 10.99.0.0/24 nexthop 10.0.0.100 config route add prefix 10.99.0.0/24 nexthop 10.0.0.101 ASIC_DBエントリの形式は共通 (SONiC HLD: Routing and Next Hop Table Enhancement で機能追加) https://github.com/sonic-net/SONiC/blob/master/doc/ip/next_hop_group_hld.md
  8. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    ASIC_DB エントリ(Next Hop 1つ) Next Hop が1つの場合 ⇒ ASIC_DB エントリは異なる sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.100 NEXT_HOP Key: oid: 3 Value: { NEXT_HOP_ATTR_IP: 10.0.0.100 NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } ROUTE_ENTRY Key: { dest: 10.99.0.0/24 } Value: { NEXT_HOP_ID: 3 } ROUTE_ENTRY Key: { dest: 10.99.0.0/24 } Value: { NEXT_HOP_ID: 5 } NEXT_HOP_GROUP_MEMBER Key: oid: 6 Value: { NEXT_HOP_GROUP_ID: oid: 5 NEXT_HOP_ID: oid: 3 } NEXT_HOP_GROUP Key: oid: 5 NEXT_HOP Key: oid: 3 Value: { NEXT_HOP_ATTR_IP: 10.0.0.100 NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } APPL_DB ROUTE_TABLE:10.99.0.0/24{'nexthop_group': 'nhg1'} NEXTHOP_GROUP_TABLE:nhg1 {'nexthop': '10.0.0.100', 'ifname': 'Ethernet0'} APPL_DB ROUTE_TABLE:10.99.0.0/24 {'nexthop': '10.0.0.100','ifname': 'Ethernet0'} ※ Next Hop が1つの場合でも NEXT_HOP_GROUP が作成される
  9. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    ASIC_DB Entry(Next Hop 2つ) Next Hop が2つ以上場合 ⇒ ASIC_DB エントリは同じ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.100 sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.101 NEXT_HOP Key: oid: 3 Value: { NEXT_HOP_ATTR_IP: 10.0.0.100 NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } ROUTE_ENTRY Key: { dest: 10.99.0.0/24 } Value: { NEXT_HOP_ID: 5 } NEXT_HOP_GROUP_MEMBER Key: oid: 7 Value: { NEXT_HOP_GROUP_ID: oid: 5 NEXT_HOP_ID: oid: 4 } NEXT_HOP_GROUP Key: oid: 5 NEXT_HOP Key: oid: 4 Value: { NEXT_HOP_ATTR_IP: 10.0.0.100 NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } APPL_DB ROUTE_TABLE:10.99.0.0/24{'nexthop_group': 'nhg1'} NEXTHOP_GROUP_TABLE:nhg1 {'nexthop': '10.0.0.100,10.0.0.101', 'ifname': 'Ethernet0,Ethernet0'} APPL_DB ROUTE_TABLE:10.99.0.0/24 {'nexthop': '10.0.0.100,10.0.0.101','ifname': 'Ethernet0,Ethernet0’, 'weight': '1,1’} NEXT_HOP_GROUP_MEMBER Key: oid: 6 Value: { NEXT_HOP_GROUP_ID: oid: 5 NEXT_HOP_ID: oid: 3 }
  10. CLIで設定した場合の各種 DB の変化 (CONFIG_DB, APPL_DB, ASIC_DB) CLI で設定した場合はエントリの変化が複雑になるため詳細を解説 Next Hop

    Group on SONiC | Twitter: @ebiken | 2022/11/23
  11. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    CONFIG_DB, APPL_DB エントリの変化(CLI から設定した場合) 同一 prefix に複数の nexthop を設定すると、2つ目以降は同じエントリの Value に追加される ROUTE_TABLE Key: 10.99.0.0/24 Value: 'nexthop': '10.0.0.100', 'ifname': 'Ethernet0' STATIC_ROUTE Key: 10.99.0.0/24 Value: "blackhole":"false", "distance":"0", "ifname":"", "nexthop":"10.0.0.100", "nexthop-vrf":"" [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.100 (CONFIG_DB) (APPL_DB) ROUTE_TABLE Key: 10.99.0.0/24 Value: 'nexthop': '10.0.0.100,10.0.0.101', 'ifname': 'Ethernet0,Ethernet0', 'weight': '1,1' STATIC_ROUTE Key: 10.99.0.0/24 Value: "blackhole":"false,false", "distance":"0,0", "ifname":",", "nexthop":"10.0.0.100,10.0.0.101", "nexthop-vrf":"," [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.100 [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.101 (CONFIG_DB) (APPL_DB)
  12. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    ASIC_DB エントリの変化(CLI で設定した場合) [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.100 NEXT_HOP Key: oid: 3 Value: { NEXT_HOP_ATTR_IP: 10.0.0.100, NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } ROUTE_ENTRY Key: { dest: 10.99.0.0/24, } Value: { NEXT_HOP_ID: 3 }
  13. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    ASIC_DB エントリの変化(CLI で設定した場合) [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.100 [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.101 ROUTE_ENTRY Key: { dest: 10.99.0.0/24, } Value: { NEXT_HOP_ID: 3 } NEXT_HOP_GROUP Key: oid: 5 NEXT_HOP Key: oid: 3 Value: { NEXT_HOP_ATTR_IP: 10.0.0.100, NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } NEXT_HOP Key: oid: 4 Value: { NEXT_HOP_ATTR_IP: 10.0.0.101, NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } 1 2
  14. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    ASIC_DB エントリの変化(CLI で設定した場合) [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.100 [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.101 ROUTE_ENTRY Key: { dest: 10.99.0.0/24, } Value: { NEXT_HOP_ID: 3 } NEXT_HOP_GROUP_MEMBER Key: oid: 6 Value: { NEXT_HOP_GROUP_ID: oid: 5, NEXT_HOP_ID: oid: 3 } NEXT_HOP_GROUP Key: oid: 5 NEXT_HOP_GROUP_MEMBER Key: oid: 7 Value: { NEXT_HOP_GROUP_ID: oid: 5, NEXT_HOP_ID': oid: 4 } NEXT_HOP Key: oid: 3 Value: { NEXT_HOP_ATTR_IP: 10.0.0.100, NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } NEXT_HOP Key: oid: 4 Value: { NEXT_HOP_ATTR_IP: 10.0.0.101, NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } 1 3 4 2
  15. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    ASIC_DB エントリの変化(CLI で設定した場合) [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.100 [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.101 ROUTE_ENTRY Key: { dest: 10.99.0.0/24, } Value: { NEXT_HOP_ID: 5 } NEXT_HOP_GROUP_MEMBER Key: oid: 6 Value: { NEXT_HOP_GROUP_ID: oid: 5, NEXT_HOP_ID: oid: 3 } NEXT_HOP_GROUP Key: oid: 5 NEXT_HOP_GROUP_MEMBER Key: oid: 7 Value: { NEXT_HOP_GROUP_ID: oid: 5, NEXT_HOP_ID': oid: 4 } NEXT_HOP Key: oid: 3 Value: { NEXT_HOP_ATTR_IP: 10.0.0.100, NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } NEXT_HOP Key: oid: 4 Value: { NEXT_HOP_ATTR_IP: 10.0.0.101, NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } 1 3 4 2 5 ※ NEXT_HOP と NEXT_HOP_GROUP は共通の oid 空間を共有 ⇒ Route に紐づけされた NEXT_HOP を変更せずに NEXT_HOP_GROUP に変更可能
  16. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    ASIC_DB エントリの変化(CLI で設定した場合) [email protected]:~$ sudo config route add prefix 10.88.0.0/24 nexthop 10.0.0.100 [email protected]:~$ sudo config route add prefix 10.88.0.0/24 nexthop 10.0.0.101 ROUTE_ENTRY Key: { dest: 10.99.0.0/24, } Value: { NEXT_HOP_ID: 5 } NEXT_HOP_GROUP_MEMBER Key: oid: 6 Value: { NEXT_HOP_GROUP_ID: oid: 5, NEXT_HOP_ID: oid: 3 } NEXT_HOP_GROUP Key: oid: 5 NEXT_HOP_GROUP_MEMBER Key: oid: 7 Value: { NEXT_HOP_GROUP_ID: oid: 5, NEXT_HOP_ID': oid: 4 } NEXT_HOP Key: oid: 3 Value: { NEXT_HOP_ATTR_IP: 10.0.0.100, NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } NEXT_HOP Key: oid: 4 Value: { NEXT_HOP_ATTR_IP: 10.0.0.101, NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: 1 } 1 3 4 2 5 ROUTE_ENTRY Key: { dest: 10.88.0.0/24, } Value: { NEXT_HOP_ID: 5 } 6 ※ 同じ Next Hop を持つ ROUTE_ENTRY の場合、同じ NEXT_HOP_GROUP を参照
  17. その他:参考情報 Next Hop Group on SONiC | Twitter: @ebiken |

    2022/11/23
  18. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    (参考)ASIC_DB エントリの変化(詳細)(CLI で設定した場合) [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.100 [email protected]:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.101 [email protected]:~$ sudo config route add prefix 10.88.0.0/24 nexthop 10.0.0.100 [email protected]:~$ sudo config route add prefix 10.88.0.0/24 nexthop 10.0.0.101 SAI_OBJECT_TYPE_ROUTE_ENTRY Key: { "dest":"10.99.0.0/24", "switch_id":"oid:0x21000000000000", "vr":"oid:0x300000000004a" } Value: { 'SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID': 'oid:0x40000000003a3' } SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER Key: oid:0x2d0000000003a6 Value: { 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID': 'oid:0x50000000003a5’, 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID': 'oid:0x40000000003a3’, 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT': '1', 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_SEQUENCE_ID': '1' } SAI_OBJECT_TYPE_NEXT_HOP_GROUP Key: oid:0x50000000003a5 Value: { 'SAI_NEXT_HOP_GROUP_ATTR_TYPE': 'SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_ORDERED_ECMP' } SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER Key: oid:0x2d0000000003a7 Value: { 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID': 'oid:0x50000000003a5’, 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID': 'oid:0x40000000003a4’, 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT': '1', 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_SEQUENCE_ID': '2' } SAI_OBJECT_TYPE_NEXT_HOP Key: oid:0x40000000003a3 Value: { 'SAI_NEXT_HOP_ATTR_TYPE': 'SAI_NEXT_HOP_TYPE_IP', 'SAI_NEXT_HOP_ATTR_IP': '10.0.0.100', 'SAI_NEXT_HOP_ATTR_ROUTER_INTERFACE_ID': 'oid:0x60000000003a1' } SAI_OBJECT_TYPE_NEXT_HOP Key: oid:0x40000000003a4 Value: { 'SAI_NEXT_HOP_ATTR_TYPE': 'SAI_NEXT_HOP_TYPE_IP', 'SAI_NEXT_HOP_ATTR_IP': '10.0.0.101', 'SAI_NEXT_HOP_ATTR_ROUTER_INTERFACE_ID': 'oid:0x60000000003a1' } SAI_OBJECT_TYPE_ROUTE_ENTRY Key: { "dest":"10.99.0.0/24", "switch_id":"oid:0x21000000000000", "vr":"oid:0x300000000004a" } Value: { 'SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID': 'oid:0x50000000003a5’ } SAI_OBJECT_TYPE_ROUTE_ENTRY Key: { "dest":"10.88.0.0/24", "switch_id":"oid:0x21000000000000", "vr":"oid:0x300000000004a" } Value: { 'SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID': 'oid:0x50000000003a5' }
  19. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    (参考)SWSS / SAI の動作ログ(swss.rec , sairedis.rec)(CLI で設定した場合) $ tail -f /var/log/swss/swss.log ROUTE_TABLE:10.99.0.0/24|SET| • nexthop:10.0.0.100 • ifname:Ethernet0 NEIGH_TABLE:Ethernet0:10.0.0.100|SET|neigh:0c:42:a1:46:64:a2|family:IPv4 ROUTE_TABLE:10.99.0.0/24|SET| • nexthop:10.0.0.100,10.0.0.101 • ifname:Ethernet0,Ethernet0 • weight:1,1 NEIGH_TABLE:Ethernet0:10.0.0.101|SET|neigh:0c:42:a1:46:64:a2|family:IPv4 $ tail -f /var/log/swss/sairedis.rec SAI_OBJECT_TYPE_NEIGHBOR_ENTRY:{"ip":"10.0.0.100","rif":"oid:0x60000000003a1","switch_id":"oid:0x21000000000000"} • SAI_NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS=0C:42:A1:46:64:A2 SAI_OBJECT_TYPE_NEXT_HOP:oid:0x40000000003a3 • SAI_NEXT_HOP_ATTR_TYPE=SAI_NEXT_HOP_TYPE_IP • SAI_NEXT_HOP_ATTR_IP=10.0.0.100 • SAI_NEXT_HOP_ATTR_ROUTER_INTERFACE_ID=oid:0x60000000003a1 SAI_OBJECT_TYPE_ROUTE_ENTRY||{"dest":"10.99.0.0/24","switch_id":"oid:0x21000000000 000","vr":"oid:0x300000000004a"} • SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID=oid:0x40000000003a3 SAI_OBJECT_TYPE_NEIGHBOR_ENTRY:{"ip":"10.0.0.101","rif":"oid:0x60000000003a1","switch_id":"oid:0x21000000000000"} • SAI_NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS=0C:42:A1:46:64:A2 SAI_OBJECT_TYPE_NEXT_HOP:oid:0x40000000003a4 • SAI_NEXT_HOP_ATTR_TYPE=SAI_NEXT_HOP_TYPE_IP • SAI_NEXT_HOP_ATTR_IP=10.0.0.101 • SAI_NEXT_HOP_ATTR_ROUTER_INTERFACE_ID=oid:0x60000000003a1 SAI_OBJECT_TYPE_NEXT_HOP_GROUP:oid:0x50000000003a5 • SAI_NEXT_HOP_GROUP_ATTR_TYPE=SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_ORDERED_ECMP SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER ||oid:0x2d0000000003a6 • SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID=oid:0x50000000003a5 • SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID=oid:0x40000000003a3 • SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT=1 • SAI_NEXT_HOP_GROUP_MEMBER_ATTR_SEQUENCE_ID=1 ||oid:0x2d0000000003a7 • SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID=oid:0x50000000003a5 • SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID=oid:0x40000000003a4 • SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT=1 • SAI_NEXT_HOP_GROUP_MEMBER_ATTR_SEQUENCE_ID=2 SAI_OBJECT_TYPE_ROUTE_ENTRY||{"dest":"10.99.0.0/24","switch_id":"oid:0x21000000000 000","vr":"oid:0x300000000004a"} • SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID=oid:0x50000000003a5
  20. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    (参考)FRR での Next Hop Group 確認方法 sonic# show ip route nexthop-group Codes: K - kernel route, C - connected, S - static, R - RIP, ...snip... S>* 10.88.0.0/24 [1/0] (26) via 10.0.0.100, Ethernet0, weight 1, 00:01:39 * via 10.0.0.101, Ethernet0, weight 1, 00:01:39 S>* 10.99.0.0/24 [1/0] (26) via 10.0.0.100, Ethernet0, weight 1, 04:56:29 * via 10.0.0.101, Ethernet0, weight 1, 04:56:29 sonic# show nexthop-group rib 26 ID: 26 (zebra) RefCnt: 2 Uptime: 01:08:01 VRF: default Valid, Installed Depends: (22) (27) via 10.0.0.100, Ethernet0 (vrf default), weight 1 via 10.0.0.101, Ethernet0 (vrf default), weight 1 sonic# show nexthop-group rib 22 ID: 22 (zebra) RefCnt: 3 Uptime: 02:27:13 VRF: default Valid, Installed Interface Index: 8 via 10.0.0.100, Ethernet0 (vrf default), weight 1 Dependents: (26) sonic# show nexthop-group rib 27 ID: 27 (zebra) RefCnt: 3 Uptime: 07:19:32 VRF: default Valid, Installed Interface Index: 8 via 10.0.0.101, Ethernet0 (vrf default), weight 1 Dependents: (26) SONiC host から vtysh で FRR CLI にアクセス [email protected]:~$ vtysh Hello, this is FRRouting (version 8.2.2). Copyright 1996-2005 Kunihiro Ishiguro, et al. sonic# FRR は fpmsyncd に対しては NHA_GROUP(Next Hop Attribute Group)を使用しないため、「CLIで設定した場 合」の動作となる。 すなわち APPL_DBにはNEXT_HOP_GROUP_TABLE エ ントリは作成されず ROUTE_TABLE エントリのみとなる。
  21. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    (参考)direct attached network に関する nexthop_id > route entry の nexthop_id は router_interface を参照 (nexthop object ではなく) [email protected]:~$ sonic-db-cli ASIC_DB HGETALL 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY:{ "dest":"10.0.0.0/24","switch_id":"oid:0x21000000000000","vr":" oid:0x300000000004a"}' {'SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID': 'oid:0x60000000003a1’} [email protected]:~$ sonic-db-cli ASIC_DB HGETALL ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE:oid:0x60000000003a1 {'SAI_ROUTER_INTERFACE_ATTR_VIRTUAL_ROUTER_ID': 'oid:0x300000000004a', 'SAI_ROUTER_INTERFACE_ATTR_SRC_MAC_ADDRESS': '00:90:FB:65:D6:FE’, 'SAI_ROUTER_INTERFACE_ATTR_TYPE': 'SAI_ROUTER_INTERFACE_TYPE_PORT’, 'SAI_ROUTER_INTERFACE_ATTR_PORT_ID': 'oid:0x1000000000050’, 'SAI_ROUTER_INTERFACE_ATTR_MTU': '9100’}
  22. Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23

    (参考)ASIC エントリ確認方法 [email protected]:~$ docker exec -it syncd bash [email protected]:/# [email protected]:/# /opt/bfn/install/bin/bfshell ******************************************** * WARNING: Authorised Access Only * ******************************************** bfshell> syncd / sonic host から ASIC 固有の debug コマンドを利用 ※ 具体的な利用方法解説には各ASICベンダとのNDAが必要なため省略 [email protected]:~$ bcmsh Press Enter to show prompt. Press Ctrl+C to exit. NOTICE: Only one bcmsh or bcmcmd can connect to the shell at same time. drivshell>
  23. • Improving Route Scalability: Nexthops as Separate Objects • Linux

    Plumbers Conf 2019: David Ahern @Cumulus • https://lpc.events/event/4/contributions/434/attachments/251/436/nexthop-objects-talk.pdf • https://www.youtube.com/watch?v=HIqvUiwDHGk • lwn.net [net: Improve route scalability via support for nexthop objects] • https://lwn.net/Articles/763950/ • FRR: Docs: • Nexthop Groups: https://docs.frrouting.org/en/latest/nexthop_groups.html • Multiple nexthop static route: https://docs.frrouting.org/en/latest/static.html#multiple- nexthop-static-route • RFC5549 Advertising IPv4 Network Layer Reachability Information with an IPv6 Next Hop • https://datatracker.ietf.org/doc/rfc5549/ • RFC8950 Advertising IPv4 Network Layer Reachability Information (NLRI) with an IPv6 Next Hop • https://datatracker.ietf.org/doc/rfc8950/ Next Hop Group on SONiC | Twitter: @ebiken | 2022/11/23 参考文献