diff options
author | Paolo Pisati <piso@FreeBSD.org> | 2006-12-01 16:27:11 +0000 |
---|---|---|
committer | Paolo Pisati <piso@FreeBSD.org> | 2006-12-01 16:27:11 +0000 |
commit | e876228edcb3e7cd0938f7519726397fa286c3d1 (patch) | |
tree | 53369476c21225a3348df4261d25351b719174f9 /sys/netinet/libalias | |
parent | 501d8700faf15ea14b71fd314678ce08cf6fdf27 (diff) | |
download | src-e876228edcb3e7cd0938f7519726397fa286c3d1.tar.gz src-e876228edcb3e7cd0938f7519726397fa286c3d1.zip |
Remove m_megapullup from ng_nat and put it under libalias.
Approved by: gleb
Notes
Notes:
svn path=/head/; revision=164797
Diffstat (limited to 'sys/netinet/libalias')
-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 0120c1988b80..6747232b1f8d 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 4a809f406530..358109c1b08c 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. */ |