Date: Wed, 5 Sep 2001 15:32:40 -0500 From: "Ramasubramanian Ramamoorthy (EXT-NRC/Boston)" <EXT-Ramamoorthy.Ramasubramanian@nokia.com> To: "'ext Julian Elischer'" <julian@elischer.org> Cc: <freebsd-net@freebsd.org> Subject: RE: Reg. mbuf structure Message-ID: <B9CFA6CE8FFDD211A1FB0008C7894E4604559012@bseis01nok>
next in thread | raw e-mail | index | archive | help
Yes, I used this copydata function, to extract some data to calculate my checksum. But, how do I send the same extracted data which is contained in skbuff structure in the linux machine? I need to check that the packet what I am sending from the Linux machine to the BSD machine using the checksum that I am generating.=20 I am able to extract data using m_copydata() in BSD. But, I need the same data in Linux for calculating the same checksum, as the algorithms are same at both ends. Thanks, Ram. -----Original Message----- From: ext Julian Elischer [mailto:julian@elischer.org] Sent: Wednesday, September 05, 2001 5:00 PM To: Ramasubramanian Ramamoorthy (EXT-NRC/Boston) Cc: freebsd-net@freebsd.org Subject: RE: Reg. mbuf structure On Wed, 5 Sep 2001, Ramasubramanian Ramamoorthy (EXT-NRC/Boston) wrote: > Hi, > I had mailed regarding extracting the same data from the skbuff > structure in Linux and the mbuf structure in BSD. I am calculating the > checksum in two machines, one running BSD and the other running Red Hat. > I need to calculate the checksum at both the machines, for which I > should be extracting the same data from these structures and send that > to the algorithm, which calculates the checksum. >=20 > Can you tell me how we can confirm that we are extracting the same data > from both these structures. It would be of great help, if anybody could > help me in this regard soon. >=20 Do you know how much data you are supposed to be extracting? Do you have an IP header or something on the front you want to=20 ignore? I assume this is a kernel module. Here is a data extraction function from kern/uipc_mbuf.c You can modify this function to checksum intead of copying.. or since this is always in the kernel, you could just call it. /* * Copy data from an mbuf chain starting "off" bytes from the beginning, * continuing for "len" bytes, into the indicated buffer. */ void m_copydata(m, off, len, cp) register struct mbuf *m; register int off; register int len; caddr_t cp; { register unsigned count; while (off > 0) { if (off < m->m_len) break; off -=3D m->m_len; m =3D m->m_next; } while (len > 0) { count =3D min(m->m_len - off, len); bcopy(mtod(m, caddr_t) + off, cp, count); len -=3D count; cp +=3D count; off =3D 0; m =3D m->m_next; } } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B9CFA6CE8FFDD211A1FB0008C7894E4604559012>