Date: Wed, 3 May 2000 00:11:07 +1200 From: "MATTHEW JOHN,LUCKIE" <mjl12@waikato.ac.nz> To: "'freebsd-hackers@freebsd.org '" <freebsd-hackers@freebsd.org> Subject: mbufs & ip stack Message-ID: <45E87454FFC2D211AD9800508B6500942392F8@stu-ex1.waikato.ac.nz>
next in thread | raw e-mail | index | archive | help
Hi
I am writing some custom code into the freebsd ip stack (as a project)
I am trying to get the payload of an ip packet out of an mbuf and cast it to
the type of data being carried (an ipmp header).
When i try to get the ipmp_hdr out of the mbuf, and try to do some work with
it, i seem to be referencing the ip_hdr with the ipmp_hdr pointer (based on
the values i extract from it)
What am i doing wrong? I have based my code on the Freebsd 3.2 icmp code
and am running under freebsd 3.2
Also, why is the ICMP_ADVLENMIN defined as (8 + sizeof(struct ip) + 8) in
ip_icmp.h ??
Below is the source for what i am doing
Hopefully someone can help
Matthew
#define IPMP_ADVLENMIN (8 + sizeof(struct ip) + 8)
void ipmp_input(struct mbuf *m, int off)
{
struct ip *ip_hdr;
int ipmplen;
int hlen;
int i;
struct ipmp_header *ipmp_hdr;
ip_hdr = mtod(m, struct ip *);
ipmplen = ip_hdr->ip_len;
hlen = off;
/* check that the length of the data in the packet is the minimum reqd */
if(ipmplen < IPMP_MINLEN)
{
ipmpstat.tooshort++;
goto freeit;
}
/* pull up the header of the ipmp packet */
i = hlen + min(ipmplen, IPMP_ADVLENMIN);
if(m->m_len < i && (m = m_pullup(m,i)) == 0)
{
/* if the call fails to m_pullup, the buffer is freed automatically */
ipmpstat.tooshort++;
return;
}
/* get the ip header again as the mbuf locn has probably changed */
ip_hdr = mtod(m, struct ip *);
/* get the ipmp header */
m->m_len -= hlen;
m->m_data += hlen;
ipmp_hdr = mtod(m, struct ipmp_header *);
m->m_len += hlen;
m->m_data -= hlen;
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?45E87454FFC2D211AD9800508B6500942392F8>
