dpvs 转发流程代码走读

1. 网卡收报处理

  netif_rcv_mbuf  <-  netif_deliver_mbuf <- lcore_process_packets <-  lcore_job_recv_fwd <-  netif_jobs[0].job.func

   根据eth_hdr->ether_type 调用struct pkt_type .func 

    arp: neigh_resolve_input

    ipv4: ipv4_rcv

    ipv6: ip6_rcv

2. 以ipv4路径为例:

  后续走到hook INET_HOOK_PRE_ROUTING 的回调,优先级小的先被调用,依次执行:dp_vs_pre_routing、dp_vs_in

3. 在dp_vs_in 执行负载均衡相关逻辑。

  根据iph.proto区分ICMP、ICMPV6、TCP、UDP处理。分别对应:

    dp_vs_proto_icmp

    dp_vs_proto_icmp6

    dp_vs_proto_tcp

    dp_vs_proto_udp

   主流程:

    ①查找连接prot->conn_lookup,已存在且cid与本地cid一致,根据conn转发。

    ②连接不存在:

      执行prot->conn_sched,负责均衡并新建连接conn。

4. 在port->conn_sched 以tcp为例:tcp_conn_sched

  dp_vs_service_lookup 查找svc,再在dp_vs_schedule中根据svc的配置的负载均衡算法选择dest。

  

 
posted @ 2024-06-19 16:07  May&JJ  阅读(70)  评论(0)    收藏  举报