Linux网络协议栈5--ovs收发包

ovs,全名openvswitch,是一个高质量的、多层虚拟交换机,相对于bridge的一些优势:1)方便网络管理与监控。OVS 的引入,可以方便管理员对整套云环境中的网络状态和数据流量进行监控,比如可以分析网络中流淌的数据包是来自哪个 VM、哪个 OS 及哪个用户,这些都可以借助 OVS 提供的工具来达到。2)加速数据包的寻路与转发。相比 Bridge 单纯的基于 MAC 地址学习的转发规则,OVS 引入流缓存的机制,可以加快数据包的转发效率。3)基于 SDN 控制面与数据面分离的思想。上面两点其实
摘要由CSDN通过智能技术生成

ovs,全名openvswitch,是一个高质量的、多层虚拟交换机,相对于bridge的一些优势:

1)方便网络管理与监控。OVS 的引入,可以方便管理员对整套云环境中的网络状态和数据流量进行监控,比如可以分析网络中流淌的数据包是来自哪个 VM、哪个 OS 及哪个用户,这些都可以借助 OVS 提供的工具来达到。
2)加速数据包的寻路与转发。相比 Bridge 单纯的基于 MAC 地址学习的转发规则,OVS 引入流缓存的机制,可以加快数据包的转发效率。
3)基于 SDN 控制面与数据面分离的思想。上面两点其实都跟这一点有关,OVS 控制面负责流表的学习与下发,具体的转发动作则有数据面来完成。可扩展性强。
4)隧道协议支持。Bridge 只支持 VxLAN,OVS 支持 gre/vxlan/IPsec 等。
5)适用于 Xen、KVM、VirtualBox、VMware 等多种 Hypervisors。

不过这些年,openflow明显热度降低,SDN网络可以有很多实现方式,如segment routing技术,结合传统的mpls/bgp,也能很好的实现SDN,相比于基于openflow协议的SDN网络,设备厂商支持的更好,更稳定。

同bridge一样,在向ovs bridge中添加成员接口的时候,会在成员接口的dev->rx_handler 上挂载收包处理函数,如下,ovs_vport_add 中会根据加入接口类型的不同,调用接口对应的create函数,而所有create函数都会调用ovs_netdev_link,其中注册了netdev_frame_hook 作为ovs成员口的收包处理函数。
以vxlan_create为例,vxlan本身的创建和linux vxlan一样,核心函数也是vxlan_dev_configure,其次是创建ovs成员口的私有数据 vport,最后在ovs_netdev_link 函数中间vxlan和vport关联,以及挂载接口收报函数和私有数据(netdev_frame_hook,vport)

struct vport *ovs_vport_add(const struct vport_parms *parms)
{
	struct vport_ops *ops;
	struct vport *vport;

	ops = ovs_vport_lookup(parms);
	if (ops) {
		struct hlist_head *bucket;

		if (!try_module_get(ops->owner))
			return ERR_PTR(-EAFNOSUPPORT);

		vport = ops->create(parms);
		......
}

struct vport *ovs_netdev_link(struct vport *vport, const char *name)
{
	......
	err = netdev_rx_handler_register(vport->dev, netdev_frame_hook,
					 vport);
	......
}
EXPORT_SYMBOL_GPL(ovs_netdev_link);

image.png

网卡收到包后,走到__netif_receive_skb_core后,剥完vlan找到vlan子接口(如果有的话),如果skb->dev是ovs成员口,就会走到netdev_frame_hook处理函数。

static int __netif_receive_skb_core(struct sk_buff *skb, bool pfmemalloc)
{
......
	// ovs挂载的 netdev_frame_hook 函数。
	rx_handler = rcu_dereference(skb->dev->rx_handler);
	if (rx_handler) {
		if (pt_prev
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值