Tungsten Fabric Knowledge Base丨vRouter内部実行プローブ
18506 ワード
テキストリンク:https://github.com/tnaganawa/tungstenfabric-docs/blob/master/TungstenFabricKnowledgeBase.md
作者:Tatsuya Naganawa訳者:TFコンパイルグループ
このシリーズは「Tungsten Fabric入門宝典」の姉妹編で、Tungsten Fabricの導入に関する様々なテーマを追加紹介します.
vhost 0デバイス
vRouterを最初に起動すると、vhost 0インタフェースが作成され、物理インタフェースに最初に割り当てられたIPおよびMACがvhost 0に移動します.
したがって,自然仮定の場合,vhost 0はvRouter自体であり,外部ノードFabricに対してARP応答を行い,トラフィックはまずvhost 0を通過し,その後仮想マシンに入る.
実際、事実はそうではない.
説明として、VXLANなどのoverlayトラフィックに対してvhost 0上でtcpdumpを実行する場合、いくつかのパケットは表示されず、この目的を達成するには物理インタフェースのtcpdumpが必要である.このドキュメントは、次のことを理解するのに役立ちます.https://wiki.tungsten.io/display/TUN/Offloads?preview=%2F1409118%2F1409513%2FTungsten+Fabric+ParaVirt+Offload+Arch.DOCX
dp-coreによってサービスされるいくつかのブリッジドメイン(bridge-domain)では、vhost 0はirbと類似しており、eth 0はこのブリッジドメインのL 2インタフェースの1つである. vRouter用語では、この状態を「xconnect(cross-connect)」と呼びます.私の理解では、ブリッジに似ています.https://github.com/tungstenfabric/tf-vrouter/blob/master/dp-core/vr_interface.c ブリッジドメイン(bridge-domain)はLinuxブリッジと同様の概念であり、複数の物理L 2インタフェースと1つの内部L 3インタフェースを有することができる.
したがって、eth 0がFabricからのARP要求を初めて受信すると、dp−coreは、eth 0に最初に割り当てられたMACアドレスに基づいてARP応答を返す.
その後、他の計算ノードは、overlayトラフィックまたはセルフトラフィックなどのいくつかのトラフィックをvRouterノードに送信する.
overlayトラフィック(udpポートまたはgreヘッダに基づいてdp-coreによって識別される)を使用すると、dp-coreは外部IPとラベルを剥離し、VRFをラベルに示される特定のVMにルーティングします. L 3 VXLANを使用する場合、L 3 VRFのルーティングテーブルに基づいてルーティング を行う. MPLSを使用する場合、ラベル自体が最終インタフェース を識別する.
dp-coreが自己流量(self traffic)を受信するとvhost_txでhif_を使用するrx(後者はlinux関数netif_rxを使用し、skbをパラメータとする)は、vRouterノード上のlinuxインタフェース、すなわちvhost 0にトラフィックを送信する. https://github.com/tungstenfabric/tf-vrouter/blob/master/dp-core/vr_interface.c#L813 https://github.com/tungstenfabric/tf-vrouter/blob/master/linux/vr_host_interface.c#L2380 https://github.com/tungstenfabric/tf-vrouter/blob/master/linux/vr_host_interface.c#L228
したがって、自己流量(self−traffic)のためのrx/txでは、パケットは常にdp−coreを通過し、伝送流量(transit traffic)ではvhost 0を通過しない.
skb to vr_packet
Linuxネットワークスタック使用sk_buffはパケットのメモリとして格納されます.
dp-coreではvr_を使用しますpacketなので、それらの間をどのように変換するかは面白いテーマです.
このため、vp_を使用します.os_packet関数. https://github.com/tungstenfabric/tf-vrouter/blob/master/include/vr_linux.h#L10
したがって、実際にはvr_packetは、skb構造内の位置によって定義されます(sk_buff->cbは、一部のアプリケーションで使用されるメンバー変数です).したがってskbとvr_packetはポインタ操作で変換できます.
cbは最大48バイトなのでvr_packetはこの数値より大きくできません.ここにはこの問題についての議論がある.
https://github.com/tungstenfabric/tf-vrouter/blob/master/include/vr_packet.h#L195-L198
vRouterが作成したLinuxインタフェース
vrouter-agentコンテナを初めて起動すると、vrouter-agentが停止しても実際には削除されない複数のインタフェースが作成されます.
何の目的でそれを使うのか、面白いテーマです.
以上、vrouter.koのvifインタフェースは常に対応するlinux netdeviceにバインドされているため、vif--createなどを使用してvRouterインタフェースを作成するとともに、ip linkまたはls/sys/class/netから見ることができるlinux netdeviceも作成されます.
「ip tuntap list」からの例です.
従ってLinuxの観点からpkt 0は実際にはTapデバイスである.
ある意味では、vifコマンドは、nova-vif-driverによって作成されたLinuxネットワークデバイス(例えばtapxxxx-xxxx)とvRouterインタフェースを確立し、デバイスを介したパケットがdp-coreによって受信されるようにする.
したがって、CNI等がコンテナに接続されたTapデバイスを発見すると、内部にvifを作成したvrouter−apiが送信され、その名前はTapデバイスと同じであり、Tapデバイスに入ったパケットをvRouter(dp−core)に転送する.
vrouter-agentを起動すると、vhost 0、pkt 0、pkt 1、pkt 2、pkt 3という特殊なデバイスが作成されます.
前述したように、vhost 0は、dp−coreのirbインタフェースと類似しているため、dp−coreルーティングが完了すると、vRouterノード自体のパケットを受信する.
vrouter-agentコンテナは起動時に/etc/sysconfig/network-scripts/{ifup-vhost,ifdown-vhost}を作成するため、ifup/ifdownで直接制御できます.内部タイプはvif--add vhost 0で、コマンドラインで直接作成および削除できます.
https://github.com/tungstenfabric/tf-container-builder/blob/master/containers/vrouter/base/network-functions-vrouter-kernel#L41
ここで、pkt 1,pkt 2,pkt 3はvrouter_linux_initのlinux_pkt_dev_allocで定義されたインタフェース、vrouter_linux_initはvrouterです.koのmodule_init. https://github.com/tungstenfabric/tf-vrouter/blob/master/linux/vr_host_interface.c#L2485
いくつかのGROとRPS機能を使用しており、カーネルvRouterのパフォーマンスを向上させる上で重要です.空のnet_に初期化されましたdevice_opsとランダムethernet addr.
ここでpkt 0は、dp-coreからvrouter-agentにパケットを送信するために少し異なります.
実際には、vrouter-agentが初めて起動したときに、vrouter-agentの要求に従って作成され、vrouter-agentと通信するTapデバイスを作成します. https://github.com/Juniper/contrail-controller/blob/master/src/vnsw/agent/contrail/contrail_agent_init.cc#L89 https://github.com/Juniper/contrail-controller/blob/master/src/vnsw/agent/oper/interface.cc#L626 https://github.com/tungstenfabric/tf-vrouter/blob/master/dp-core/vr_interface.c#L669
したがって、dp−coreからインタフェースにパケットを送信すると、vrouter−agentはパケットを受信し、パケットを内部で処理する(arp、dhcpなどはいずれもこのように処理する).
この動作を説明する別の説明として、modprobe vrouter、ifup vhost 0、vrouter-agentの起動が完了したら、ip-o addr、ip link、vif-listの結果を追加します.
作者:Tatsuya Naganawa訳者:TFコンパイルグループ
このシリーズは「Tungsten Fabric入門宝典」の姉妹編で、Tungsten Fabricの導入に関する様々なテーマを追加紹介します.
vhost 0デバイス
vRouterを最初に起動すると、vhost 0インタフェースが作成され、物理インタフェースに最初に割り当てられたIPおよびMACがvhost 0に移動します.
したがって,自然仮定の場合,vhost 0はvRouter自体であり,外部ノードFabricに対してARP応答を行い,トラフィックはまずvhost 0を通過し,その後仮想マシンに入る.
transit traffic:
vm - vhost0 - eth0
self traffic:
vhost0 - eth0
実際、事実はそうではない.
説明として、VXLANなどのoverlayトラフィックに対してvhost 0上でtcpdumpを実行する場合、いくつかのパケットは表示されず、この目的を達成するには物理インタフェースのtcpdumpが必要である.このドキュメントは、次のことを理解するのに役立ちます.https://wiki.tungsten.io/display/TUN/Offloads?preview=%2F1409118%2F1409513%2FTungsten+Fabric+ParaVirt+Offload+Arch.DOCX
transit traffic:
vm - (dp-core) - eth0
self traffic:
vhost0 - (dp-core) - eth0
dp-coreによってサービスされるいくつかのブリッジドメイン(bridge-domain)では、vhost 0はirbと類似しており、eth 0はこのブリッジドメインのL 2インタフェースの1つである.
したがって、eth 0がFabricからのARP要求を初めて受信すると、dp−coreは、eth 0に最初に割り当てられたMACアドレスに基づいてARP応答を返す.
その後、他の計算ノードは、overlayトラフィックまたはセルフトラフィックなどのいくつかのトラフィックをvRouterノードに送信する.
overlayトラフィック(udpポートまたはgreヘッダに基づいてdp-coreによって識別される)を使用すると、dp-coreは外部IPとラベルを剥離し、VRFをラベルに示される特定のVMにルーティングします.
dp-coreが自己流量(self traffic)を受信するとvhost_txでhif_を使用するrx(後者はlinux関数netif_rxを使用し、skbをパラメータとする)は、vRouterノード上のlinuxインタフェース、すなわちvhost 0にトラフィックを送信する.
したがって、自己流量(self−traffic)のためのrx/txでは、パケットは常にdp−coreを通過し、伝送流量(transit traffic)ではvhost 0を通過しない.
skb to vr_packet
Linuxネットワークスタック使用sk_buffはパケットのメモリとして格納されます.
dp-coreではvr_を使用しますpacketなので、それらの間をどのように変換するかは面白いテーマです.
このため、vp_を使用します.os_packet関数.
static inline struct sk_buff *
vp_os_packet(struct vr_packet *pkt)
{
return CONTAINER_OF(cb, struct sk_buff, pkt);
}
したがって、実際にはvr_packetは、skb構造内の位置によって定義されます(sk_buff->cbは、一部のアプリケーションで使用されるメンバー変数です).したがってskbとvr_packetはポインタ操作で変換できます.
cbは最大48バイトなのでvr_packetはこの数値より大きくできません.ここにはこの問題についての議論がある.
https://github.com/tungstenfabric/tf-vrouter/blob/master/include/vr_packet.h#L195-L198
/*
* NOTE: Please do not add any more fields without ensuring
* that the size is <= 48 bytes in 64 bit systems.
*/
vRouterが作成したLinuxインタフェース
vrouter-agentコンテナを初めて起動すると、vrouter-agentが停止しても実際には削除されない複数のインタフェースが作成されます.
何の目的でそれを使うのか、面白いテーマです.
以上、vrouter.koのvifインタフェースは常に対応するlinux netdeviceにバインドされているため、vif--createなどを使用してvRouterインタフェースを作成するとともに、ip linkまたはls/sys/class/netから見ることができるlinux netdeviceも作成されます.
「ip tuntap list」からの例です.
[root@ip-172-31-12-55 ~]# ip -o a
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
1: lo inet6 ::1/128 scope host \ valid_lft forever preferred_lft forever
2: ens3 inet6 fe80::46c:bff:fec8:dd64/64 scope link \ valid_lft forever preferred_lft forever
3: docker0 inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0\ valid_lft forever preferred_lft forever
16: vhost0 inet 172.31.12.55/20 brd 172.31.15.255 scope global dynamic vhost0\ valid_lft 3118sec preferred_lft 3118sec
16: vhost0 inet6 fe80::46c:bff:fec8:dd64/64 scope link \ valid_lft forever preferred_lft forever
17: pkt0 inet6 fe80::5094:6cff:fefb:42f7/64 scope link \ valid_lft forever preferred_lft forever
[root@ip-172-31-12-55 ~]# ip tuntap list
pkt0: tap
[root@ip-172-31-12-55 ~]#
従ってLinuxの観点からpkt 0は実際にはTapデバイスである.
ある意味では、vifコマンドは、nova-vif-driverによって作成されたLinuxネットワークデバイス(例えばtapxxxx-xxxx)とvRouterインタフェースを確立し、デバイスを介したパケットがdp-coreによって受信されるようにする.
したがって、CNI等がコンテナに接続されたTapデバイスを発見すると、内部にvifを作成したvrouter−apiが送信され、その名前はTapデバイスと同じであり、Tapデバイスに入ったパケットをvRouter(dp−core)に転送する.
vrouter-agentを起動すると、vhost 0、pkt 0、pkt 1、pkt 2、pkt 3という特殊なデバイスが作成されます.
前述したように、vhost 0は、dp−coreのirbインタフェースと類似しているため、dp−coreルーティングが完了すると、vRouterノード自体のパケットを受信する.
vrouter-agentコンテナは起動時に/etc/sysconfig/network-scripts/{ifup-vhost,ifdown-vhost}を作成するため、ifup/ifdownで直接制御できます.内部タイプはvif--add vhost 0で、コマンドラインで直接作成および削除できます.
https://github.com/tungstenfabric/tf-container-builder/blob/master/containers/vrouter/base/network-functions-vrouter-kernel#L41
ここで、pkt 1,pkt 2,pkt 3はvrouter_linux_initのlinux_pkt_dev_allocで定義されたインタフェース、vrouter_linux_initはvrouterです.koのmodule_init.
linux/vrouter_mod.c
module_init(vrouter_linux_init);
static int
linux_pkt_dev_alloc(void)
{
if (pkt_gro_dev == NULL) {
pkt_gro_dev = linux_pkt_dev_init("pkt1", &pkt_gro_dev_setup,
&pkt_gro_dev_rx_handler);
if (pkt_gro_dev == NULL) {
vr_module_error(-ENOMEM, __FUNCTION__, __LINE__, 0);
return -ENOMEM;
}
}
if (pkt_l2_gro_dev == NULL) {
pkt_l2_gro_dev = linux_pkt_dev_init("pkt3", &pkt_l2_gro_dev_setup,
&pkt_gro_dev_rx_handler);
if (pkt_l2_gro_dev == NULL) {
vr_module_error(-ENOMEM, __FUNCTION__, __LINE__, 0);
return -ENOMEM;
}
}
if (pkt_rps_dev == NULL) {
pkt_rps_dev = linux_pkt_dev_init("pkt2", &pkt_rps_dev_setup,
&pkt_rps_dev_rx_handler);
if (pkt_rps_dev == NULL) {
vr_module_error(-ENOMEM, __FUNCTION__, __LINE__, 0);
return -ENOMEM;
}
}
return 0;
}
いくつかのGROとRPS機能を使用しており、カーネルvRouterのパフォーマンスを向上させる上で重要です.
linux/vr_host_interface.c
/*
* pkt_rps_dev_ops - netdevice operations on RPS packet device. Currently,
* no operations are needed, but an empty structure is required to
* register the device.
*
*/
static struct net_device_ops pkt_rps_dev_ops;
(snip)
/*
* pkt_rps_dev_setup - fill in the relevant fields of the RPS packet device
*/
static void
pkt_rps_dev_setup(struct net_device *dev)
{
/*
* Initializing the interfaces with basic parameters to setup address
* families.
*/
random_ether_addr(dev->dev_addr);
dev->addr_len = ETH_ALEN;
dev->hard_header_len = ETH_HLEN;
dev->type = ARPHRD_VOID;
dev->netdev_ops = &pkt_rps_dev_ops;
dev->mtu = 65535;
return;
}
ここでpkt 0は、dp-coreからvrouter-agentにパケットを送信するために少し異なります.
実際には、vrouter-agentが初めて起動したときに、vrouter-agentの要求に従って作成され、vrouter-agentと通信するTapデバイスを作成します.
したがって、dp−coreからインタフェースにパケットを送信すると、vrouter−agentはパケットを受信し、パケットを内部で処理する(arp、dhcpなどはいずれもこのように処理する).
この動作を説明する別の説明として、modprobe vrouter、ifup vhost 0、vrouter-agentの起動が完了したら、ip-o addr、ip link、vif-listの結果を追加します.
# docker-compose -f /etc/contrail/vrouter/docker-compose.yaml down
# ifdown vhost0
# modprobe vrouter
[root@ip-172-31-12-55 ~]# ip -o a
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
1: lo inet6 ::1/128 scope host \ valid_lft forever preferred_lft forever
2: ens3 inet 172.31.12.55/20 brd 172.31.15.255 scope global dynamic ens3\ valid_lft 3561sec preferred_lft 3561sec
2: ens3 inet6 fe80::46c:bff:fec8:dd64/64 scope link \ valid_lft forever preferred_lft forever
3: docker0 inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0\ valid_lft forever preferred_lft forever
[root@ip-172-31-12-55 ~]#
[root@ip-172-31-12-55 ~]# ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: mtu 9001 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 06:6c:0b:c8:dd:64 brd ff:ff:ff:ff:ff:ff
3: docker0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether 02:42:34:e8:c3:14 brd ff:ff:ff:ff:ff:ff
9: pkt1: <> mtu 65535 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/void be:f9:01:0e:4d:38 brd 00:00:00:00:00:00
10: pkt3: <> mtu 65535 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/void 46:f8:5c:cb:79:8e brd 00:00:00:00:00:00
11: pkt2: <> mtu 65535 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/void a2:b0:40:5c:03:d4 brd 00:00:00:00:00:00
[root@ip-172-31-12-55 ~]#
[root@ip-172-31-12-55 ~]# 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
Uuf=Unknown Unicast Flood, Vof=VLAN insert/strip offload, Df=Drop New Flows, L=MAC Learning Enabled
Proxy=MAC Requests Proxied Always, Er=Etree Root, Mn=Mirror without Vlan Tag, HbsL=HBS Left Intf
HbsR=HBS Right Intf, Ig=Igmp Trap Enabled
vif0/4350 OS: pkt3
Type:Stats HWaddr:00:00:00:00:00:00 IPaddr:0.0.0.0
Vrf:65535 Mcast Vrf:65535 Flags:L3L2 QOS:0 Ref:1
RX packets:0 bytes:0 errors:0
TX packets:0 bytes:0 errors:0
Drops:0
vif0/4351 OS: pkt1
Type:Stats HWaddr:00:00:00:00:00:00 IPaddr:0.0.0.0
Vrf:65535 Mcast Vrf:65535 Flags:L3L2 QOS:0 Ref:1
RX packets:0 bytes:0 errors:0
TX packets:0 bytes:0 errors:0
Drops:0
[root@ip-172-31-12-55 ~]#
# ifup vhost0
[root@ip-172-31-12-55 ~]# ip -o a
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
1: lo inet6 ::1/128 scope host \ valid_lft forever preferred_lft forever
2: ens3 inet6 fe80::46c:bff:fec8:dd64/64 scope link \ valid_lft forever preferred_lft forever
3: docker0 inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0\ valid_lft forever preferred_lft forever
12: vhost0 inet 172.31.12.55/20 brd 172.31.15.255 scope global dynamic vhost0\ valid_lft 3594sec preferred_lft 3594sec
12: vhost0 inet6 fe80::46c:bff:fec8:dd64/64 scope link \ valid_lft forever preferred_lft forever
[root@ip-172-31-12-55 ~]#
[root@ip-172-31-12-55 ~]#
[root@ip-172-31-12-55 ~]# ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: mtu 9001 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 06:6c:0b:c8:dd:64 brd ff:ff:ff:ff:ff:ff
3: docker0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether 02:42:34:e8:c3:14 brd ff:ff:ff:ff:ff:ff
9: pkt1: mtu 65535 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/void be:f9:01:0e:4d:38 brd 00:00:00:00:00:00
10: pkt3: mtu 65535 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/void 46:f8:5c:cb:79:8e brd 00:00:00:00:00:00
11: pkt2: mtu 65535 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/void a2:b0:40:5c:03:d4 brd 00:00:00:00:00:00
12: vhost0: mtu 9001 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 06:6c:0b:c8:dd:64 brd ff:ff:ff:ff:ff:ff
[root@ip-172-31-12-55 ~]#
[root@ip-172-31-12-55 ~]# 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
Uuf=Unknown Unicast Flood, Vof=VLAN insert/strip offload, Df=Drop New Flows, L=MAC Learning Enabled
Proxy=MAC Requests Proxied Always, Er=Etree Root, Mn=Mirror without Vlan Tag, HbsL=HBS Left Intf
HbsR=HBS Right Intf, Ig=Igmp Trap Enabled
vif0/2 OS: ens3 (Speed 10000, Duplex 1)
Type:Physical HWaddr:06:6c:0b:c8:dd:64 IPaddr:0.0.0.0
Vrf:0 Mcast Vrf:65535 Flags:XTcL3L2Vp QOS:0 Ref:1
RX packets:54 bytes:13325 errors:0
TX packets:39 bytes:4452 errors:0
Drops:0
vif0/16 OS: vhost0
Type:Host HWaddr:06:6c:0b:c8:dd:64 IPaddr:0.0.0.0
Vrf:0 Mcast Vrf:65535 Flags:XL3L2 QOS:0 Ref:1
RX packets:39 bytes:4452 errors:0
TX packets:54 bytes:13325 errors:0
Drops:0
vif0/4350 OS: pkt3
Type:Stats HWaddr:00:00:00:00:00:00 IPaddr:0.0.0.0
Vrf:65535 Mcast Vrf:65535 Flags:L3L2 QOS:0 Ref:1
RX packets:0 bytes:0 errors:0
TX packets:0 bytes:0 errors:0
Drops:0
vif0/4351 OS: pkt1
Type:Stats HWaddr:00:00:00:00:00:00 IPaddr:0.0.0.0
Vrf:65535 Mcast Vrf:65535 Flags:L3L2 QOS:0 Ref:1
RX packets:0 bytes:0 errors:0
TX packets:0 bytes:0 errors:0
Drops:0
[root@ip-172-31-12-55 ~]#
# docker-compose -f /etc/contrail/vrouter/docker-compose.yaml up -d
[root@ip-172-31-12-55 ~]# ip -o a
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
1: lo inet6 ::1/128 scope host \ valid_lft forever preferred_lft forever
2: ens3 inet6 fe80::46c:bff:fec8:dd64/64 scope link \ valid_lft forever preferred_lft forever
3: docker0 inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0\ valid_lft forever preferred_lft forever
16: vhost0 inet 172.31.12.55/20 brd 172.31.15.255 scope global dynamic vhost0\ valid_lft 3552sec preferred_lft 3552sec
16: vhost0 inet6 fe80::46c:bff:fec8:dd64/64 scope link \ valid_lft forever preferred_lft forever
17: pkt0 inet6 fe80::5094:6cff:fefb:42f7/64 scope link \ valid_lft forever preferred_lft forever
[root@ip-172-31-12-55 ~]#
[root@ip-172-31-12-55 ~]# ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: mtu 9001 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 06:6c:0b:c8:dd:64 brd ff:ff:ff:ff:ff:ff
3: docker0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether 02:42:34:e8:c3:14 brd ff:ff:ff:ff:ff:ff
13: pkt1: mtu 65535 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/void 36:72:98:97:9b:31 brd 00:00:00:00:00:00
14: pkt3: mtu 65535 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/void 92:aa:52:e8:d5:c5 brd 00:00:00:00:00:00
15: pkt2: mtu 65535 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/void 42:b2:46:73:3d:6c brd 00:00:00:00:00:00
16: vhost0: mtu 9001 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 06:6c:0b:c8:dd:64 brd ff:ff:ff:ff:ff:ff
17: pkt0: mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 52:94:6c:fb:42:f7 brd ff:ff:ff:ff:ff:ff
[root@ip-172-31-12-55 ~]#
[root@ip-172-31-12-55 ~]# 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
Uuf=Unknown Unicast Flood, Vof=VLAN insert/strip offload, Df=Drop New Flows, L=MAC Learning Enabled
Proxy=MAC Requests Proxied Always, Er=Etree Root, Mn=Mirror without Vlan Tag, HbsL=HBS Left Intf
HbsR=HBS Right Intf, Ig=Igmp Trap Enabled
vif0/0 OS: ens3 (Speed 10000, Duplex 1) NH: 4
Type:Physical HWaddr:06:6c:0b:c8:dd:64 IPaddr:0.0.0.0
Vrf:0 Mcast Vrf:65535 Flags:TcL3L2VpEr QOS:-1 Ref:7
RX packets:165 bytes:97837 errors:0
TX packets:156 bytes:124911 errors:0
Drops:0
vif0/1 OS: vhost0 NH: 5
Type:Host HWaddr:06:6c:0b:c8:dd:64 IPaddr:172.31.12.55
Vrf:0 Mcast Vrf:65535 Flags:PL3DEr QOS:-1 Ref:8
RX packets:159 bytes:125878 errors:0
TX packets:192 bytes:98971 errors:0
Drops:7
vif0/2 OS: pkt0
Type:Agent HWaddr:00:00:5e:00:01:00 IPaddr:0.0.0.0
Vrf:65535 Mcast Vrf:65535 Flags:L3Er QOS:-1 Ref:3
RX packets:31 bytes:2666 errors:0
TX packets:34 bytes:13535 errors:0
Drops:0
vif0/4350 OS: pkt3
Type:Stats HWaddr:00:00:00:00:00:00 IPaddr:0.0.0.0
Vrf:65535 Mcast Vrf:65535 Flags:L3L2 QOS:0 Ref:1
RX packets:0 bytes:0 errors:0
TX packets:0 bytes:0 errors:0
Drops:0
vif0/4351 OS: pkt1
Type:Stats HWaddr:00:00:00:00:00:00 IPaddr:0.0.0.0
Vrf:65535 Mcast Vrf:65535 Flags:L3L2 QOS:0 Ref:1
RX packets:0 bytes:0 errors:0
TX packets:0 bytes:0 errors:0
Drops:0
[root@ip-172-31-12-55 ~]#