History | View | Annotate | Download (17.5 KB)
Channels - explicit links between protocols and tables
The patch adds support for channels, structures connecting protocols andtables and handling most interactions between them. The documentation ismissing yet.
Follow-up work on integration
Integrated address print lengths
Minor changes by Ondrej Santiago Zajicek
Follow-up commit on integrated BIRD
Use net_addr for interface address prefixes, support net_addr inconfiguration parser.
Changes order of iface/addr/neigh event hooks.
Now the order is:
Up -> iface, addr, neighDown -> neigh, addr, iface
It fixes the case when an iface appears, related static routes areactivated and exported to OSPF before the iface notification andtherefore forwarding addresses are not encoded in generated external...
Minor changes to default router ID calculation.
Allows IP of loopback to be used in automatic router ID selection.
Thanks to Alexander V. Chernikov for the patch.
Implements interface masks for choosing router id.
Router ID could be automatically determined based of subset ofifaces/addresses specified by 'router id from' option. The patch alsodoes some minor changes related to router ID reconfiguration.
Thanks to Alexander V. Chernikov for most of the work.
Implements handling of BSD iface arrival/departure notifications.
Thanks to Alexander V. Chernikov for original patch.
Fixes problems with creating/removing/renaming ifaces on BSD.
Fixes another minor bug in iface scan.
Iface flags are not updated in some cases.
Allows sticky link-local neighbors.
Allows using NEF_STICKY neighbors with link-local addresses. This isused for static route nexthops, they can be specified like fe80::1%eth0.
Fixes problem with sticky neighbors and iface address changes.
Thanks Matthias Schiffer for the bugreport and the original patch.
There may be more IP address records with the same IP.
Minor changes in addresses.
Mainly changes IA_UNNUMBERED to IA_PEER and adds IA_HOST. Also do notshow broadcast addr in show interfaces. Nobody cares for that.
Remove unnecessary check.
Adds support for iface link check to static protocol.
Implements link state detection.
Also changes some symbol names (IFF_ADMIN_DOWN -> IFF_SHUTDOWN,IFF_LINK_UP -> IFF_ADMIN_UP).
Allow iface pattern matching code to match peer address on ptp links.
Temporary OSPF commit - sockets.
Better flushing of interfaces.
When device protocol goes down, interfaces should be flushedasynchronously (in the same way like routes from protocols are flushed),when protocol goes to DOWN/HUNGRY.
This fixes the problem with static routes staying in kernel routing...
Implements primary address selection base on 'primary' option.
A change in OSPF and RIP interface patterns.
Allows to add more interface patterns to one common 'options'section like:
interface "eth3", "eth4" { options common to eth3 and eth4 };
Also removes undocumented and unnecessary ability to specifymore interface patterns with different 'options' sections:...
There can be multiple primary addresses with different scopesand only the highest scope one has IA_PRIMARY set, so reportthe remaining ones as "Unselected".
Yet another nasty bugfix of iface_patts_equal().
Bugfix in iface_patts_equal.When both patterns were NULL strcmp it sigfaulted.
Avoid sentence containing a colon to start new doc subsection.
More documentation.
#ifdef out lots of debugging information.
The long resource/routing table dump printed upon startup is gone nowand if you wish to see it, just send bird SIGUSR1 or use the `debug'commands.
Removed a lot of unused variables.
Please try compiling your code with --enable-warnings to see them. (Theunused parameter warnings are usually bogus, the unused variable onesare very useful, but gcc is unable to control them separately.)
IPv6 address classification fixes.
Fix stupid bug in neighbor cache.
Great cleanup of debug messages. LOCAL_DEBUG turned off in most modules,several debug() calls converted to DBG.
Added tracing of interface events.
Reimplemented neighbor cache. Now uses real hashing.
Rewrote interface type detection logic. The `unnumbered' flag is now peraddress, not per interface (hence it's ifa->flags & IA_UNNUMBERED) andshould be set reliably. IF_MULTIACCESS should be fixed now, but it isn'twise to rely on it on interfaces configured with /30 prefix.
Killed a couple of bugs in the neighbor cache.
Manual disable/enable/restart/shutdown/reconfiguration of protocolsno longer hangs on loops in neighbor lists :)
Reworked proto lists -- each proto is now in two lists: the global one(proto_list) and per-type one (original lists). A lot of things simplified.
Implemented `disable', `enable' and `restart' CLI commands.
Minor cleanups.
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).
Visible changes:
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).