p4思考心得
一个完整的P4环境包括:
- P4程序,定义table和table之间的处理逻辑;
- 拓扑文件,定义网络拓扑;
- 流表文件,定义转发路径;
basic.p4:定义了match-action table的表头
control MyIngress(inout headers hdr,
inout metadata meta,
inout standard_metadata_t standard_metadata) {
action drop() {
mark_to_drop();
}
action ipv4_forward(macAddr_t dstAddr, egressSpec_t port) {
standard_metadata.egress_spec = port;
hdr.ethernet.srcAddr = hdr.ethernet.dstAddr;
hdr.ethernet.dstAddr = dstAddr;
hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
}
table ipv4_lpm {
key = {
hdr.ipv4.dstAddr: lpm;
}
actions = {
ipv4_forward;
drop;
NoAction;
}
size = 1024;//match-action表的大小
default_action = drop();
}
apply {/上面只是一些定义,真正的数据包处理逻辑在这里。
//不用管这里if中具体的条件
//先主要了解 apply 里面时让我们根据一些逻辑条件,定义数据包再流表之间的处理过程。
if (hdr.ipv4.isValid()) {
ipv4_lpm.apply();
}
}
}
s1-runtime.json:表中的项,比如该程序表示控制平面要往交换机s1中注入四条数据;
{
"target": "bmv2",
"p4info": "build/basic.p4info",
"bmv2_json": "build/basic.json",
"table_entries": [
{
"table": "MyIngress.ipv4_lpm",
"default_action": true,
"action_name": "MyIngress.drop",
"action_params": { }
},
{
"table": "MyIngress.ipv4_lpm",
"match": {
"hdr.ipv4.dstAddr": ["10.0.1.1", 32]
},
"action_name": "MyIngress.ipv4_forward",
"action_params": {
"dstAddr": "00:00:00:00:01:01",
"port": 1
}
},
{
"table": "MyIngress.ipv4_lpm",
"match": {
"hdr.ipv4.dstAddr": ["10.0.2.2", 32]
},
"action_name": "MyIngress.ipv4_forward",
"action_params": {
"dstAddr": "00:00:00:02:02:00",
"port": 2
}
},
{
"table": "MyIngress.ipv4_lpm",
"match": {
"hdr.ipv4.dstAddr": ["10.0.3.3", 32]
},
"action_name": "MyIngress.ipv4_forward",
"action_params": {
"dstAddr": "00:00:00:03:03:00",
"port": 3
}
}
]
}
match-action table:
| hdr.ipv4.dstAddr: lpm | actions(ipv4_forward(action_params);drop(action_params);NoAction(action_params);) |
|---|---|
| "10.0.1.1", 32 | ipv4_forward("action_params": {"dstAddr": "00:00:00:00:01:01","port": 1}) |
| "10.0.2.2", 32 | ipv4_forward("action_params": {"dstAddr": "00:00:00:00:02:02","port": 2}) |
| "10.0.3.3", 32 | ipv4_forward("action_params": {"dstAddr": "00:00:00:00:03:03","port": 3}) |
| defult | drop() |

浙公网安备 33010602011771号