Salta ai contenuti

Route e next hop

Argo mantiene lo stato di inoltro separato dal kernel Linux. Quando ip e questi comandi non concordano, sono questi comandi a determinare il movimento del traffico.

La tabella delle route del vRouter, per 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

La tabella dei next-hop. Ogni route punta a un ID next-hop e questo li risolve.

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]

Ogni voce contiene un campo Type e il VRF a cui appartiene. Su questi nodi si riscontrano otto tipi, nelle seguenti proporzioni — identiche su tutti e tre i CE quando conteggiate:

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

Una route che si risolve in un next-hop di tipo Drop è un blackhole, e tale combinazione vale la pena verificare ogni volta che un prefisso è presente in rt ma il traffico continua a scomparire.

La tabella delle interfacce virtuali: a cosa si aggancia il piano dati e i contatori per interfaccia.

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]

La legenda dei flag in cima merita una lettura — Vp contrassegna l’interfaccia fisica vhost, Dpdk una gestita da DPDK. Utilizzarla per confermare che il piano dati abbia acquisito l’interfaccia attesa e per visualizzare i contatori RX e TX che Linux non mostra perché il traffico non raggiunge mai il kernel.

Terminal window
execcli mpls --help

La tabella MPLS di Argo. Accessibile solo dalla macchinampls non è presente nell’API di debug, quindi a differenza di rt, nh e vif riportati sopra, richiede SSH o la console seriale, tramite execcli.

Non è presente alcun output catturato. In questo deployment il CE instrada IPv4 con BGP ed ECMP e non utilizza etichette MPLS, pertanto una cattura mostrerebbe una tabella vuota e non fornirebbe alcuna informazione utile. La sua esistenza e la forma del suo argomento --help sono verificate dal menu di completamento dell’appliance stessa; il suo output popolato non viene riprodotto.