请教一个关于DR模式的包转发问题...thx

hi all
在IPVS的DR模式中,整体思想是通过报文的MAC地址来达到转发的目的,对此我有几点不太明白的地方,还希望各位予以赐教、一起讨论 :-)
1、当报文到达本机IP层之后,被会被钩子函数处理,查询相关的连接表项,在查询到或者新建了表项之后,流程会转入相应的转发函数中,对DR模式而言就是ip_vs_dr_xmit函数中,在这个函数中对相应包的skb进行了dst_entry结构的替换,那么这个源dst_entry是怎么从连接表项中得出的呢..也就是说struct rtable *rt = __ip_vs_get_out_rt(cp, RT_TOS(iph->tos))这个调用是什么流程?在连接表项中存在这个路由项吗?
2、如果1成立,那么相应连接表项中的这个路由项是怎么写进去的?通过IPVSADM工具setsockopt时候也只是写入了RS的IP和PORT而已。
3、如果2不成立的话,那么当真正进行转发时,是如何进行MAC地址的改写的呢?
总的来说,我的困惑就是DR模式是如何具体通过修改MAC地址来达到转发目的的,希望大家多多帮忙,共同进步..
另外有个想法“在NF_IP_PRE_ROUTING处挂钩,对所有的包(将网卡设为混杂模式)进行转发到下一级的RS以达到负载均衡,其中依靠修改包的MAC地址”,不知道这个想法是否可行..?^_^^_^
best regards!

Forums: