Hey,
I am sort of confused with the parameters for IPsumReplaceShort function,
I understand that I will pass the &ip-ip_sum for the cksump parameter.
but I am not able to understand wht oldvap & newvalp stand for..
Xavier.
On Mon, 22 Nov 1999, Julian Elischer wrote:
> How many bytes have you changed?
>
> is it possible that some of the values have already been ntohs()'d
> or something similar?
>
> rather than recalculate the whole packet, just update the exisitng
> value.
>
> there is an rfc for this but it took me a while to get
> the code right in C on a 386. The trick is getting the 1s complement
> arithmetic right.
>
>
>
> #define FIXSUM16(c, op, np) \
> do { \
> (c) -= (u_int16_t) ~*((u_int16_t *) (op)); \
> if ((c) < 0) { \
> (c) += 0xffff; \
> } \
> (c) -= (u_int16_t) *((u_int16_t *) (np)); \
> if ((c) < 0) { \
> (c) += 0xffff; \
> } \
> } while (0)
>
>
> /*
> * IpsumReplaceShort()
> *
> * Replace a 16 bit aligned (relative to the checksum) 16 bit value
> * in a packet and change the IP/TCP/UDP checksum at the same time.
> *
> * Works with both big and little endian machines(!)
> *
> * If for some wierd reason you want to replace a nonaligned value,
> * you need to byteswap it and the old value before doing the
> * subtractions.
> */
>
> void
> IpsumReplaceShort(u_int16_t *cksump, u_int16_t *oldvalp, u_int16_t newval)
> {
> register int cksum;
>
> cksum = *cksump;
> FIXSUM16(cksum, oldvalp, &newval);
> *cksump = cksum;
> *oldvalp = newval;
> }
>
>
> On Tue, 23 Nov 1999, Parthasarathy M. Aji wrote:
>
> > Hey,
> >
> > I am trying to recompute the checksum of an IP packet. I use
> > netinet/in_chksum.c to do this. The values returned are not correct. I've
> > reset the ip_sum field to 0 before doing the sum. Is there something
> > missing?
> >
> > thanks
> >
> >
> >
> > To Unsubscribe: send mail to [EMAIL PROTECTED]
> > with "unsubscribe freebsd-hackers" in the body of the message
> >
>
>
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message