OpenFlow技术咨询:write_actions(pop_vlan)与actions=pop_vlan差异及strip_vlan支持性
嘿,这个问题问到点子上了!作为常年跟OpenFlow打交道的人,我来给你把这两个点讲明白:
一、
write_actions(pop_vlan) 和 actions=pop_vlan 的核心差异 这俩指令看着像,实际作用逻辑完全不同,主要区别在这几个维度:
生效逻辑与时机
actions=pop_vlan是即时执行的单次动作:当数据包匹配到对应流表条目时,立刻对当前这一个数据包执行弹出VLAN标签的操作,不会修改流表本身的配置——下次再有匹配的数据包,要是流表条目里没配置这个动作,就不会执行。write_actions(pop_vlan)是修改流表的持久化操作:它的作用是把pop_vlan这个动作写入到目标流表条目的动作集合里,之后所有匹配该条目的数据包,都会自动执行弹出VLAN的动作。简单说,前者是“这次做”,后者是“以后每次都做”。
指令类型与用途
actions=...属于流表条目的匹配后执行动作列表,是定义流表规则时的核心配置项,用来指定匹配成功后要对数据包做什么。write_actions属于OpenFlow的Modify-State类指令,它不直接处理数据包,而是用来修改流表条目的属性(这里是动作集合),一般在动态更新流表规则时使用。
使用场景
- 如果你只是想临时处理某一个匹配的数据包,比如调试时测试VLAN剥离效果,用
actions=pop_vlan就够了。 - 如果需要让某一类数据包(匹配特定流表项的)都自动剥离VLAN,那必须用
write_actions(pop_vlan)来把动作固化到流表条目中。
- 如果你只是想临时处理某一个匹配的数据包,比如调试时测试VLAN剥离效果,用
二、OpenFlow 1.3 是否支持
strip_vlan? 答案是肯定的,而且要告诉你:strip_vlan其实就是pop_vlan的别名!
在OpenFlow的标准规范里,这个剥离外层VLAN标签的动作统一叫OFPAT_POP_VLAN(动作代码),不同的控制器或者交换机CLI可能会用strip_vlan作为友好名称,但底层实现完全是同一个标准动作。OpenFlow 1.3不仅支持,而且这个动作是从早期版本(比如1.0)就存在的核心动作之一,1.3版本只是在动作的扩展能力上做了升级,基础的VLAN剥离功能完全兼容。
内容的提问来源于stack exchange,提问作者LostInTheFrequencyDomain
相关产品推荐
相关产品推荐

