On Sun, Jun 24, 2012 at 1:49 AM, 闫兴安 <yanxingan...@126.com> wrote: > I am reading the gre tunnel related codes in ovs. > The fuction "ovs_tnl_send" encapsulates packets coming from vports, then > sends the packets out from a NIC based on a host route entry. > I was puzzled on the paragraph: > ******** > cache_vport = ovs_internal_dev_get_vport(rt_dst(rt).dev); > skb->protocol = htons(ETH_P_IP); > iph = ip_hdr(skb); > iph->tot_len = htons(skb->len - skb_network_offset(skb)); > ip_send_check(iph); > if (cache_vport) { > if (unlikely(compute_ip_summed(skb, true))) { > kfree_skb(skb); > goto next; > } > OVS_CB(skb)->flow = cache->flow; > ovs_vport_receive(cache_vport, skb);--->send to datapath again? > sent_len += orig_len; > } else {------>send to NIC > int xmit_err; > skb->dev = rt_dst(rt).dev; > xmit_err = dev_queue_xmit(skb); > if (likely(net_xmit_eval(xmit_err) == 0)) > sent_len += orig_len; > } > ********** > The question is when the rt_dst(rt).dev is a internal dev? Why sending the > packet to the datapath again?
If your physical interface is itself bridged then the routing table may point to an OVS device. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev