Remove now unused IPv6 macros and update docs.
After r354748-354750 all uses of the IP6_EXTHDR_CHECK() and IP6_EXTHDR_GET() macros are gone from the kernel. IP6_EXTHDR_GET0() was unused. Remove the macros and update the documentation. Sponsored by: Netflix
This commit is contained in:
parent
4e619b17c5
commit
b141dd5ddf
@ -1049,20 +1049,6 @@ requirement. (For more information, refer to Section 2.)
|
|||||||
3282 one ext mbuf
|
3282 one ext mbuf
|
||||||
0 two or more ext mbuf
|
0 two or more ext mbuf
|
||||||
|
|
||||||
Each input function calls IP6_EXTHDR_CHECK in the beginning to check
|
|
||||||
if the region between IP6 and its header is
|
|
||||||
continuous. IP6_EXTHDR_CHECK calls m_pullup() only if the mbuf has
|
|
||||||
M_LOOP flag, that is, the packet comes from the loopback
|
|
||||||
interface. m_pullup() is never called for packets coming from physical
|
|
||||||
network interfaces.
|
|
||||||
|
|
||||||
TCP6 reassembly makes use of IP6 header to store reassemble
|
|
||||||
information. IP6 is not supposed to be just before TCP6, so
|
|
||||||
ip6tcpreass structure has a pointer to TCP6 header. Of course, it has
|
|
||||||
also a pointer back to mbuf to avoid m_pullup().
|
|
||||||
|
|
||||||
Like TCP6, both IP and IP6 reassemble functions never call m_pullup().
|
|
||||||
|
|
||||||
xxx_ctlinput() calls in_mrejoin() on PRC_IFNEWADDR. We think this is
|
xxx_ctlinput() calls in_mrejoin() on PRC_IFNEWADDR. We think this is
|
||||||
one of 4.4BSD implementation flaws. Since 4.4BSD keeps ia_multiaddrs
|
one of 4.4BSD implementation flaws. Since 4.4BSD keeps ia_multiaddrs
|
||||||
in in_ifaddr{}, it can't use multicast feature if the interface has no
|
in in_ifaddr{}, it can't use multicast feature if the interface has no
|
||||||
|
@ -262,88 +262,4 @@ struct ip6_frag {
|
|||||||
#define IPV6_MAXPACKET 65535 /* ip6 max packet size without Jumbo payload*/
|
#define IPV6_MAXPACKET 65535 /* ip6 max packet size without Jumbo payload*/
|
||||||
#define IPV6_MAXOPTHDR 2048 /* max option header size, 256 64-bit words */
|
#define IPV6_MAXOPTHDR 2048 /* max option header size, 256 64-bit words */
|
||||||
|
|
||||||
#ifdef _KERNEL
|
|
||||||
/*
|
|
||||||
* IP6_EXTHDR_CHECK ensures that region between the IP6 header and the
|
|
||||||
* target header (including IPv6 itself, extension headers and
|
|
||||||
* TCP/UDP/ICMP6 headers) are contiguous. KAME requires drivers
|
|
||||||
* to store incoming data into one internal mbuf or one or more external
|
|
||||||
* mbufs(never into two or more internal mbufs). Thus, the third case is
|
|
||||||
* supposed to never be matched but is prepared just in case.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define IP6_EXTHDR_CHECK(m, off, hlen, ret) \
|
|
||||||
do { \
|
|
||||||
if ((m)->m_next != NULL) { \
|
|
||||||
if (((m)->m_flags & M_LOOP) && \
|
|
||||||
((m)->m_len < (off) + (hlen)) && \
|
|
||||||
(((m) = m_pullup((m), (off) + (hlen))) == NULL)) { \
|
|
||||||
IP6STAT_INC(ip6s_exthdrtoolong); \
|
|
||||||
return ret; \
|
|
||||||
} else { \
|
|
||||||
if ((m)->m_len < (off) + (hlen)) { \
|
|
||||||
IP6STAT_INC(ip6s_exthdrtoolong); \
|
|
||||||
m_freem(m); \
|
|
||||||
return ret; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} else { \
|
|
||||||
if ((m)->m_len < (off) + (hlen)) { \
|
|
||||||
IP6STAT_INC(ip6s_tooshort); \
|
|
||||||
in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_truncated); \
|
|
||||||
m_freem(m); \
|
|
||||||
return ret; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} while (/*CONSTCOND*/ 0)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* IP6_EXTHDR_GET ensures that intermediate protocol header (from "off" to
|
|
||||||
* "len") is located in single mbuf, on contiguous memory region.
|
|
||||||
* The pointer to the region will be returned to pointer variable "val",
|
|
||||||
* with type "typ".
|
|
||||||
* IP6_EXTHDR_GET0 does the same, except that it aligns the structure at the
|
|
||||||
* very top of mbuf. GET0 is likely to make memory copy than GET.
|
|
||||||
*
|
|
||||||
* XXX we're now testing this, needs m_pulldown()
|
|
||||||
*/
|
|
||||||
#define IP6_EXTHDR_GET(val, typ, m, off, len) \
|
|
||||||
do { \
|
|
||||||
struct mbuf *t; \
|
|
||||||
int tmp; \
|
|
||||||
if ((m)->m_len >= (off) + (len)) \
|
|
||||||
(val) = (typ)(mtod((m), caddr_t) + (off)); \
|
|
||||||
else { \
|
|
||||||
t = m_pulldown((m), (off), (len), &tmp); \
|
|
||||||
if (t) { \
|
|
||||||
if (t->m_len < tmp + (len)) \
|
|
||||||
panic("m_pulldown malfunction"); \
|
|
||||||
(val) = (typ)(mtod(t, caddr_t) + tmp); \
|
|
||||||
} else { \
|
|
||||||
(val) = (typ)NULL; \
|
|
||||||
(m) = NULL; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} while (/*CONSTCOND*/ 0)
|
|
||||||
|
|
||||||
#define IP6_EXTHDR_GET0(val, typ, m, off, len) \
|
|
||||||
do { \
|
|
||||||
struct mbuf *t; \
|
|
||||||
if ((off) == 0) \
|
|
||||||
(val) = (typ)mtod(m, caddr_t); \
|
|
||||||
else { \
|
|
||||||
t = m_pulldown((m), (off), (len), NULL); \
|
|
||||||
if (t) { \
|
|
||||||
if (t->m_len < (len)) \
|
|
||||||
panic("m_pulldown malfunction"); \
|
|
||||||
(val) = (typ)mtod(t, caddr_t); \
|
|
||||||
} else { \
|
|
||||||
(val) = (typ)NULL; \
|
|
||||||
(m) = NULL; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} while (/*CONSTCOND*/ 0)
|
|
||||||
|
|
||||||
#endif /*_KERNEL*/
|
|
||||||
|
|
||||||
#endif /* not _NETINET_IP6_H_ */
|
#endif /* not _NETINET_IP6_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user