OVS datapath模块分析:packet处理流程


     这来主要看看ovs从网络接口收到packet后的一系列操作。
     在内核模块启动的时候会初始化vport子系统(ovs_vport_init),各种vport类型,那么什么时候会调用相应的函数与实际网络设备建立联系?其实当我们在为网桥增设端口的时候,就会进入ovs_netdev_vport_ops中的create方法,进而 注册网络设备。

struct netdev_vport {
     struct rcu_head rcu;
     struct net_device *dev;
};
const struct vport_ops ovs_netdev_vport_ops = {
     .type          = OVS_VPORT_TYPE_NETDEV,
     .flags          = VPORT_F_REQUIRED,
     .init          = netdev_init,   //之后的内核版本,这里直接return 0;
     .exit          = netdev_exit,
     .create          = netdev_create,
     .destroy     = netdev_destroy,
     .set_addr     = ovs_netdev_set_addr,
     .get_name     = ovs_netdev_get_name,
     .get_addr     = ovs_netdev_get_addr,
     .get_kobj     = ovs_netdev_get_kobj,
     .get_dev_flags     = ovs_netdev_get_dev_flags,
     .is_running     = ovs_netdev_is_running,
     .get_operstate     = ovs_netdev_get_operstate,
     .get_ifindex     = ovs_netdev_get_ifindex,
     .get_mtu     = ovs_netdev_get_mtu,
     .send          = netdev_send,
};
--datapath/vport-netdev.c
static struct vport *netdev_create(const struct vport_parms *parms)
{
     struct vport *vport;
     struct netdev_vport *netdev_vport;
     int err;

     vport = ovs_vport_alloc(sizeof(struct netdev_vport),   &ovs_netdev_vport_ops, parms);
     //有ovs_netdev_vport_ops和vport parameters 来构造初始化一个vport;
 
     netdev_vport = netdev_vport_priv(vport);
     //获得vport
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值