新版的p4編譯器編譯p4-14
p4c test.p4 -o meter --std p4-14 #p4-14和p4-16存在較大差異,參考p4程式碼時需注意
p4語言特性
- 無符號數bit型別的操作:此處我暫不明確是否包含 varbit
-
變長bit型別操作(只有有限的複製和比較操作)
p4程式處理流程
v1model
-
p4程式預設的包處理流程(不寫入任何處理流程)
- 沒有任何流表(預設的操作是 NoAction)
- 簡單的模擬包
- 預設從入埠轉發出去
- Egress控制塊的作用(無法修改出埠)
(圖片從 2014_arxiv_P4: Programming Protocol-Independent Packet Processor,即提出p4概念的論文中翻譯而來)
v1model.p4原始碼閱讀記錄
-
外部物件(extern object)
-
extern void resubmit<T>(in T data);
在 igress 控制塊中呼叫將保留標準和使用者後設資料(保留的是 igress 控制塊結束時候的值,不是呼叫resubmit時候的值)
只能用於 igress 控制塊,且只能執行一次(若多次呼叫,也只是重新提交一個包)
-
extern void recirculate<T>(in T data);
在 egress 控制塊中呼叫將保留標準和使用者後設資料(保留的是 egress 控制塊結束時候的值,不是呼叫recirculate時候的值)
只能用於 egress 控制塊,且只能執行提供一次(若多次呼叫,也只是重新迴圈一個包)
-
extern void clone(in CloneType type, in bit<32> session);
不保留標準和使用者後設資料
本質上類似與呼叫 clone3
-
extern void clone3<T>(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)- 新增暫存器的文件說明
- 更新後設資料說明
- 修改了 resubmit 等外部變數的說明
-
652bc4af6d0dea30e51c84927c3b42e92c2b7ca3
(Mon Jul 8 15:55:15 2019)- 刪除了六個標準後設資料
- clone_spec
- drop
- recirculate_port
- lf_field_list
- resubmit_flag
- recirculate_flag
- 刪除了六個標準後設資料
-
858cdf483dd7d245060d8caedb329596b2477816
(Mon Jul 8 14:10:53 2019)- 修改了諸多 extern object 的註釋
- extern counter
- extern meter
- extern void digest
(in bit<32> receiver, in T data); - extern void verify_checksum<T, O>(in bool condition, in T data, inout O checksum, HashAlgorithm algo);
- extern void update_checksum<T, O>(in bool condition, in T data, inout O checksum, HashAlgorithm algo);
- extern void verify_checksum_with_payload
- extern void update_checksum_with_payload
- extern void resubmit
(in T data); - extern void recirculate
(in T data); - extern void clone(in CloneType type, in bit<32> session);
- extern void clone3
(in CloneType type, in bit<32> session, in T data); - v1model 的 package 的各個部分
- 修改了諸多 extern object 的註釋
-
bc7b75bd1892ab230c2ec2d125af8529cf092f4a
(Mon Apr 4 13:33:49 2016)- P4 v1.2 compiler prototype
- 諸多 extern object 新增的日誌
-