[olsr-dev] questions on olsrd IPC protocol
Sat May 21 22:42:42 CEST 2005
I'm learning olsrd IPC protocol and found some inconsistency (or most
probably I missed something).
(I'm talking about olsrd distribution version 0.4.9)
In linux-gtk/src/ipc.c in function `ipc_read', line 176:
Packet length checked with the following expression:
while(ntohs(msg->v4.olsr_msgsize) < bytes)
And passed to `ipc_evaluate_message'.
In `ipc_evaluate_message', `union olsr_message *' can be casted to
`struct routemsg *' (line 321) or `struct netmsg *' (line 326).
If compare `union olsr_message' with `struct routemsg' or `struct
netmsg' possible to notice that `message size' member located on different offsets:
In `struct olsrmsg` (which is the member of `union olsr_message`) size
memeber is located on base + 2, and in `struct netmsg' and `struct
routemsg' it located at base + 1. (This offsets are valid for packed
linux-gtk gui works, I can suppouse because not specified that
structure is packed gcc align uint16_t members on 2 byte boundary. But
it is fortunity and it is not good to rely on it.
Please explain me where I can mistake or if I right please make more
determinate specifications of this strucures (with __attribute__
((packed)) for gcc). And insert dummy one byte wide filler before
`size' member in `netmsg' and `routemsg' structures.
PS. Please CC me your questions. Because I'm not subscriber and can
only to watch archives of mailinglist.
More information about the Olsr-dev