Introduced new protocol-dependent integer field `aux' to struct neighbor.
`show interfaces' and `show protocols' works.
Added few basic commands: show status, show interfaces [summary],show protocols (incomplete).
Basic support for IPv6. The system-dependent part doesn't work yet,but the core routines are there and seem to be working.
o lib/ipv6.[ch] written o Lexical analyser recognizes IPv6 addresses and when in IPv6 mode, treats pure IPv4 addresses as router IDs....
Cleaned up handling of interface patterns:
o Parsing of interface patterns moved to generic code, introduced this_ipatt which works similarly to this_iface. o Interface patterns now support selection by both interface names and primary IP addresses....
Netlink support for secondary interface addresses.
I rewrote the interface handling code, so that it supports multipleaddresses per interface (needed for example for IPv6 support).
o struct iface now contains a list of all interface addresses (represented by struct ifa), iface->addr points to the primary address (if any)....
Don't try to manipulate neighbor lists for copied interface structures.This avoids few nasty references to free memory.
o The if_change_too_big_p change was too high-spirited. Fixed.o Introduced if_find_by_index()o Recognizing two types of interface updates: full update (starting with if_start_update(), ending with if_end_update(), guaranteed to see all existing interfaces) and a partial update (only if_update(),...
Interface logic changes:
o Introduced IF_LINK_UP flag corresponding to real link state.o Allowed addressless interfaces.o IF_UP is now automatically calculated and set iff the interface is administratively up, has link up and has an IP address assigned....
Parameter order for the proto->if_notify hook was different in the includefile and different in reality. Decided to use the same order as we dofor proto->rt_notify (i.e., first new value and second the old one).
Don't send any neighbor notifications to protocols being flushed.
When protocols go down, prune the neighbor list.
config->router_id works again.
struct proto again contains instance name (a copy of proto->cf->name).
Implemented new configuration/reconfiguration interface and defined protocolstate machines. Full explanation will follow soon.
die() -> bug() where appropriate.
Aesthetic fix for neighbor cache debug dump.
Added functions for manipulating interface name pattern lists:
o iface_patt_match(list, iface) -- match interface against list o iface_patts_equal(a, b, c) -- compare whether two pattern lists are equal or not. c(x,y) is called for comparison of protocol-dependent...
Generate router_id automatically if possible (standard "smallest of localregular interface addresses" rule).
Protocols should NOT rely on router_id existence -- when router ID is notavailable, the router_id variable is set to zero and protocols requiring...
Solve chicken-and-egg problems with protocol startup. We now queue all inactiveprotocols and don't send route/interface updates to them and when they come up,we resend the whole route/interface tables privately.
Removed the "scan interface list after protocol start" work-around.
Use '%I' instead of dirty address printing hacks.
Now sending IF_CHANGE_CREATE when a new interface appears and IF_CHANGE_UPonly if it's really up.
Protocol hooks. All of them may be NULL.
- Rewrote whole interface logic. Removed support for multiple addresses per interface since it makes much trouble everywhere. Instead, we understand secondary addresses as subinterfaces.
- In case interface addresses or basic flags change, we simply convert it...
Implemented scanning of network interfaces. Mostly very ugly code due toterrible kernel interface (SIOGIFCONF and friends).