位置:/home/wasdns/p4factory/targets/l2_switch/p4src

命令:

  1. cd /home/wasdns/p4factory/targets/l2_switch/p4src
  2. p4-graphs l2_switch.p4

l2_switch.p4:

  1. //uncomment to enable openflow
  2. //#define OPENFLOW_ENABLE
  3. #ifdef OPENFLOW_ENABLE
  4. #include "openflow.p4"
  5. #endif /* OPENFLOW_ENABLE */
  6. header_type ethernet_t {
  7. fields {
  8. dstAddr : 48;
  9. srcAddr : 48;
  10. etherType : 16;
  11. }
  12. }
  13. header_type intrinsic_metadata_t {
  14. fields {
  15. mcast_grp : 4;
  16. egress_rid : 4;
  17. mcast_hash : 16;
  18. lf_field_list: 32;
  19. }
  20. }
  21. parser start {
  22. return parse_ethernet;
  23. }
  24. header ethernet_t ethernet;
  25. metadata intrinsic_metadata_t intrinsic_metadata;
  26. parser parse_ethernet {
  27. extract(ethernet);
  28. #ifdef OPENFLOW_ENABLE
  29. return select(latest.etherType) {
  30. ETHERTYPE_BF_FABRIC : parse_fabric_header;
  31. default : ingress;
  32. }
  33. #else
  34. return ingress;
  35. #endif /* OPENFLOW_ENABLE */
  36. }
  37. action _drop() {
  38. drop();
  39. }
  40. action _nop() {
  41. }
  42. #define MAC_LEARN_RECEIVER 1024
  43. field_list mac_learn_digest {
  44. ethernet.srcAddr;
  45. standard_metadata.ingress_port;
  46. }
  47. action mac_learn() {
  48. generate_digest(MAC_LEARN_RECEIVER, mac_learn_digest);
  49. }
  50. table smac {
  51. reads {
  52. ethernet.srcAddr : exact;
  53. }
  54. actions {mac_learn; _nop;}
  55. size : 512;
  56. }
  57. action forward(port) {
  58. modify_field(standard_metadata.egress_spec, port);
  59. }
  60. action broadcast() {
  61. modify_field(intrinsic_metadata.mcast_grp, 1);
  62. }
  63. table dmac {
  64. reads {
  65. ethernet.dstAddr : exact;
  66. }
  67. actions {
  68. forward;
  69. broadcast;
  70. #ifdef OPENFLOW_ENABLE
  71. openflow_apply;
  72. openflow_miss;
  73. #endif /* OPENFLOW_ENABLE */
  74. }
  75. size : 512;
  76. }
  77. table mcast_src_pruning {
  78. reads {
  79. standard_metadata.instance_type : exact;
  80. }
  81. actions {_nop; _drop;}
  82. size : 1;
  83. }
  84. control ingress {
  85. #ifdef OPENFLOW_ENABLE
  86. apply(packet_out) {
  87. nop {
  88. #endif /* OPENFLOW_ENABLE */
  89. apply(smac);
  90. apply(dmac);
  91. #ifdef OPENFLOW_ENABLE
  92. }
  93. }
  94. process_ofpat_ingress ();
  95. #endif /* OPENFLOW_ENABLE */
  96. }
  97. control egress {
  98. if(standard_metadata.ingress_port == standard_metadata.egress_port) {
  99. apply(mcast_src_pruning);
  100. }
  101. #ifdef OPENFLOW_ENABLE
  102. process_ofpat_egress();
  103. #endif /*OPENFLOW_ENABLE */
  104. }

生成图片:

2016/9/26

使用 p4-graphs 命令将p4程序依赖关系图形化的更多相关文章

  1. Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图(转载)

    Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图 2017年04月05日 10:53:13 李学凯 阅读数:104997更多 所属专栏: Intellij Idea   ...

  2. Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图

    Maven 组件界面介绍 如上图标注 1 所示,为常用的 Maven 工具栏,其中最常用的有: 第一个按钮:Reimport All Maven Projects 表示根据 pom.xml 重新载入项 ...

  3. Ambari服务依赖关系图生成脚本

    1. 生成服务依赖关系 #!/usr/bin/python import sys import commands import json def genDependString(ip): url=&q ...

  4. C/C++源代码的Include依赖关系图

    前一篇博文中我曾仔细介绍过如何查看C/C++代码的依赖项关系图,在这篇文章中我将会介绍如何使用Visualization and Modeling Feature Pack 工具包,查看C/C++源代 ...

  5. rpmgraph - 显示 RPM 软件包依赖关系图

    SYNOPSIS rpmgraph PACKAGE_FILE ... DESCRIPTION rpmgraph 使用 PACKAGE_FILE 参数来产生一个软件包依赖关系图.每个 PACKAGE_F ...

  6. 教你如何一键反编译获取任何微信小程序源代码(图形化界面,傻瓜式操作)

    一键获取微信小程序源代码 Tips: 一键获取微信小程序源码, 使用了C#加nodejs制作 直接解压在D盘根目录下后就可以使用 将小程序文件放到 wxapkg目录下3 这个目录下有一些demo 可以 ...

  7. MyBatis源码分析(1)——整体依赖关系图

    后续补充更新

  8. SpringMvc+Spring+Mybatis的jar包依赖关系图

  9. 源码分析:静态分析 C 程序函数调用关系图

    http://www.tinylab.org/callgraph-draw-the-calltree-of-c-functions/

随机推荐

  1. Linux数据链路层的包解析

    仅以此文作为学习笔记,初学者,如有错误欢迎批评指正,但求轻喷.一般而言,Linux系统截获数据包后,会通过协议栈,按照TCP/IP层次进行解析,那我们如何直接获得更为底层的数据报文呢,这里用到一个类型 ...

  2. WEB安全番外第一篇--其他所谓的“非主流”漏洞:URL跳转漏洞与参数污染

    一.URL跳转篇: 1.原理:先来看这段代码: <?php if(isset($_GET["url_redircetion_target"])){ $url_redirect ...

  3. PHP 允许Ajax跨域访问 (Access-Control-Allow-Origin)

    Ajax访问php,报错 php顶部加上即可: header("Access-Control-Allow-Origin: *");

  4. ios 自定义NavgationBar的按钮

    UIImage *btnimage = [UIImage imageNamed:@"about.png"]; UIButton *btn = [[UIButton alloc] i ...

  5. 微信小程序 --- 获取网络状态

    获取网络状态:wx.getNetworkType btnclick:function(){ wx.getNetworkType({ success:function(res){ console.log ...

  6. ThinkPHP简单结构介绍!

    thinkPHP简单结构介绍: application : 应用 extend:扩展 扩展内库 public:入口文件 index.php 在里面 runtime:缓存文件(里面的文件可以随便删除) ...

  7. python下几种打开文件的方式

    昨天看完了这本python进阶,感觉这本书对我启发很大,做了三张纸的笔记,方便我在遇到问题的时候翻阅,然后寻找可能的解决方案.作为一个使用Python一年的小白,虽然说不是小白,但是这一年来基本上是用 ...

  8. Git 基本操作(二)

    1. 分支操作 1.1 Fast-forward 当被合并分支(C4)位于合并分支(C2)的历史线上,此时的合并称为"fast-forward"; // hotfix 被合并到 m ...

  9. 修改nginx的http响应头server字段

    信息泄露类型:HTTP服务器响应头Server字段信息泄露 示例: 解决: 需要重新对nginx编译安装: [root@localhost ~]# tar zxvf nginx-1.8.1.tar.g ...

  10. NGINX:sticky模块实现基于cookie的负载均衡

    Sticky模块 简述: 之前公司部署了一套网站及时发布系统,架构如下图所示:Nginx做前端代理,发布系统用tomcat运行,一台共享存储,一台数据库服务器:由于网站及时发布系统涉及到了用户登录操作 ...