summaryrefslogtreecommitdiff
path: root/nest/iface.h
AgeCommit message (Collapse)Author
2017-09-06Basic VRF supportOndrej Zajicek (work)
Add basic VRF (virtual routing and forwarding) support. Protocols can be associated with VRFs, such protocols will be restricted to interfaces assigned to the VRF (as reported by Linux kernel) and will use sockets bound to the VRF. E.g., different multihop BGP instances can use diffent kernel routing tables to handle BGP TCP connections. The VRF support is preliminary, currently there are several limitations: - Recent Linux kernels (4.11) do not handle correctly sockets bound to interaces that are part of VRF, so most protocols other than multihop BGP do not work. This will be fixed by future kernel versions. - Neighbor cache ignores VRFs. Breaks config with the same prefix on local interfaces in different VRFs. Not much problem as single hop protocols do not work anyways. - Olock code ignores VRFs. Breaks config with multiple BGP peers with the same IP address in different VRFs. - Incoming BGP connections are not dispatched according to VRFs. Breaks config with multiple BGP peers with the same IP address in different VRFs. Perhaps we would need some kernel API to read VRF of incoming connection? Or probably use multiple listening sockets in int-new branch. - We should handle master VRF interface up/down events and perhaps disable associated protocols when VRF goes down. Or at least disable associated interfaces. - Also we should check if the master iface is really VRF iface and not some other kind of master iface. - BFD session request dispatch should be aware of VRFs. - Perhaps kernel protocol should read default kernel table ID from VRF iface so it is not necessary to configure it. - Perhaps we should have per-VRF default table.
2013-12-02Fixes problem with source address selection in BGP and BFD.Ondrej Zajicek
2012-12-27Implements interface masks for choosing router id.Ondrej Zajicek
Router ID could be automatically determined based of subset of ifaces/addresses specified by 'router id from' option. The patch also does some minor changes related to router ID reconfiguration. Thanks to Alexander V. Chernikov for most of the work.
2012-01-23Fixes problems with creating/removing/renaming ifaces on BSD.Ondrej Zajicek
2012-01-01Allows sticky link-local neighbors.Ondrej Zajicek
Allows using NEF_STICKY neighbors with link-local addresses. This is used for static route nexthops, they can be specified like fe80::1%eth0 .
2011-12-12Fixes problem with sticky neighbors and iface address changes.Ondrej Zajicek
Thanks Matthias Schiffer for the bugreport and the original patch.
2011-04-05Minor fixes.Ondrej Zajicek
2011-03-28Minor changes in addresses.Ondrej Zajicek
Mainly changes IA_UNNUMBERED to IA_PEER and adds IA_HOST. Also do not show broadcast addr in show interfaces. Nobody cares for that.
2010-11-19Remove some runaway debug messages and typos.Ondrej Zajicek
2010-11-11Adds support for iface link check to static protocol.Ondrej Zajicek
2010-11-11Implements link state detection.Ondrej Zajicek
Also changes some symbol names (IFF_ADMIN_DOWN -> IFF_SHUTDOWN, IFF_LINK_UP -> IFF_ADMIN_UP).
2010-03-14Temporary OSPF commit - sockets.Ondrej Zajicek
2010-03-11Merge branch 'new' into socket2Ondrej Zajicek
2010-03-11Temoporary OSPF commit - socket changes.Ondrej Zajicek
2010-02-27Better flushing of interfaces.Ondrej Zajicek
When device protocol goes down, interfaces should be flushed asynchronously (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 table after BIRD shutdown.
2010-02-26Many changes in (mainly) kernel syncers.Ondrej Zajicek
- BSD kernel syncer is now self-conscious and can learn alien routes - important bugfix in BSD kernel syncer (crash after protocol restart) - many minor changes and bugfixes in kernel syncers and neighbor cache - direct protocol does not generate host and link local routes - min_scope check is removed, all routes have SCOPE_UNIVERSE by default - also fixes some remaining compiler warnings
2009-09-08Temporary OSPFv3 development commit.Ondrej Zajicek
Finally, it is working.
2009-05-29Implements primary address selection base on 'primary' option.Ondrej Zajicek
2009-05-06A change in OSPF and RIP interface patterns.Ondrej Zajicek
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 specify more interface patterns with different 'options' sections: interface "eth3" { options ... }, "eth4" { options ... };
2000-06-01Removed comments about workings of the old neighbor cache which areMartin Mares
(1) obsolete and (2) replaced by the progdoc.
2000-06-01Modified the neighbor cache to remember local addresses as well.Martin Mares
neighbor->scope now contains proper address scope which is zero (SCOPE_HOST) for local addresses, higher (SCOPE_LINK, ..., SCOPE_UNIVERSE) for remote ones.
2000-03-27if_connected() is again private.Martin Mares
Introduced neigh_connected_to() to serve the same purpose efficiently.
2000-03-26I broke compilation. Sorry.Pavel Machek
2000-03-26if_connected is usefull outside of neighbour cache.Pavel Machek
2000-03-01Reimplemented neighbor cache. Now uses real hashing.Martin Mares
2000-02-29Rewrote interface type detection logic. The `unnumbered' flag is now perMartin Mares
address, not per interface (hence it's ifa->flags & IA_UNNUMBERED) and should be set reliably. IF_MULTIACCESS should be fixed now, but it isn't wise to rely on it on interfaces configured with /30 prefix.
2000-01-19Killed a couple of bugs in the neighbor cache.Martin Mares
Manual disable/enable/restart/shutdown/reconfiguration of protocols no longer hangs on loops in neighbor lists :)
1999-12-16Minor cleanups.Martin Mares
1999-12-01Introduced new protocol-dependent integer field `aux' to struct neighbor.Martin Mares
1999-11-25Added few basic commands: show status, show interfaces [summary],Martin Mares
show protocols (incomplete).
1999-08-03Cleaned up handling of interface patterns:Martin Mares
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. o Proto `direct' updated. o RIP updated as well, it also seems the memory corruption bug there is gone.
1999-05-06I rewrote the interface handling code, so that it supports multipleMartin Mares
addresses 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). o Interface has IF_UP set iff it's up and it has a primary address. o IF_UP is now independent on IF_IGNORED (i.e., you need to test IF_IGNORED in the protocols; I've added this, but please check). o The if_notify_change hook has been simplified (only one interface pointer etc.). o Introduced a ifa_notify_change hook. (For now, only the Direct protocol does use it -- it's wise to just listen to device routes in all other protocols.) o Removed IF_CHANGE_FLAGS notifier flag (it was meaningless anyway). o Updated all the code except netlink (I'll look at it tomorrow) to match the new semantics (please look at your code to ensure I did it right). Things to fix: o Netlink. o Make krt-iface interpret "eth0:1"-type aliases as secondary addresses.
1999-03-02o The if_change_too_big_p change was too high-spirited. Fixed.Martin Mares
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(), usually due to asynchronous interface notifications).
1999-03-02Interface logic changes:Martin Mares
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. It may be IF_IGNORED, though (as in case of the loopback). o Any changes which include up/down transition are considered small enough to not provoke artificial upping and downing of the interface. o When an interface disappears (i.e., it wasn't seen in the last scan), we announce this change only once. o IF_LOOPBACK implies IF_IGNORE.
1999-02-13When protocols go down, prune the neighbor list.Martin Mares
1999-02-13config->router_id works again.Martin Mares
1999-02-05Implemented new configuration/reconfiguration interface and defined protocolMartin Mares
state machines. Full explanation will follow soon.
1999-01-12Keep protocol data out of iface_patt.Pavel Machek
1998-12-04Rip now has configurable per-interface metric (please rewiev), and fewPavel Machek
more configurable parameters. To do that, union was added into iface_patt.
1998-11-29Added functions for manipulating interface name pattern lists:Martin Mares
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 data.
1998-10-19Generate router_id automatically if possible (standard "smallest of localMartin Mares
regular interface addresses" rule). Protocols should NOT rely on router_id existence -- when router ID is not available, the router_id variable is set to zero and protocols requiring valid router ID should just refuse to start, reporting such error to the log.
1998-10-17Fixed misleading comment.Martin Mares
1998-10-17Solve chicken-and-egg problems with protocol startup. We now queue all inactiveMartin Mares
protocols 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.
1998-06-04Now sending IF_CHANGE_CREATE when a new interface appears and IF_CHANGE_UPMartin Mares
only if it's really up.
1998-06-01- Rewrote whole interface logic. Removed support for multiple addresses perMartin Mares
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 to a down/up sequence. - Implemented the universal neighbour cache. (Just forget what did previous includes say of neighbour caching, this one is brand new.)
1998-05-26Implemented scanning of network interfaces. Mostly very ugly code due toMartin Mares
terrible kernel interface (SIOGIFCONF and friends).
1998-05-24Added interface index (used only by OS-dependent code since ifindexes itselfMartin Mares
are OS-dependent).
1998-05-24Point-to-point links: added address of the opposite end.Martin Mares
1998-05-03Next attempt on data structures...Martin Mares
1998-04-28Changed #include <x/y> to #include "x/y" for our local includes, so thatMartin Mares
gcc -MM can be used to separate them from the system ones. Added automatic generation of dependencies.