关于P4-14中mask的语法问题
parser parse_ethernet {
extract(ethernet);
return select(latest.etherType) {
0 mask 0xfe00: parse_llc_header;
0 mask 0xfa00: parse_llc_header;
ETHERTYPE_BF_FABRIC : parse_fabric_header;
PARSE_ETHERTYPE;
}
}
请问哪位大神知道上面这句代码中 0 mask 0xfe00 和 0 mask 0xfa00 是什么意思?为什么要这样写?
2 个回复
mario_hu - 欲戴王冠必承其重
赞同来自: Cool
@adamas 谢谢您的回答,我理解了。文档中描述过mask的用法,mask在这个例子中是将0 与mask 0xfe00进行AND运算,latest.etherType 与mask 0xfe00进行AND运算,最后再比较这两个值,也就是他们只比较mask 0xfe00要求的位。0 mask 0xfe00 和 0 mask 0xfa00这样写正如您所说的,为了解析不同格式的二层头,在这个例子中,是要求latest.etherType 与 0xfe00或者 0xfa00相与为0的报文进行parse_llc_header处理。
adamas
赞同来自:
这样写是为了针对不同格式的报文,解析不同格式的二层头,我理解这里是根据latest.etherType mask 0xfe00的结果做处理