路由与下一跳
Argo 将转发状态与 Linux 内核分开维护。当
ip 与这些命令的结果不一致时,以这些命令为准来决定流量的转发。
vRouter 路由表,按 VRF 划分。
{"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 VRFLabels/Misc: S=SiteId N=NetworkIdvRouter inet4 routing table 0/2/unicastDestination PPL Flags Label Nexthop Labels/Misc Number of routes: 4
0.0.0.0/0 0 - 0169.254.254.102/32 32 L 263 13172.16.12.126/32 32 L 0 46 (S,N):2298:0172.16.84.126/32 32 L 0 46 (S,N):2298:0下一跳表。每条路由都指向一个下一跳 id,此命令用于解析它们。
{"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 中但流量仍然消失时,这种组合值得重点排查。
虚拟接口表:数据平面绑定的内容以及各接口的计数器。
{"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 计数器(因为该流量从未到达内核)。
execcli mpls --helpArgo MPLS 表。仅可从设备本机访问——mpls 不在调试 API 中,因此与上述 rt、nh、vif 不同,需要通过 SSH 或
串口控制台,并借助
execcli 来使用。
此处没有抓取示例输出。在本部署中,CE 使用 BGP 和 ECMP 转发 IPv4,不使用 MPLS 标签,因此抓取内容将显示空表,毫无参考价值。其存在性及 --help 参数形式已通过设备自身的补全菜单验证;其填充后的输出不在此处复现。