Remove m_megapullup from ng_nat and put it under libalias.

Approved by: gleb
This commit is contained in:
Paolo Pisati 2006-12-01 16:27:11 +00:00
parent 501d8700fa
commit e876228edc
3 changed files with 41 additions and 35 deletions

View File

@ -56,8 +56,6 @@ static ng_newhook_t ng_nat_newhook;
static ng_rcvdata_t ng_nat_rcvdata;
static ng_disconnect_t ng_nat_disconnect;
static struct mbuf * m_megapullup(struct mbuf *, int);
/* List of commands and how to convert arguments to/from ASCII. */
static const struct ng_cmdlist ng_nat_cmdlist[] = {
{
@ -327,36 +325,3 @@ ng_nat_disconnect(hook_p hook)
return (0);
}
/*
* m_megapullup() function is a big hack.
*
* 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.
*/
static 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);
}

View File

@ -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

View File

@ -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.
*/