compile ofp over dpdk in vmware

1. get software

1
2
git libtool automake build-essential pkg-config libssl-dev doxygen libconfig-dev libnuma-dev libpcap-dev net-tools
ln -s /usr/bin/python3 /usr/bin/python

2. compile dpdk

1
git clone http://dpdk.org/git/dpdk-stable --branch 19.11 --depth 1 dpdk-19.11

run dpdk-19.11/usertools/dpdk-setup.sh
>>> select and run "x86_64-native-linuxapp-gcc"
>>> Exit Script

3. compile odp-dpdk

1
git clone https://github.com/OpenDataPlane/odp-dpdk.git

odp-dpdk/m4/odp_dpdk.m4

1
2
3
4
5
6
7
8
9
10
11
12
13
# _ODP_DPDK_LEGACY(PATH, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND)
# ------------------------------------------------------------------------
# Locate DPDK installation
AC_DEFUN([_ODP_DPDK_LEGACY], [dnl
    DPDK_CFLAGS="-isystem $1/include"
    DPDK_LIB_PATH="$1/lib"
    DPDK_LDFLAGS="-L$DPDK_LIB_PATH"
    AS_IF([test -r "$DPDK_LIB_PATH"/libdpdk.so], [dnl
        DPDK_RPATH="-Wl,-rpath,$DPDK_LIB_PATH"
        DPDK_RPATH_LT="-R$DPDK_LIB_PATH"
        DPDK_SHARED=yes],
        [test ! -r "$DPDK_LIB_PATH"/libdpdk.a], [dnl
        AC_MSG_FAILURE([Could not find DPDK])])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh
 
DPDK_PATH=/home/eu/work/dpdk/dpdk-19.11/x86_64-native-linuxapp-gcc
 
cd odp-dpdk
./bootstrap
#--enable-debug --enable-debug-print
#--without-openssl
./configure --with-dpdk-path=${DPDK_PATH} \
                --prefix=`pwd`/installed \
                --enable-debug=full \
                --enable-helper-debug \
                --enable-debug-print \
                --enable-helper-debug-print \
                --disable-shared
make install

4. compile ofp

1
git clone https://github.com/OpenFastPath/ofp.git
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
 
ODP_DPDK_PATH=`pwd`/odp-dpdk/installed
 
cd ofp
./bootstrap
./configure --with-odp=${ODP_DPDK_PATH} \
        --with-odp-lib=odp-dpdk \
        --disable-shared \
        --enable-debug=yes \
        --enable-sp=no \
        --prefix=`pwd`/installed
make install

5. setup dpdk

1
2
3
4
cd dpdk-19.11/x86_64-native-linuxapp-gcc/kmod
modprobe uio
insmod igb_uio.ko
ifconfig ens33 down

run dpdk-19.11/usertools/dpdk-setup.sh
>>> select and run "Setup hugepage mappings for non-NUMA systems", enter 128
>>> select and run "Bind Ethernet/Baseband/Crypto device to IGB UIO module", will display like
0000:02:01.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=ens33 drv=e1000 unused=igb_uio,vfio-pci
>>>>>> enter 02:01.0
>>> Exit Script

6. test

let the vmware guest machine use NAT.

use ipconfig check ip settings in host machine. for example, my ip for "VMware Network Adapter VMnet8" is 192.168.204.1.

ofp/example/webserver/ofp.cli

1
2
3
debug 0
loglevel set debug
ifconfig fp0 192.168.204.33/24

ofp/example/webserver/www/aa.txt

1
Hello, the world!

ofp/example/webserver/run.sh

1
2
export www_dir=`pwd`/www
./webserver -i 0 -f ofp.cli

using web browser access

1
http://192.168.204.33:2048/aa.txt

vmware linux共享文件夹未启动

1
2
3
4
# 若vmhgfs-fuse -e执行成功时执行
vmhgfs-fuse -o subtype=vmhgfs-fuse,allow_other /mnt/hgfs/
# mvhgfs-fuse -e 执行失败时执行
mount -f vmhgfs .host:/ /mnt/hgfs

如果还不行,比如更新内核后,就要重新加载linux.iso重装VMWareTools。

refer to: https://www.cnblogs.com/woodyoilove/p/8479458.html

休眠后启动移动硬盘不重新初始化连接

比如有这样的需求,VMWare的虚拟机放在移动硬盘中,虚拟机一直开着,有时需要离开一会,就让机器休眠了,结果回来唤醒机器后,发现由于插在USB口上的移动硬盘重新初始化了,VMWare一直连接着的文件句柄也就失效了,结果就是运行中的这个移动硬盘上的虚拟机崩了。

这是个很严重的问题,这让人无法将虚拟机放在移动硬盘中运行。

一直都在找如何让Windows唤醒后不初始化移动硬盘而应该一直保持休眠前的状态的方法,没有如果。

这几天买了一个新的移动硬盘,一直插在机器上用,因有事去办就休眠了机器,回来唤醒机器,发现并没有像以前那个移动硬盘那样新弹出移动硬盘的根目录文件夹窗口。

哦,明白了,以前的移动硬盘是机械硬盘,而新买的移动硬盘是固态的,唤醒机器时固态的可以直接进入工作状态,不需要重新初始化,也就说明VMWare虚拟机可以安全地在固态移动硬盘上运行,不怕机器休眠!

Failed to format -2147024809

直接用adk里的MakeWinPEMedia写winpe到U盘里报标题这个错误,所以我们换一种思路,用MakeWinPEMedia生成iso,再在linux环境将iso擦写到U盘里。

先以管理员方式运行“部署和映像工具环境”
输入

1
MakeWinPEMedia /ISO d:\euhat\WinPE_amd64 d:\winpe.iso

成功后,将winpe.iso拷贝到ubuntu linux虚拟机或实机里面。
我们现在以vmware的ubuntu虚拟机为例,为了使虚拟机正常识别U盘,需要做两件事

  1. 以管理员方式运行vmware player或workstation。
  2. ubuntu虚拟机设置里USB控制器兼容性中选择正确的版本,新买的机器一般选USB 3.0以上。这一步骤若选错,在vmware工具条上将U盘连接到虚拟机里时会提示“无法连接到理想的主机控制器。将尝试将该设备连接到可用的最佳主机控制器”不成功的错误,那时再重复此步骤选择其它USB控制器版本试试。

启动ubuntu虚拟机,打开终端以root身份运行

1
fdisk -l

通过看容量找到U盘的设备路径,如我这里是/dev/sdb,则再运行

1
2
dd if=/home/euhat/Desktop/winpe.iso of=/dev/sdb
sync

这样winpe就写入U盘了,正常从虚拟机、Windows卸载U盘后,再插到机器上用U盘引导试试!

VMWare磁盘读写提速

VMWare不生成vmem文件的方法是在.vmx文件中增加两行:

1
2
sched.mem.pshare.enable = "FALSE"
mainMem.useNamedFile = "FALSE"

refer to:
https://blog.csdn.net/shanzhizi/article/details/8293638
http://www.360doc.com/content/15/1120/11/73007_514517328.shtml
http://www.guyiren.com/archives/3210
https://blog.csdn.net/mnmnwq/article/details/79557305
https://blog.51cto.com/kitzk/553493
https://segmentfault.com/q/1010000002954977
https://bbs.kafan.cn/thread-1355085-1-1.html

本机代理到虚拟机

由于局域网限MAC地址,VmWare虚拟机不能直接连接物理网络,只能NAT模式,那么怎么让别人的电脑连接到本机虚拟机里的服务程序呢?

比如虚拟机里的服务程序IP为192.168.38.132,端口为5454,

本机IP为192.168.1.67,现在我们做一个代理,让别人能访问到192.168.38.132:5454。

在本机,以管理员模式运行cmd,输入

1
2
3
4
5
netsh
interface
portproxy
 
add v4tov4 listenaddress=192.168.1.67 listenport=5454 connectaddress=192.168.38.132 connectport=5454

记住,再禁掉本机防火墙!
此时,别人的电脑就可以访问此虚拟机里的服务程序了。

当不再需要此代理时,在本机,以管理员模式运行cmd,输入

1
2
3
4
5
netsh
interface
portproxy
 
delete v4tov4 listenaddress=192.168.1.67 listenport=5454

注意:微软的netsh只能转发tcp包,没有实现转发udp包。

参考:https://blog.csdn.net/mergerly/article/details/50747930