Since we dive into the source, it is IMHO enough to bother only
olsr-dev@olsr.org:

On Sun, 2007-08-19 at 07:57 -0700, Siamak Eskandari wrote:
[...] 
> I have tried to change ip address of an wireless interface from a
> plugin right after the olsrd is started.
> I observed that the ip address of the interface changes, while the ip
> address of the node(main_addr) remains unchanged. Actually it remains
> the prior address of the interface.
> Due that fact I tried to change the ip address of "main_addr" directly
> in my code by using the following functions:
>  
>       * memcpy(&main_addr,&interface->ip_addr) and
>         memcpy(&main_addr,ifreq.ifr_addr);
>       * check_interface_updates( )
>       * chk_if_changed( )
> 
> Any explanation?

Not really. Seems that the above is not enough (obviously;-).

The main_address of an interface is also copied around in the source
various times into several structures (and I'm not sure how long they
live).

Basically I'm not a fan of the lots of copying around - it may expose
above behaviour (and to fix it you have to walk though the various lists
and update the copies too) for short time struct's, a pointer is much
better (and is the same for IPv4/IPv6). But this implies that one cannot
simply delete the struct behind that pointers.
For the main-address of the node: This variable will probably never go
away (I didn't look into the soruce to find the exact palce) so if you
want to fix it more seriously, it could be a start to replace the
various copies of the main_addr with pointers to the "global variable".

	Bernd
-- 
Firmix Software GmbH                   http://www.firmix.at/
mobil: +43 664 4416156                 fax: +43 1 7890849-55
          Embedded Linux Development and Services




