summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_encap.c
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2002-10-16 01:54:46 +0000
committersam <sam@FreeBSD.org>2002-10-16 01:54:46 +0000
commit2a86be217a6aed33eda6628df2b175e49172cd9f (patch)
treeb26e1e9f49b40642051748bcd3961cc2a2b5ff1d /sys/netinet/ip_encap.c
parent733bfbdd78ddb9efc129532b2c2239d0bacfaf1a (diff)
downloadFreeBSD-src-2a86be217a6aed33eda6628df2b175e49172cd9f.zip
FreeBSD-src-2a86be217a6aed33eda6628df2b175e49172cd9f.tar.gz
Replace aux mbufs with packet tags:
o instead of a list of mbufs use a list of m_tag structures a la openbsd o for netgraph et. al. extend the stock openbsd m_tag to include a 32-bit ABI/module number cookie o for openbsd compatibility define a well-known cookie MTAG_ABI_COMPAT and use this in defining openbsd-compatible m_tag_find and m_tag_get routines o rewrite KAME use of aux mbufs in terms of packet tags o eliminate the most heavily used aux mbufs by adding an additional struct inpcb parameter to ip_output and ip6_output to allow the IPsec code to locate the security policy to apply to outbound packets o bump __FreeBSD_version so code can be conditionalized o fixup ipfilter's call to ip_output based on __FreeBSD_version Reviewed by: julian, luigi (silent), -arch, -net, darren Approved by: julian, silence from everyone else Obtained from: openbsd (mostly) MFC after: 1 month
Diffstat (limited to 'sys/netinet/ip_encap.c')
-rw-r--r--sys/netinet/ip_encap.c36
1 files changed, 12 insertions, 24 deletions
diff --git a/sys/netinet/ip_encap.c b/sys/netinet/ip_encap.c
index e12f50a..a547c66 100644
--- a/sys/netinet/ip_encap.c
+++ b/sys/netinet/ip_encap.c
@@ -485,38 +485,26 @@ encap_fillarg(m, ep)
struct mbuf *m;
const struct encaptab *ep;
{
-#if 0
- m->m_pkthdr.aux = ep->arg;
-#else
- struct mbuf *n;
+ struct m_tag *tag;
- n = m_aux_add(m, AF_INET, IPPROTO_IPV4);
- if (n) {
- *mtod(n, void **) = ep->arg;
- n->m_len = sizeof(void *);
+ tag = m_tag_get(PACKET_TAG_ENCAP, sizeof (void*), M_NOWAIT);
+ if (tag) {
+ *(void**)(tag+1) = ep->arg;
+ m_tag_prepend(m, tag);
}
-#endif
}
void *
encap_getarg(m)
struct mbuf *m;
{
- void *p;
-#if 0
- p = m->m_pkthdr.aux;
- m->m_pkthdr.aux = NULL;
- return p;
-#else
- struct mbuf *n;
-
- p = NULL;
- n = m_aux_find(m, AF_INET, IPPROTO_IPV4);
- if (n) {
- if (n->m_len == sizeof(void *))
- p = *mtod(n, void **);
- m_aux_delete(m, n);
+ void *p = NULL;
+ struct m_tag *tag;
+
+ tag = m_tag_find(m, PACKET_TAG_ENCAP, NULL);
+ if (tag) {
+ p = *(void**)(tag+1);
+ m_tag_delete(m, tag);
}
return p;
-#endif
}
OpenPOWER on IntegriCloud