On Mon, Apr 20, 2015 at 5:56 PM, Jesse Gross <je...@nicira.com> wrote: > On Mon, Apr 20, 2015 at 3:54 PM, Pravin Shelar <pshe...@nicira.com> wrote: >> On Mon, Apr 20, 2015 at 3:36 PM, Jesse Gross <je...@nicira.com> wrote: >>> On Mon, Apr 20, 2015 at 1:29 PM, Pravin B Shelar <pshe...@nicira.com> wrote: >>>> diff --git a/datapath/linux/compat/stt.c b/datapath/linux/compat/stt.c >>>> new file mode 100644 >>>> index 0000000..209bf1a >>>> --- /dev/null >>>> +++ b/datapath/linux/compat/stt.c >>>> +static void update_headers(struct sk_buff *skb, bool head, >>>> + unsigned int l4_offset, unsigned int >>>> hdr_len, >>>> + bool ipv4, u32 tcp_seq) >>> [...] >>>> + skb->truesize = SKB_TRUESIZE(skb_end_offset(skb)) + skb->data_len; >>>> +} >>> >>> I wonder if there are any possible edge cases with resetting truesize >>> where the packet is still in someone's transmit queue (such as if we >>> are looping back packet). Do we need to orphan it first? >>> >> ok, I will orphan it in update_headers. > > Just to clarify - I was mostly just thinking aloud on orphaning it. > I'm not totally sure if that is the right thing to do or if this is > the right place to do it. I'm not sure what the conceptual > justification would be for it and it could potentially result in the > sender's buffers not being properly limited. Perhaps not resetting the > truesize is the right thing too... > I have seen warning msg if we do no keep truesize update along with changes to skb.
>>>> +static void stt_rcv(struct stt_sock *stt_sock, struct sk_buff *skb) >>>> +{ >>> [...] >>>> + if (skb->next) { >>>> + err = coalesce_skb(&skb); >>>> + if (err) >>>> + goto drop; >>>> + } >>>> + >>>> + err = iptunnel_pull_header(skb, >>>> + sizeof(struct stthdr) + STT_ETH_PAD, >>>> + htons(ETH_P_TEB)); >>> >>> This version of coalesce_skb() doesn't create fully formed skbs (any >>> remaining pieces are in skb->next instead of a frag_list), right? That >>> means that iptunnel_pull_header() potentially won't be able to access >>> the data. >> >> right. I want to avoid setting and resetting skb->next and fraglist >> pointer. So I will only do it if iptunnel_pull_header fails to do it >> in first attempt. I think it should be pretty rare to get skb without >> the stt header in first skb. > > Hmm, we have several places where we do a pskb_may_pull(). Potentially > each one of those call sites could be affected by this. ok. I will use frag_list to keep the skb list. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev