zoukankan      html  css  js  c++  java
  • [草稿][内容垃圾勿看]openvswitch源代码分析_数据收发

    Datapatch 网桥

    ovs和内核态如何打交道?

    linux内核代码中net/core.c中有netdev_rx_handler_register,解释如下:

    * Register a receive handler for a device. This handler will then be

    * called from __netif_receive_skb. A negative errno code is returned

    * on a failure.


    netdev_create中调用netdev_rx_handler_register来注册设备收到报文的回调函数

    err = netdev_rx_handler_register(netdev_vport->dev, netdev_frame_hook,

    vport);

    其中 vport是后面查询设备对应的vport保留使用的(ovs_netdev_get_vport)。

    在中断收到报文 后内核调用netif_receive_skb,然后__netif_receive_skb,这个函数中调用了注册的 netdev_frame_hook

    在处理报文时,如何保证ovs处理的报文不用linux内核再次处理?如果被某个网口接收报文后可能会查询arp表项,或者路由(此部分内容也需要强化)

    rx_handler = rcu_dereference(skb->dev->rx_handler);

    if (rx_handler) {

    if (pt_prev) {

    ret = deliver_skb(skb, pt_prev, orig_dev);

    pt_prev = NULL;

    }

    switch (rx_handler(&skb)) {

    case RX_HANDLER_CONSUMED:

    ret = NET_RX_SUCCESS;

    goto out;

    case RX_HANDLER_ANOTHER:

    goto another_round;

    case RX_HANDLER_EXACT:

    deliver_exact = true;

    case RX_HANDLER_PASS:

    break;

    default:

    BUG();

    }

    }



    netdev_frame_hook-> netdev_port_receive ->ovs_skb_postpush_rcsum(?)-> ovs_vport_receive(数据统计变化) -> ovs_dp_process_received_packet


    struct flow_table {

    struct table_instance __rcu *ti;

    struct mask_cache_entry __percpu *mask_cache;

    struct mask_array __rcu *mask_array;

    unsigned long last_rehash;

    unsigned int count;

    };

    flow_table只包含 哈希桶和mask_list,这些怎么代码流表的内容?匹配项?actions

    这个flow_table代码了一个表,如table0



    datapath/vport.c ovs_vport_receive用来接收数据包



    一、根据skb数据包信息提取相关信息封闭为key

    通过ovs_flow_extract,将skb中的maciptcp层的地址信息复制到key

    二、根据key值和skb数据包查找对应的流表

    流表查询ovs_flow_tbl_lookup_stats

    三、根据流表做相应的action操作(若没有匹配则调用函数往用户空间传递数据包??)





    (struct ovs_skb_cb *)(skb)->cb





    mask有什么用?





    用户空间和内核空间通过netlinks来通信,如何通信?







  • 相关阅读:
    P1613 跑路
    数据挖掘-聚类分析(Python实现K-Means算法)
    使用scikit-learn 估计器分类
    数据挖掘-集成学习
    数据挖掘-关联分析 Apriori算法和FP-growth 算法
    scikit-learn 中常用的评估模型
    数据挖掘---支持向量机(SVM)
    数据挖掘-KNN-K最近邻算法
    数据挖掘-决策树
    数据挖掘-逻辑Logistic回归
  • 原文地址:https://www.cnblogs.com/haoqingchuan/p/5642005.html
Copyright © 2011-2022 走看看