There is a bug in current code: if 'ipv6 address eui64' is unset (default), the default kernel-assigned link-local 'fe80::.../64' address is deleted from the interface. This breaks IPv6 router-advert and other IPv6 things.
To correctly handle this case, break apart set_ipv6_eui64_address into add_ and del_ functions that simply add/delete the given prefix+eui64, then add a default 'fe80::/64' eui64 address in all interface scripts.
To complement this change, add the ability to delete the default link-local address via 'ipv6 address no-default-link-local' or similar, and expand the eui64 code to support more than 1 prefix.
Interfaces that are part of bridges should not have any addresses, link-local or otherwise, so add code to detect this and not add the default link-local prefix in that case. Later, a validation can be added that raises a ConfigError if an interface has an address assigned while being added to a bridge.