Message ID | 1361499519-1715-1-git-send-email-pshelar@nicira.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
On Thu, 2013-02-21 at 18:18 -0800, Pravin B Shelar wrote: > Use ip_select_ident_more() to generate and account ids for all > segments that can be used for segments of a gso packet. > > Signed-off-by: Pravin B Shelar <pshelar@nicira.com> I am not sure it makes any sense to do that. Why is it needed ? -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Feb 21, 2013 at 6:35 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote: > On Thu, 2013-02-21 at 18:18 -0800, Pravin B Shelar wrote: >> Use ip_select_ident_more() to generate and account ids for all >> segments that can be used for segments of a gso packet. >> >> Signed-off-by: Pravin B Shelar <pshelar@nicira.com> > > I am not sure it makes any sense to do that. > > Why is it needed ? > Without this patch GRE-GSO generates ip fragments with id 0,2,3,4... for every GSO packet, which is not correct. This patch fixes it. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 2013-02-21 at 19:42 -0800, Pravin Shelar wrote: > Without this patch GRE-GSO generates ip fragments with id 0,2,3,4... > for every GSO packet, which is not correct. This patch fixes it. > -- I guess my question was more : Why dont we inherit ID from the inner packet ? ip_select_ident_more() is a performance killer, as all cpus are going to access a shared counter in the dst. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Feb 21, 2013 at 10:06 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote: > On Thu, 2013-02-21 at 19:42 -0800, Pravin Shelar wrote: > >> Without this patch GRE-GSO generates ip fragments with id 0,2,3,4... >> for every GSO packet, which is not correct. This patch fixes it. >> -- > > I guess my question was more : Why dont we inherit ID from the inner > packet ? > Its good idea. But we still need to get counter from dst if inner packet is not ipv4. > ip_select_ident_more() is a performance killer, as all cpus are going to > access a shared counter in the dst. > > > > > -- > To unsubscribe from this list: send the line "unsubscribe netdev" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index e225a4e..2992f37 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -1327,8 +1327,10 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb, if (skb->next != NULL) iph->frag_off |= htons(IP_MF); offset += (skb->len - skb->mac_len - iph->ihl * 4); - } else - iph->id = htons(id++); + } else { + if (!(iph->frag_off & htons(IP_DF))) + iph->id = htons(id++); + } iph->tot_len = htons(skb->len - skb->mac_len); iph->check = 0; iph->check = ip_fast_csum(skb_network_header(skb), iph->ihl); diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 5ef4da7..3c6f2e2 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -970,7 +970,9 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev iph->daddr = fl4.daddr; iph->saddr = fl4.saddr; iph->ttl = ttl; - iph->id = 0; + + ip_select_ident_more(iph, &rt->dst, NULL, + (skb_shinfo(skb)->gso_segs ?: 1) - 1); if (ttl == 0) { if (skb->protocol == htons(ETH_P_IP))
Use ip_select_ident_more() to generate and account ids for all segments that can be used for segments of a gso packet. Signed-off-by: Pravin B Shelar <pshelar@nicira.com> --- net/ipv4/af_inet.c | 6 ++++-- net/ipv4/ip_gre.c | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-)