- SONiC/doc: HLD: Routing and Next Hop Table Enhancement
- This document provides general information about an enhancement to the internal APP_DB routing table to split next hop information out into its own table.
Next Hop Group SAI Object 作成フロー
- nexthop#1: Create
SAI_OBJECT_TYPE_NEIGHBOR_ENTRY
-> CreateSAI_OBJECT_TYPE_NEXT_HOP
- nexthop#2: Create
SAI_OBJECT_TYPE_NEIGHBOR_ENTRY
-> CreateSAI_OBJECT_TYPE_NEXT_HOP
- Create
SAI_OBJECT_TYPE_NEXT_HOP_GROUP
- Create
SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER
- Set nexthop#1,#2 oid as
SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID
- Set nexthop#1,#2 oid as
- Create
SAI_OBJECT_TYPE_ROUTE_ENTRY
- Set nexthop_group oid as
SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID
- Set nexthop_group oid as
- ECMP となる IPv4 Static Route を設定
admin@sonic:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.100
admin@sonic:~$ sudo config route add prefix 10.99.0.0/24 nexthop 10.0.0.101
admin@sonic:~$ show ip route
C>* 10.0.0.0/24 is directly connected, Ethernet0, 1d01h06m
S>* 10.99.0.0/24 [1/0] via 10.0.0.100, Ethernet0, weight 1, 00:00:07
* via 10.0.0.101, Ethernet0, weight 1, 00:00:07
...snip...
- SONiC APPL_DB / ASIC_DB
admin@sonic:~$ sonic-db-cli APPL_DB HGETALL ROUTE_TABLE:10.99.0.0/24
{'nexthop': '10.0.0.100,10.0.0.101', 'ifname': 'Ethernet0,Ethernet0', 'weight': '1,1'}
admin@sonic:~$ sonic-db-cli ASIC_DB keys * | grep 10.99
ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY:{"dest":"10.99.0.0/24","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000048"}
admin@sonic:~$ sonic-db-cli ASIC_DB HGETALL 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY:{"dest":"10.99.0.0/24","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000048"}'
{'SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID': 'oid:0x5000000002755'}
ipv4_nhg_99.json
[
{
"ROUTE_TABLE:10.99.0.0/24": {
"nexthop": "10.0.0.100,10.0.0.101",
"ifname": "Ethernet0,Ethernet0",
"weight": "1,1"
},
"OP": "SET"
}
]
swss.rec
2022-10-29.09:33:28.502602|ROUTE_TABLE:10.99.0.0/24|SET|ifname:Ethernet0,Ethernet0|nexthop:10.0.0.100,10.0.0.101|weight:1,1
2022-10-29.09:33:28.505773|NEIGH_TABLE:Ethernet0:10.0.0.100|SET|neigh:0c:42:a1:46:64:a2|family:IPv4
2022-10-29.09:33:28.506198|NEIGH_TABLE:Ethernet0:10.0.0.101|SET|neigh:0c:42:a1:46:64:a2|family:IPv4
sairedis.rec
2022-10-29.09:33:28.506496|c|SAI_OBJECT_TYPE_NEIGHBOR_ENTRY:{"ip":"10.0.0.100","rif":"oid:0x600000000037f","switch_id":"oid:0x21000000000000"}|SAI_NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS=0C:42:A1:46:64:A2
2022-10-29.09:33:28.509289|c|SAI_OBJECT_TYPE_NEXT_HOP:oid:0x4000000000381|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:0x600000000037f
2022-10-29.09:33:28.511105|c|SAI_OBJECT_TYPE_NEIGHBOR_ENTRY:{"ip":"10.0.0.101","rif":"oid:0x600000000037f","switch_id":"oid:0x21000000000000"}|SAI_NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS=0C:42:A1:46:64:A2
2022-10-29.09:33:28.513627|c|SAI_OBJECT_TYPE_NEXT_HOP:oid:0x4000000000382|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:0x600000000037f
2022-10-29.09:33:28.515523|c|SAI_OBJECT_TYPE_NEXT_HOP_GROUP:oid:0x5000000000383|SAI_NEXT_HOP_GROUP_ATTR_TYPE=SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_UNORDERED_ECMP
2022-10-29.09:33:28.519971|C|SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER||oid:0x2d000000000384|SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID=oid:0x5000000000383|SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID=oid:0x4000000000381|SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT=1||oid:0x2d000000000385|SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID=oid:0x5000000000383|SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID=oid:0x4000000000382|SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT=1
2022-10-29.09:33:28.524226|C|SAI_OBJECT_TYPE_ROUTE_ENTRY||{"dest":"10.99.0.0/24","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000048"}|SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID=oid:0x5000000000383
ASIC_DB
ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE:oid:0x600000000037f
{'SAI_ROUTER_INTERFACE_ATTR_VIRTUAL_ROUTER_ID': 'oid:0x3000000000048', '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:0x100000000004e', 'SAI_ROUTER_INTERFACE_ATTR_MTU': '9100'}
ASIC_STATE:SAI_OBJECT_TYPE_NEIGHBOR_ENTRY:{"ip":"10.0.0.101","rif":"oid:0x600000000037f","switch_id":"oid:0x21000000000000"}
{'SAI_NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS': '0C:42:A1:46:64:A2'}
ASIC_STATE:SAI_OBJECT_TYPE_NEIGHBOR_ENTRY:{"ip":"10.0.0.100","rif":"oid:0x600000000037f","switch_id":"oid:0x21000000000000"}
{'SAI_NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS': '0C:42:A1:46:64:A2'}
ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP:oid:0x4000000000381
{'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:0x600000000037f'}
ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP:oid:0x4000000000382
{'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:0x600000000037f'}
ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP:oid:0x5000000000383
{'SAI_NEXT_HOP_GROUP_ATTR_TYPE': 'SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_UNORDERED_ECMP'}
ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER:oid:0x2d000000000384
{'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT': '1', 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID': 'oid:0x4000000000381', 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID': 'oid:0x5000000000383'}
ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER:oid:0x2d000000000385
{'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT': '1', 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID': 'oid:0x4000000000382', 'SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID': 'oid:0x5000000000383'}
ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY:{"dest":"10.99.0.0/24","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000048"}
{'SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID': 'oid:0x5000000000383'}