P4在table中使用ternary匹配

本文介绍了P4编程语言中如何使用ternary匹配,允许开发者在匹配字段时关注特定bits而忽略其他。在P4_16版本中,可以通过const entries或P4控制器来设置表项。特别强调,在通过控制器写入表项时,如果忽略某个字段,应直接不包含该字段,而不是使用全0 mask,否则会导致错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

P4支持ternary匹配,也就是对于一个匹配字段,你可以用mask指定这个字段中的哪些bits是你关心的(1表示关心,0表示忽略),从而只匹配你关心的bits的值而忽略其他的值。

那在代码中怎么使用呢?话不多说,直接上代码(P4版本为 P4_16)!

control MyIngress(inout headers hdr,
                  inout metadata meta,
                  inout standard_metadata_t standard_metadata){
	action drop() {
		mark_to_drop(standard_metadata);
	}
	
	action your_action (bit<8> param1, bit<16> param2) {
		// your action logic here
	}
	
	table ipv4_ternary {
		key = {
		    hdr.ipv4.srcAddr: ternary; //ternary匹配ipv4的 src address
		    hdr.ipv4.dstAddr: ternary; //ternary匹配ipv4的 dst address
		}
		actions = {
		    your_action;
		    drop;
		}
		default_action = drop();
		
		//以下代码用于加入表项,同时也展示了如何使用ternary匹配的特性
		const entries = {
		    // 对于每一个ternary字段,表项的值由两部分组成:value &&& mask,先value后mask,顺序一定不能错!
		    // mask表示在这个字段上希望匹配哪些bits,1表示匹配,0表示忽略
		    // 若 匹配字段&mask = value&mask 则匹配成功
	
			// 该表项表示匹配那些ip src address前24位为10.0.1的数据包,而忽略了ip src 
			// address的最后8位以
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值