热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

p4学习笔记

新版的p4编译器编译p4-14p4ctest.p4-ometer--stdp4-14#p4-14和p4-16存在较大差异,参考p4代码时需注意p4语言特性无符号数

新版的p4编译器编译p4-14

p4c test.p4 -o meter --std p4-14 #p4-14和p4-16存在较大差异,参考p4代码时需注意

p4语言特性

  • 无符号数bit类型的操作:此处我暂不明确是否包含 varbit

  • 变长bit类型操作(只有有限的复制和比较操作)

p4程序处理流程

v1model
  • p4程序默认的包处理流程(不写入任何处理流程)

    1. 没有任何流表(默认的操作是 NoAction)

    1. 简单的模拟包

  1. 默认从入端口转发出去

  • Egress控制块的作用(无法修改出端口)


(图片从 2014_arxiv_P4: Programming Protocol-Independent Packet Processor,即提出p4概念的论文中翻译而来)

v1model.p4源码阅读记录

  • 外部对象(extern object)

    • extern void resubmit(in T data);

      在 igress 控制块中调用将保留标准和用户元数据(保留的是 igress 控制块结束时候的值,不是调用resubmit时候的值)

      只能用于 igress 控制块,且只能执行一次(若多次调用,也只是重新提交一个包)

    • extern void recirculate(in T data);

      在 egress 控制块中调用将保留标准和用户元数据(保留的是 egress 控制块结束时候的值,不是调用recirculate时候的值)

      只能用于 egress 控制块,且只能执行提供一次(若多次调用,也只是重新循环一个包)

    • extern void clone(in CloneType type, in bit<32> session);

      不保留标准和用户元数据

      本质上类似与调用 clone3

    • extern void clone3(in CloneType type, in bit<32> session, in T data);

  • 支持的原语操作(p4-14和p4-16系统提供的函数)

    • modify_field
    • modify_field_rng_uniform
    • add_to_field
    • subtract_from_field
    • add
    • subtract
    • bit_xor
    • bit_and
    • shift_left
    • shift_right
    • drop
    • mark_to_drop
    • generate_digest
    • add_header
    • add_header_fast
    • copy_header
    • clone_ingress_pkt_to_egress
    • clone_egress_pkt_to_egress
    • resubmit
    • recirculate
    • modify_field_with_hash_based_offset
    • no_op
    • execute_meter
    • count
    • register_read提供
    • register_write
    • truncate
  • commit

    • 19cd6964994671a6da027e07c77d7d30c6ec99ce (Tue Jan 28 14:40:00 2020)

      1. 添加寄存器的文档说明
      2. 更新元数据说明
      3. 修改了 resubmit 等外部变量的说明
    • 652bc4af6d0dea30e51c84927c3b42e92c2b7ca3 (Mon Jul 8 15:55:15 2019)

      1. 删除了六个标准元数据
        1. clone_spec
        2. drop
        3. recirculate_port
        4. lf_field_list
        5. resubmit_flag
        6. recirculate_flag
    • 858cdf483dd7d245060d8caedb329596b2477816 (Mon Jul 8 14:10:53 2019)

      1. 修改了诸多 extern object 的注释
        1. extern counter
        2. extern meter
        3. extern void digest(in bit<32> receiver, in T data);
        4. extern void verify_checksum(in bool condition, in T data, inout O checksum, HashAlgorithm algo);
        5. extern void update_checksum(in bool condition, in T data, inout O checksum, HashAlgorithm algo);
        6. extern void verify_checksum_with_payload
        7. extern void update_checksum_with_payload
        8. extern void resubmit(in T data);
        9. extern void recirculate(in T data);
        10. extern void clone(in CloneType type, in bit<32> session);
        11. extern void clone3(in CloneType type, in bit<32> session, in T data);
        12. v1model 的 package 的各个部分
    • bc7b75bd1892ab230c2ec2d125af8529cf092f4a (Mon Apr 4 13:33:49 2016)

      1. P4 v1.2 compiler prototype
      2. 诸多 extern object 添加的日志

推荐阅读
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
author-avatar
-赵-宾-_879
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有