跳到內容

路由與下一跳

Argo 將轉發狀態與 Linux 核心分開維護。當 ip 與這些命令顯示的結果不一致時,以這些命令的結果為準進行流量轉發。

vRouter 路由表,依 VRF 區分。

Terminal window
{"command":["rt","--dump","2"]}
Flags: L=Label Valid, P=Proxy ARP, T=Trap ARP, F=Flood ARP, H=Proxy ARP for host interface, V=Preferred VRF
Labels/Misc: S=SiteId N=NetworkId
vRouter inet4 routing table 0/2/unicast
Destination PPL Flags Label Nexthop Labels/Misc
Number of routes: 4
0.0.0.0/0 0 - 0
169.254.254.102/32 32 L 263 13
172.16.12.126/32 32 L 0 46 (S,N):2298:0
172.16.84.126/32 32 L 0 46 (S,N):2298:0

下一跳表。每條路由都指向一個下一跳 id,此表負責解析它們。

Terminal window
{"command":["nh","--list"]}
Id:0 Type:Drop Fmly: AF_INET Rid:0 Vrf:0
Flags:Valid, Tunnel: None
Id:1 Type:Drop Fmly: AF_INET Rid:0 Vrf:0
Flags:Valid, Tunnel: None
Id:2 Type:Receive Fmly: AF_INET Rid:0 Vrf:1
Flags:Valid, Policy, Tunnel: Udp,
Oif:0
Id:3 Type:Receive Fmly: AF_INET Rid:0 Vrf:2
Flags:Valid, Policy, Tunnel: Udp,
Oif:0
Id:4 Type:Receive Fmly: AF_INET Rid:0 Vrf:3
Flags:Valid, Policy, Tunnel: Udp,
Oif:0
Id:5 Type:Receive Fmly: AF_INET Rid:0 Vrf:4
Flags:Valid, Policy, Tunnel: Udp,
Oif:0
Id:6 Type:Vrf_Translate Fmly: AF_INET Rid:0 Vrf:1
Flags:Valid, Policy, Tunnel: None
Id:7 Type:Vrf_Translate Fmly: AF_INET Rid:0 Vrf:2
Flags:Valid, Policy, Tunnel: None
Id:8 Type:Vrf_Translate Fmly: AF_INET Rid:0 Vrf:3
Flags:Valid, Policy, Tunnel: None
Id:9 Type:Vrf_Translate Fmly: AF_INET Rid:0 Vrf:4
Flags:Valid, Policy, Tunnel: None
Id:10 Type:Vrf_Translate Fmly: AF_INET Rid:0 Vrf:5
Flags:Valid, Policy, Tunnel: None
Id:11 Type:Vrf_Translate Fmly: AF_INET Rid:0 Vrf:6
Flags:Valid, Policy, Tunnel: None
Id:12 Type:Encap Fmly: AF_INET Rid:0 Vrf:1
Flags:Valid, Policy, Tunnel: None
Oif:2 Len:14
Encap Data: 02 01 02 03 04 05 00 00 5e 00 01 00 08 00
Id:13 Type:Encap Fmly: AF_INET Rid:0 Vrf:2
Flags:Valid, Policy, Tunnel: None
Oif:4 Len:14
Encap Data: 02 01 02 03 04 06 00 00 5e 00 01 00 08 00
Id:14 Type:Encap Fmly: AF_INET Rid:0 Vrf:3
Flags:Valid, Policy, Tunnel: None
Oif:6 Len:14
Encap Data: 00 00 5e 00 02 00 00 00 5e 00 01 00 08 00
Id:15 Type:Encap Fmly: AF_INET Rid:0 Vrf:6
Flags:Valid, Policy, Tunnel: None
Oif:10 Len:14
Encap Data: 02 01 02 03 04 09 00 00 5e 00 01 00 08 00
... [capture trimmed: first 60 of 3820 lines]

每個條目包含一個 Type 及其所屬的 VRF。這些節點上共出現八種類型, 計數後在所有三個 CE 上的比例完全相同:

Tunnel 558 Encap 27 NAT 22 Vrf 16 Receive 14 Composite 4 Drop 2 Resolve 2

解析至 Drop 下一跳的路由為黑洞路由,當某個前綴出現在 rt 中但流量仍然消失時,這種組合值得重點檢查。

虛擬介面表:資料平面所綁定的介面,以及各介面的計數器。

Terminal window
{"command":["vif","--list"]}
Vrouter Interface Table
Flags: P=Policy, X=Cross Connect, S=Service Chain, Mr=Receive Mirror
Mt=Transmit Mirror, Tc=Transmit Checksum Offload, L3=Layer 3, L2=Layer 2
D=DHCP, Vp=Vhost Physical, Pr=Promiscuous, Vnt=Native Vlan Tagged
Mnp=No MAC Proxy, Dpdk=DPDK PMD Interface, Rfl=Receive Filtering Offload, Mon=Interface is Monitored
Nf=Dont Fragment, Vof=VLAN insert/strip offload, Mq=MultiQ, L=MAC Learning Enabled
Proxy=MAC Requests Proxied Always, Fr=Force Recv, Mn=Mirror without Vlan Tag, TTL=TTL not modified
Mn=Mirror without Vlan Tag, Tun=Tunnel, NoArp=No ARP interface, RawIp=RAW IP interface(No L2 header)
Npers=Non-Persistent, NoRPF=No RPF Checks, SynC=Syn Cookies, Gro=GRO Enabled
NoIpfix=IPFIX disabled
evif0/1 Virtual: eth0 (Speed 10000, Duplex 1) Parent:vif0/-1
Type:Physical HWaddr:60:45:bd:eb:3f:f2 Driver: net_failsafe
CrossConnectIdx: 2 PartnerIdx: 14
Vrf:0 Mcast Vrf:0 VN:0x0 Flags:L3L2Vp Ref:7
MTU: 1500 EncMSS: 0 NH: 0
RX device packets:386252 bytes:355098338 errors:0
RX port packets:386252 errors:0
RX queue packets:385977 errors:0
RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 0 0
RX packets:386252 bytes:355098338 errors:0
TX packets:274826 bytes:132476854 errors:0
Drops:0
TX queue packets:27 errors:0
TX port packets:274826 errors:0
TX device packets:274826 bytes:132476854 errors:0
evif0/2 Virtual: vhost0 Parent:vif0/-1
Type:Host HWaddr:60:45:bd:eb:3f:f2 Driver: vr_dpdk_tap
CrossConnectIdx: 1 PartnerIdx: 15
Vrf:0 Mcast Vrf:0 VN:0x0 Flags:L3L2 Ref:6
MTU: 1500 EncMSS: 0 NH: 0
RX device packets:263582 bytes:122772389 errors:0
RX queue packets:263582 errors:0
RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 0 0
RX packets:263582 bytes:120136569 errors:0
TX packets:374276 bytes:343331787 errors:0
Drops:0
TX queue packets:370829 errors:3447
TX device packets:370820 bytes:341968151 errors:9
vif0/2 Ethernet: vethfrr0 Parent:vif0/-1
Type:Virtual HWaddr:0:0:5e:0:1:0 Driver: net_af_packet
Vrf:1 Mcast Vrf:1 VN:0x0 Flags:PL3Proxy Ref:10
MTU: 1500 EncMSS: 130 NH: 12
RX port packets:4919 errors:0
RX queue packets:4917 errors:0
RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 0 0
RX packets:907 bytes:153742 errors:0
TX packets:6 bytes:444 errors:0
Drops:905
TX queue packets:346 errors:0
TX port packets:3987 errors:0
Ingress ACL: 65 67
Egress ACL: 65 67
Service ACL: 65 67
vif0/4 Ethernet: vethbfd0 Parent:vif0/-1
Type:Virtual HWaddr:0:0:5e:0:1:0 Driver: net_af_packet
... [capture trimmed: first 60 of 378 lines]

頂部的旗標說明值得閱讀一次——Vp 標記 vhost 實體介面,Dpdk 標記由 DPDK 管理的介面。使用此表可確認資料平面已接管您預期的介面,並查看 Linux 不會顯示的 RX 與 TX 計數器(因為流量從未到達核心)。

Terminal window
execcli mpls --help

Argo MPLS 表。僅可從機器本端存取——mpls 不在除錯 API 上,因此與上述 rtnhvif 不同,需要透過 SSH序列主控台,並使用 execcli 執行。

此處未提供擷取輸出。在此部署中,CE 使用 BGP 與 ECMP 轉發 IPv4,不使用 MPLS 標籤,因此擷取結果只會顯示空表,無法提供任何參考價值。其存在性及 --help 參數形式已從設備自身的補全選單中驗證;其填入後的輸出內容在此不予重現。