ovs流表

OpenvSwitch的流表分为内核中的fast path和用户态的slow path。数据报文经过多级流表,内核查找流表失败时通过upcall到用户态。流表的key包括MAC、IP和传输层信息。流表下发通过controller或ovs-ofctl的FLOW_MOD命令。ovs-vsctl add-port用于添加端口,涉及netdev_rx_handler_register注册处理函数。用户态处理流表后,通过handle_upcalls将规则添加到内核的datapath。

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

流表分为两大类:

1、 内核中flow table 也称为fast path

2、找用户态中flow table被称为slow path

一个数据报文接收后,会经过多个流表,每个流表负责特定的功能, ovs中的多级流表存放在用户空间,内核态存放的是流表的缓存。

网卡收到报文时,Openvswitch.ko是这么处理数据报文的:

1、通过key查找内核中的flow table,得到action,然后执行action之后,直接发送这个包;

2、在内核无法查找到流表项的时候,通过netlink的方式发送到用户空间,接着会去查找用户态的流表。 真个过程是通过upcall来调用用户态ovs-vswtichd中的flow table实现的

3、如果用户态命中则将对应的信息丢给内核态进行缓存。用户空间没有查到,用户态还要继续将报文的信息丢给控制器,由控制器下发对应的规则

key的组成

MAC层的key :key->eth

网络层的key:key->ip

传输层的key:key->tp

流表发送 流表下发一般是通过以下两种方式: controller通过openflow协议下发FLOW_MOD命令给ovs的Userspace流表。 ovs-ofctl通过openflow协议下发FLOW_MOD给ovs的Userspace流表。ovs-ofctl add-flow最终调用 ofctl_flow_mod(ctx->argc, ctx->argv, OFPFC_ADD); ofctl_flow_mod handle_openflow handle_flow_mod

ovs-vsctl add-port br0 eth1实现

lin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值