diff options
author | piso <piso@FreeBSD.org> | 2006-12-01 16:27:11 +0000 |
---|---|---|
committer | piso <piso@FreeBSD.org> | 2006-12-01 16:27:11 +0000 |
commit | e2023fe5e931c743cc5f6c589caa512597dd233b (patch) | |
tree | 53369476c21225a3348df4261d25351b719174f9 /sys/netinet | |
parent | 029c1b6cc668f225977b230b2f6fcafe386cb259 (diff) | |
download | FreeBSD-src-e2023fe5e931c743cc5f6c589caa512597dd233b.zip FreeBSD-src-e2023fe5e931c743cc5f6c589caa512597dd233b.tar.gz |
Remove m_megapullup from ng_nat and put it under libalias.
Approved by: gleb
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/libalias/alias.c | 38 | ||||
-rw-r--r-- | sys/netinet/libalias/alias.h | 3 |
2 files changed, 41 insertions, 0 deletions
diff --git a/sys/netinet/libalias/alias.c b/sys/netinet/libalias/alias.c index 0120c19..6747232 100644 --- a/sys/netinet/libalias/alias.c +++ b/sys/netinet/libalias/alias.c @@ -1574,3 +1574,41 @@ LibAliasUnLoadAllModule(void) } #endif + +#ifdef _KERNEL +/* + * m_megapullup() function is a big hack (only used in ng_nat and ipfw+nat). + * + * It allocates an mbuf with cluster and copies the whole + * chain into cluster, so that it is all contigous and the + * whole packet can be accessed via char pointer. + * This is required, because libalias doesn't have idea + * about mbufs. + * + * On success, m_megapullup returns an mbuf with cluster + * containing the input packet, on failure NULL. + * In both cases, the input packet is consumed. + */ +struct mbuf * +m_megapullup(struct mbuf *m, int len) { + struct mbuf *mcl; + caddr_t cp; + + if (len > MCLBYTES) + goto bad; + + if ((mcl = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR)) == NULL) + goto bad; + + cp = mtod(mcl, caddr_t); + m_copydata(m, 0, len, cp); + m_move_pkthdr(mcl, m); + mcl->m_len = mcl->m_pkthdr.len; + m_freem(m); + + return (mcl); +bad: + m_freem(m); + return (NULL); +} +#endif diff --git a/sys/netinet/libalias/alias.h b/sys/netinet/libalias/alias.h index 4a809f4..358109c 100644 --- a/sys/netinet/libalias/alias.h +++ b/sys/netinet/libalias/alias.h @@ -189,6 +189,9 @@ int LibAliasLoadModule(char *); int LibAliasUnLoadAllModule(void); int LibAliasRefreshModules(void); +/* Mbuf helper function. */ +struct mbuf *m_megapullup(struct mbuf *, int); + /* * Mode flags and other constants. */ |