Changeset View
Standalone View
sys/netinet/tcp_lro.c
Show First 20 Lines • Show All 375 Lines • ▼ Show 20 Lines | tcp_lro_flush_inactive(struct lro_ctrl *lc, const struct timeval *timeout) | ||||
} | } | ||||
} | } | ||||
#ifdef INET6 | #ifdef INET6 | ||||
static int | static int | ||||
tcp_lro_rx_ipv6(struct lro_ctrl *lc, struct mbuf *m, struct ip6_hdr *ip6, | tcp_lro_rx_ipv6(struct lro_ctrl *lc, struct mbuf *m, struct ip6_hdr *ip6, | ||||
struct tcphdr **th) | struct tcphdr **th) | ||||
{ | { | ||||
if (ip6->ip6_flow != m->m_pkthdr.flowid) | |||||
bz: Aehm veto. The mbuf packet header flowid is the 4-tuple and has nothing to do with the IPv6… | |||||
/* XXX-BZ we should check the flow-label. */ | return (TCP_LRO_CANNOT); | ||||
Done Inline Actionsip6 is derived from m in tcp_lro_rx2() so you are comparing the identical memory here. I think what needs to be done is to store the ip6_flow or see if we have the entire ip6 header stored in lc already. The code has changed quite a bit since I wrote these comments. lc->leip->ip6 might have that but we'd need to make sure it actually does and then comapre to ip6->ip6_flow or if the former is NULL (I'd assume) pass? bz: ip6 is derived from m in tcp_lro_rx2() so you are comparing the identical memory here.
I think… | |||||
Not Done Inline ActionsI assume le is != NULL here given on return of this function we unconditionally write to it; the question is probably more le->le_ip6 != NULL. At this point someone who knows the current code should then have a look over this again as I honestly have no idea about the code flow anymore. @rrs is probably the best candidate; @gallatin or @np are probably also people who might be able to review/test this. bz: I assume le is != NULL here given on return of this function we unconditionally write to it… | |||||
/* XXX-BZ We do not yet support ext. hdrs. */ | /* XXX-BZ We do not yet support ext. hdrs. */ | ||||
if (ip6->ip6_nxt != IPPROTO_TCP) | if (ip6->ip6_nxt != IPPROTO_TCP) | ||||
return (TCP_LRO_NOT_SUPPORTED); | return (TCP_LRO_NOT_SUPPORTED); | ||||
/* Find the TCP header. */ | /* Find the TCP header. */ | ||||
*th = (struct tcphdr *)(ip6 + 1); | *th = (struct tcphdr *)(ip6 + 1); | ||||
▲ Show 20 Lines • Show All 1,062 Lines • Show Last 20 Lines |
Aehm veto. The mbuf packet header flowid is the 4-tuple and has nothing to do with the IPv6 flow label, or am I wrong?