Subject: sizeof() problem in ISO CLNP kernel driver
To: None <port-amiga@NetBSD.ORG>
From: George Harvey <fr30@dial.pipex.com>
List: port-amiga
Date: 10/27/1997 22:52:18
I have been trying to bring up Isode 8.0 using the OSI network
layer in the NetBSD kernel (NetBSD 1.2 on an Amiga 3000). In the
process, I have identified some bugs in the CLNP and ESIS code:
The problems relate to two structures:
clnp_fixed defined in netiso/clnp.h
esis_fixed defined in netiso/esis.h
The affected sources include
netiso/clnp_er.c
netiso/clnp_input.c
netiso/clnp_output.c
netiso/esis.c
Both structures are 9 bytes but 'sizeof()' returns a value of 10.
The way the size is used, is to calculate offsets to the start
of the NSAP addresses in the packet header. The extra byte then
causes the addresses to be inserted in the wrong position in the
output routines and incorrectly decoded in the input routines.
I have added some temporary fixes to my kernel to work round the
extra byte and confirmed that this does fix the problem I was
seeing with incorrect packet formats. The question is, what is
the machine-independent way to fix this type of problem since I
guess it is caused by data alignment rules which will be different
for different processors?
George Harvey | Amiga A3000T, CyberStorm-II 040,
email: fr30@dial.pipex.com | Picasso-II, MFC-III, Ariadne