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。

浙公网安备 33010602011771号