参考:Github

安装p4c-bm:

sudo pip install -r requirements.txt

sudo pip install -r requirements_v1_1.txt //if you are interested in compiling P4 v1.1 programs

sudo python setup.py install

测试:

p4c-bmv2 -h

弹出相关信息:

usage: p4c-bmv2 [-h] [--json JSON] [--pd PD] [--pd-from-json]
[--p4-prefix P4_PREFIX] [--field-aliases FIELD_ALIASES]
[--p4-v1.1] [--version] [--primitives PRIMITIVES]
[--plugin PLUGIN_LIST]
[--openflow-mapping-dir OPENFLOW_MAPPING_DIR]
[--openflow-mapping-mod OPENFLOW_MAPPING_MOD] [--keep-pragmas]
source p4c-bm arguments positional arguments:
source A source file to include in the P4 program. optional arguments:
-h, --help show this help message and exit
--json JSON Dump the JSON representation to this file.
--pd PD Generate PD C/C++ code for this P4 program in this
directory. Directory must exist.
--pd-from-json Generate PD from a JSON file, not a P4 file
--p4-prefix P4_PREFIX
P4 name use for API function prefix
--field-aliases FIELD_ALIASES
Path to file containing field aliases. In this file,
each line contains a mapping with this format:
"<alias> <full name of field>"
--p4-v1.1 Run the compiler on a p4 v1.1 program
--version, -v show program's version number and exit
--primitives PRIMITIVES
A JSON file which contains additional primitive
declarations
--plugin PLUGIN_LIST list of plugins to generate templates
--openflow-mapping-dir OPENFLOW_MAPPING_DIR
Directory of openflow mapping files
--openflow-mapping-mod OPENFLOW_MAPPING_MOD
Openflow mapping module name -- not a file name
--keep-pragmas Propagate pragmas to JSON file when applicable

安装bmv2:

要求:

On Ubuntu 14.04, the following packages are required:

    automake
cmake
libjudy-dev
libgmp-dev
libpcap-dev
libboost-dev
libboost-test-dev
libboost-program-options-dev
libboost-system-dev
libboost-filesystem-dev
libboost-thread-dev
libevent-dev
libtool
flex
bison
pkg-config
g++
libssl-dev

以及Github中的一些工具,如thrift等,说的很详细了。

下载bmv2:

git clone https://github.com/p4lang/behavioral-model.git bmv2

安装依赖:

sh install_deps.sh

测试:

1. ./autogen.sh
2. ./configure
3. make
4. [sudo] make install # if you need to install bmv2

make成功是这样子的:

Making all in tests
make[5]: Entering directory `/home/wasdns/bmv2/targets/simple_switch/tests'
Making all in .
make[6]: Entering directory `/home/wasdns/bmv2/targets/simple_switch/tests'
make[6]: Nothing to be done for `all-am'.
make[6]: Leaving directory `/home/wasdns/bmv2/targets/simple_switch/tests'
Making all in CLI_tests
make[6]: Entering directory `/home/wasdns/bmv2/targets/simple_switch/tests/CLI_tests'
make[6]: Nothing to be done for `all'.
make[6]: Leaving directory `/home/wasdns/bmv2/targets/simple_switch/tests/CLI_tests'
make[5]: Leaving directory `/home/wasdns/bmv2/targets/simple_switch/tests'
make[4]: Leaving directory `/home/wasdns/bmv2/targets/simple_switch'
make[3]: Leaving directory `/home/wasdns/bmv2/targets/simple_switch'
make[3]: Entering directory `/home/wasdns/bmv2/targets'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/home/wasdns/bmv2/targets'
make[2]: Leaving directory `/home/wasdns/bmv2/targets'
Making all in tools
make[2]: Entering directory `/home/wasdns/bmv2/tools'
rm -f bm_p4dbg bm_p4dbg.tmp
sed -e 's|@pythondir[@]|/usr/local/lib/python2.7/dist-packages|g' ./bm_p4dbg.in >bm_p4dbg.tmp
chmod +x bm_p4dbg.tmp
chmod a-w bm_p4dbg.tmp
mv bm_p4dbg.tmp bm_p4dbg
rm -f bm_CLI bm_CLI.tmp
sed -e 's|@pythondir[@]|/usr/local/lib/python2.7/dist-packages|g' ./bm_CLI.in >bm_CLI.tmp
chmod +x bm_CLI.tmp
chmod a-w bm_CLI.tmp
mv bm_CLI.tmp bm_CLI
rm -f bm_nanomsg_events bm_nanomsg_events.tmp
sed -e 's|@pythondir[@]|/usr/local/lib/python2.7/dist-packages|g' ./bm_nanomsg_events.in >bm_nanomsg_events.tmp
chmod +x bm_nanomsg_events.tmp
chmod a-w bm_nanomsg_events.tmp
mv bm_nanomsg_events.tmp bm_nanomsg_events
make[2]: Leaving directory `/home/wasdns/bmv2/tools'
make[2]: Entering directory `/home/wasdns/bmv2'
make[2]: Leaving directory `/home/wasdns/bmv2'
make[1]: Leaving directory `/home/wasdns/bmv2'

当make不成功的时候,一般是报.lo的错误,比如:

g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.8/README.Bugs> for instructions.
make[3]: *** [packet.lo] Error 1
make[3]: Leaving directory `/home/wasdns/behavioral-model/src/bm_sim'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/wasdns/behavioral-model/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wasdns/behavioral-model'
make: *** [all] Error 2

我的解决方法是,执行:

./configure 'CXXFLAGS=-O0 -g'

进入debug模式,github是这样描述的:

In 'debug mode', you probably want to disable compiler optimization and enable symbols in the binary

之后,跑样例:

make check

注意,如果出现有关nanomsg的问题,需要在命令前加上sudo。

我的结果:

make  check-TESTS
make[3]: Entering directory `/home/wasdns/bmv2/tests'
make[4]: Entering directory `/home/wasdns/bmv2/tests'
PASS: test_actions
PASS: test_checksums
PASS: test_expressions
PASS: test_conditionals
PASS: test_data
PASS: test_handle_mgr
PASS: test_p4objects
PASS: test_parser
PASS: test_phv
PASS: test_queue
PASS: test_queueing
PASS: test_tables
PASS: test_learning
PASS: test_pre
PASS: test_calculations
PASS: test_header_stacks
PASS: test_meters
PASS: test_ageing
PASS: test_counters
PASS: test_pcap
PASS: test_fields
PASS: test_devmgr
PASS: test_packet
PASS: test_extern
../test-driver: line 107: 56596 Aborted (core dumped) "$@" > $log_file 2>&1
FAIL: test_switch
PASS: test_target_parser
PASS: test_runtime_iface
PASS: test_bm_apps
PASS: test_stateful
make[5]: Entering directory `/home/wasdns/bmv2/tests'
Making all in .
make[6]: Entering directory `/home/wasdns/bmv2/tests'
make[6]: Nothing to be done for `all-am'.
make[6]: Leaving directory `/home/wasdns/bmv2/tests'
make[5]: Leaving directory `/home/wasdns/bmv2/tests'
============================================================================
Testsuite summary for bm 1.4.0-84ed92dd
============================================================================
# TOTAL: 29
# PASS: 28
# SKIP: 0
# XFAIL: 0
# FAIL: 1
# XPASS: 0
# ERROR: 0
============================================================================
See tests/test-suite.log
Please report to antonin@barefootnetworks.com
============================================================================
make[4]: *** [test-suite.log] Error 1
make[4]: Leaving directory `/home/wasdns/bmv2/tests'
make[3]: *** [check-TESTS] Error 2
make[3]: Leaving directory `/home/wasdns/bmv2/tests'
make[2]: *** [check-am] Error 2
make[2]: Leaving directory `/home/wasdns/bmv2/tests'
make[1]: *** [check-recursive] Error 1
make[1]: Leaving directory `/home/wasdns/bmv2/tests'
make: *** [check-recursive] Error 1

还是出现了一个Error,查看日志信息:

cd tests

vim test-suite.log

日志如下:

=============================================
bm 1.4.0-84ed92dd: tests/test-suite.log
============================================= # TOTAL: 29
# PASS: 28
# SKIP: 0
# XFAIL: 0
# FAIL: 1
# XPASS: 0
# ERROR: 0 .. contents:: :depth: 2 FAIL: test_switch
================= [==========] Running 9 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 9 tests from Switch
[ RUN ] Switch.GetConfig
[ OK ] Switch.GetConfig (13 ms)
[ RUN ] Switch.ConfigOptions
[ OK ] Switch.ConfigOptions (3 ms)
[ RUN ] Switch.GetP4Objects
[ OK ] Switch.GetP4Objects (14 ms)
[ RUN ] Switch.SerializeState1
[ OK ] Switch.SerializeState1 (7 ms)
[ RUN ] Switch.SerializeState2
Traceback (most recent call last):
File "../tools/runtime_CLI.py", line 30, in <module>
import bmpy_utils as utils
File "/home/wasdns/bmv2/tools/bmpy_utils.py", line 26, in <module>
from thrift import Thrift
ImportError: No module named thrift
lt-test_switch: utils.cpp:55: CLIWrapperImp::~CLIWrapperImp(): Assertion `pclose(CLI_f) == 0' failed.
Thrift server was started

应该是thrift的问题,该问题还在解决中。

2016/12/17

最新文章

  1. linux centos service 参数详解
  2. Visual Studio 2013发布网站
  3. 【LeetCode】27 - Remove Element
  4. wamp配置虚拟主机
  5. MVC小系列(四)【向RouteData里扔数据】
  6. 第二部分面向对像基础第五章Strng类中方法的使用
  7. CF-599B - Spongebob and Joke
  8. HDU 3478 Play with Chain (Splay树)
  9. android 内存泄漏分析技巧
  10. 如何为一个eclipse安装android环境
  11. ES6 对象的扩展(下)
  12. LVS原理详解(3种工作方式8种调度算法)--老男孩
  13. MD5( 信息摘要算法)的概念原理及python代码的实现
  14. Chromium Embedded Framework (CEF)_3.2171.2069_v20170606_x86.tar.xz
  15. Web开发相关笔记 #04# WebSocket
  16. hermes kafka 转http rest api 的broker 工具
  17. JVM 运行时数据区详解
  18. Linux服务器ftp+httpd部署
  19. 收藏:Win32消息机制
  20. 机器学习-数据可视化神器matplotlib学习之路(四)

热门文章

  1. node EventEmitter 注册事件
  2. hdu 1114 Piggy-Bank
  3. sql in(1,2,3)参数化查询,错误在将 varchar 值 &#39;1,2,3,4&#39; 转换成数据类型 int 时失败
  4. three.js 场景入门
  5. 【原】iOS学习42即时通信之XMPP(1)
  6. 【原】iOS学习18之OC内存管理高级
  7. ACM spiral grid
  8. Coder-Strike 2014 - Round 1 D. Giving Awards
  9. Android -- TextView (3)
  10. IOS启动顺序