zoukankan      html  css  js  c++  java
  • Macvtap

      

      ip link add link eth0 name macvtap0 type macvtap mode bridge
      qemu-kvm -nographic -kernel /boot/vmlinuz-guest 
        -append "console=ttyS0 root=/dev/vda" 
        -drive file=/tmp/testroot.img,if=virtio,cache=none 
        -net nic,model=virtio,macaddr=$(< /sys/class/net/macvtap0/address) 
        -net tap,fd=3 3<>/dev/tap$(< /sys/class/net/macvtap0/ifindex)
    [root@localhost ~]# ip link add peerh type veth peer name peerv
    [root@localhost ~]# ip link add link peerv name macvtap0 type macvtap
    [root@localhost ~]# ip link set macvtap0 address 1a:46:0b:ca:bc:7b up
    [root@localhost ~]# ip link show macvtap0
    97: macvtap0@peerv: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state LOWERLAYERDOWN mode DEFAULT group default qlen 500
        link/ether 1a:46:0b:ca:bc:7b brd ff:ff:ff:ff:ff:ff
    [root@localhost ~]# 
     -netdev tap,id=network-0,vhost=on,vhostfds=3,fds=4 -device driver=virtio-net-pci,netdev=network-0,mac=1a:46:0b:ca:bc:7b,disable-modern=false,mq=on,vectors=4,romfile=
    qemu-system-aarch64: -netdev tap,id=network-0,vhost=on,vhostfds=3,fds=4: TUNGETIFF ioctl() failed: Inappropriate ioctl for device
    TUNSETOFFLOAD ioctl() failed: Inappropriate ioctl for device
    qemu-system-aarch64: -netdev tap,id=network-0,vhost=on,vhostfds=3,fds=4: vhost-net requested but could not be initialized

    原理是macvtap0的ifndex有误

    root@ubuntu:/home/ubuntu/qemu_learn# cat /sys/class/net/macvtap0/ifindex
    471

    虚拟机内

    CentOS Linux 7 (AltArch)
    Kernel 4.18.0-147.8.1.el7.aarch64 on an aarch64
    
    localhost login: root
    Password: 
    Last login: Thu Nov  5 03:26:45 from gateway
    [root@localhost ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 1a:46:0b:ca:bc:7b brd ff:ff:ff:ff:ff:ff
        inet6 fe80::1846:bff:feca:bc7b/64 scope link 
           valid_lft forever preferred_lft forever
    [root@localhost ~]# ip a | grep '1a:46:0b:ca:bc:7b'
        link/ether 1a:46:0b:ca:bc:7b brd ff:ff:ff:ff:ff:ff
    [root@localhost ~]# 
    [root@localhost ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 1a:46:0b:ca:bc:7b brd ff:ff:ff:ff:ff:ff    ---mac没改变
        inet 10.10.100.82/24 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::1846:bff:feca:bc7b/64 scope link 
           valid_lft forever preferred_lft forever

    主机侧

    root@ubuntu:/home/ubuntu# ip a show peerv
    469: peerv@peerh: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether ea:78:75:7d:3d:6a brd ff:ff:ff:ff:ff:ff
        inet6 fe80::e878:75ff:fe7d:3d6a/64 scope link 
           valid_lft forever preferred_lft forever
    root@ubuntu:/home/ubuntu# ip a show peerh
    470: peerh@peerv: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether f6:56:ad:40:45:9f brd ff:ff:ff:ff:ff:ff
        inet6 fe80::f456:adff:fe40:459f/64 scope link 
           valid_lft forever preferred_lft forever
    root@ubuntu:/home/ubuntu# ip a add 10.10.100.83/24 dev  peerh
    root@ubuntu:/home/ubuntu# ping 10.10.100.82
    PING 10.10.100.82 (10.10.100.82) 56(84) bytes of data.
    64 bytes from 10.10.100.82: icmp_seq=1 ttl=64 time=0.448 ms
    64 bytes from 10.10.100.82: icmp_seq=2 ttl=64 time=0.292 ms
    ^C
    --- 10.10.100.82 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1005ms
    rtt min/avg/max/mdev = 0.292/0.370/0.448/0.078 ms
    root@ubuntu:/home/ubuntu# ip a show peerh
    470: peerh@peerv: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether f6:56:ad:40:45:9f brd ff:ff:ff:ff:ff:ff
        inet 10.10.100.83/24 scope global peerh
           valid_lft forever preferred_lft forever
        inet6 fe80::f456:adff:fe40:459f/64 scope link 
           valid_lft forever preferred_lft forever
    root@ubuntu:/home/ubuntu# 

    虚拟机启动后,host侧

    root@ubuntu:/home/ubuntu# cat /sys/class/net/macvtap0/ifindex
    471
    root@ubuntu:/home/ubuntu# ip a | grep macvtap0
    471: macvtap0@peerv: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 500
    root@ubuntu:/home/ubuntu#

    root@ubuntu:/home/ubuntu# ip netns exec net1 ip a
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     
    
    root@ubuntu:/home/ubuntu# ip link set  macvtap0 netns net1
    root@ubuntu:/home/ubuntu# ip link set  peerv netns net1
    root@ubuntu:/home/ubuntu# ip netns exec net1 ip a
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    469: peerv@if470: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether ea:78:75:7d:3d:6a brd ff:ff:ff:ff:ff:ff link-netnsid 0
    471: macvtap0@peerv: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 500
        link/ether 1a:46:0b:ca:bc:7b brd ff:ff:ff:ff:ff:ff
    root@ubuntu:/home/ubuntu# ip netns exec net1 ip link set macvtap0 up
    root@ubuntu:/home/ubuntu# ip netns exec net1 ip link set peerv up
    root@ubuntu:/home/ubuntu# ping 10.10.100.82
    PING 10.10.100.82 (10.10.100.82) 56(84) bytes of data.
    64 bytes from 10.10.100.82: icmp_seq=1 ttl=64 time=0.659 ms
    64 bytes from 10.10.100.82: icmp_seq=2 ttl=64 time=0.188 ms
    64 bytes from 10.10.100.82: icmp_seq=3 ttl=64 time=0.233 ms
    ^C
    --- 10.10.100.82 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2055ms
    rtt min/avg/max/mdev = 0.188/0.360/0.659/0.212 ms
    root@ubuntu:/home/ubuntu# 

    虚拟机

    [root@localhost ~]# ping 10.10.100.83                  
    PING 10.10.100.83 (10.10.100.83) 56(84) bytes of data.
    64 bytes from 10.10.100.83: icmp_seq=1 ttl=64 time=0.244 ms
    64 bytes from 10.10.100.83: icmp_seq=2 ttl=64 time=0.203 ms
    
    --- 10.10.100.83 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 0.203/0.223/0.244/0.025 ms
    [root@localhost ~]# 

    给host侧

    root@ubuntu:/home/ubuntu# ip netns exec net1 ip a
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    469: peerv@if470: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether ea:78:75:7d:3d:6a brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet6 fe80::e878:75ff:fe7d:3d6a/64 scope link 
           valid_lft forever preferred_lft forever
    471: macvtap0@peerv: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 500
        link/ether 1a:46:0b:ca:bc:7b brd ff:ff:ff:ff:ff:ff
        inet6 fe80::1846:bff:feca:bc7b/64 scope link 
           valid_lft forever preferred_lft forever
    .
    root@ubuntu:/home/ubuntu# ip netns exec net1 ip a  add 10.10.100.82/24 dev macvtap0   ---和虚拟机ip一样
    root@ubuntu:/home/ubuntu# ip netns exec net1 ip a
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    469: peerv@if470: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether ea:78:75:7d:3d:6a brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet6 fe80::e878:75ff:fe7d:3d6a/64 scope link 
           valid_lft forever preferred_lft forever
    471: macvtap0@peerv: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 500
        link/ether 1a:46:0b:ca:bc:7b brd ff:ff:ff:ff:ff:ff
        inet 10.10.100.82/24 scope global macvtap0
           valid_lft forever preferred_lft forever
        inet6 fe80::1846:bff:feca:bc7b/64 scope link 
           valid_lft forever preferred_lft forever
    root@ubuntu:/home/ubuntu# 

    虚拟机ping

    [root@localhost ~]# ping 10.10.100.83
    PING 10.10.100.83 (10.10.100.83) 56(84) bytes of data.
    64 bytes from 10.10.100.83: icmp_seq=1 ttl=64 time=0.265 ms
    64 bytes from 10.10.100.83: icmp_seq=2 ttl=64 time=0.269 ms
    
    --- 10.10.100.83 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 0.265/0.267/0.269/0.002 ms
    [root@localhost ~]# 

    macvtap + kata

    创建容器

    root@ubuntu:/home/ubuntu# docker run -it --runtime=kata-runtime --rm  debian /bin/bash
    root@abfb1728e810:/# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:acff:fe11:4/64 scope link 
           valid_lft forever preferred_lft forever
    root@abfb1728e810:/# ping 172.17.0.1
    PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
    64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.387 ms
    64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.214 ms
    ^C
    --- 172.17.0.1 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 31ms
    rtt min/avg/max/mdev = 0.214/0.300/0.387/0.088 ms
     
    root@ubuntu: runtime# ip netns exec cnitest-d6e30f25-c26b-f8c8-7d93-c6f3462bef80 ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    2: tap0_kata: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN group default qlen 1000
        link/ether d2:f5:21:84:ac:99 brd ff:ff:ff:ff:ff:ff
    472: eth0@if473: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
           valid_lft forever preferred_lft forever
    root@ubuntu: runtime# ip netns exec cnitest-d6e30f25-c26b-f8c8-7d93-c6f3462bef80 ip a flush eth0@
    Device "eth0@" does not exist.
    root@ubuntu: runtime# ip netns exec cnitest-d6e30f25-c26b-f8c8-7d93-c6f3462bef80 ip a flush eth0   ---删掉
    root@ubuntu: runtime# ip netns exec cnitest-d6e30f25-c26b-f8c8-7d93-c6f3462bef80 ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    2: tap0_kata: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN group default qlen 1000
        link/ether d2:f5:21:84:ac:99 brd ff:ff:ff:ff:ff:ff
    472: eth0@if473: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0

    容器还可以ping

    root@abfb1728e810:/# ping 172.17.0.1
    PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
    64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.521 ms
    64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.210 ms
    64 bytes from 172.17.0.1: icmp_seq=3 ttl=64 time=0.229 ms
    ^C
    --- 172.17.0.1 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 32ms
    rtt min/avg/max/mdev = 0.210/0.320/0.521/0.142 ms
    root@abfb1728e810:/# 
  • 相关阅读:
    POJ 2155:Matrix 二维树状数组
    POJ 2823:Sliding Window 单调队列
    POJ 3007:Organize Your Train part II
    51nod 1208 && POJ 2482:Stars in Your Window
    POJ 3061:Subsequence 查找连续的几个数,使得这几个数的和大于给定的S
    51nod 1206:Picture 求覆盖周长
    POJ 1195:Mobile phones 二维树状数组
    lightoj 1319
    暴力大法好
    Poj1273--Drainage Ditches(最大流)
  • 原文地址:https://www.cnblogs.com/dream397/p/14043632.html
Copyright © 2011-2022 走看看