Subject: help wanted with sys/net/if_ethersubr.c
To: None <tech-kern@NetBSD.org>
From: =?iso-8859-1?q?Philip=20Christian?= <philipchristian2003@yahoo.co.uk>
List: tech-kern
Date: 12/24/2003 17:42:22
I have two i386 laptops
one is corrupting its ESIS routing table and the other
is not
in fact I suspect that it is corrupting the source mac
address of all incoming OSI packets (ESIS, ISIS, CLNP
etc)
i sort of know why, here is what i know:-

if one looks in sys/net/if_ethersubr.c then:-

the process for receiving packets starts at line 651
at line 674 you get
eh = mtod(m,struct ether_header *);

however inside the ifdef ISO bit at line 935
you find
*mtod(m, struct ether_header *) = *eh

on the pc that has a corrupted esis table then before
that line
eh->ether_shost is correct but after it is corrupted

on the pc that doesn't have a corrupted esis table
eh->ether_shost is accurate both before and after the
*mtod line of code

also, on the pc with the corrupted table then
mtod(m, struct ether_header * ) is three bytes higher
than eh

on the pc without the corrupted table mtod(m, struct
ether_header * ) is in a totally different place to eh

given line 674 I don't understand either

also I didn't think that you could just do a *pointer
= *other-pointer if they are pointers to structures ?
I thought that you would have to do a bcopy or
something if you want to copy a whole structure over ?
so I am not sure what this line is trying to acheive

I'm afraid that I'm not enough of a programmer to get
any further than that...

thanks for any help, Philip

________________________________________________________________________
Yahoo! Messenger - Communicate instantly..."Ping" 
your friends today! Download Messenger Now 
http://uk.messenger.yahoo.com/download/index.html