1. 03 Aug, 1999 2 commits
  2. 26 May, 1999 1 commit
  3. 21 May, 1999 1 commit
  4. 14 May, 1999 1 commit
  5. 07 May, 1999 1 commit
  6. 06 May, 1999 1 commit
    • Martin Mareš's avatar
      I rewrote the interface handling code, so that it supports multiple · 9a158361
      Martin Mareš authored
      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.
      9a158361
  7. 27 Apr, 1999 1 commit
  8. 12 Apr, 1999 2 commits
  9. 03 Apr, 1999 1 commit
  10. 29 Mar, 1999 1 commit
  11. 26 Mar, 1999 1 commit
    • Martin Mareš's avatar
      Moved to a much more systematic way of configuring kernel protocols. · 7e5f5ffd
      Martin Mareš authored
        o  Nothing is configured automatically. You _need_ to specify
           the kernel syncer in config file in order to get it started.
        o  Syncing has been split to route syncer (protocol "Kernel") and
           interface syncer (protocol "Device"), device routes are generated
           by protocol "Direct" (now can exist in multiple instances, so that
           it will be possible to feed different device routes to different
           routing tables once multiple tables get supported).
      
      See doc/bird.conf.example for a living example of these shiny features.
      7e5f5ffd
  12. 03 Mar, 1999 1 commit
    • Martin Mareš's avatar
      Rewrote the kernel syncer. The old layering was horrible. · 2d140452
      Martin Mareš authored
      The new kernel syncer is cleanly split between generic UNIX module
      and OS dependent submodules:
      
        -  krt.c (the generic part)
        -  krt-iface (low-level functions for interface handling)
        -  krt-scan (low-level functions for routing table scanning)
        -  krt-set (low-level functions for setting of kernel routes)
      
      krt-set and krt-iface are common for all BSD-like Unices, krt-scan is heavily
      system dependent (most Unices require /dev/kmem parsing, Linux uses /proc),
      Netlink substitues all three modules.
      
      We expect each UNIX port supports kernel routing table scanning, kernel
      interface table scanning, kernel route manipulation and possibly also
      asynchronous event notifications (new route, interface state change;
      not implemented yet) and build the KRT protocol on the top of these
      primitive operations.
      2d140452
  13. 02 Mar, 1999 1 commit
  14. 01 Mar, 1999 3 commits
  15. 13 Feb, 1999 4 commits
  16. 11 Feb, 1999 2 commits
    • Martin Mareš's avatar
      Real implementation of protocol state machines. Delayed startup/shutdown · 67bd949a
      Martin Mareš authored
      should work now. Initial feeding of protocols by interfaces/routes is
      done from the event queue to prevent unwanted recursion.
      67bd949a
    • Martin Mareš's avatar
      Added simple event scheduling system to avoid recursive calling · e8f73195
      Martin Mareš authored
      of various callbacks.
      
      Events are just another resource type objects (thus automatically freed
      and unlinked when the protocol using them shuts down). Each event can
      be linked in at most one event list. For most purposes, just use the
      global event list handled by the following functions:
      
      	ev_schedule	Schedule event to be called at the next event
      			scheduling point. If the event was already
      			scheduled, it's just re-linked to the end of the list.
      	ev_postpone	Postpone an already scheduled event, so that it
      			won't get called. Postponed events can be scheduled
      			again by ev_schedule().
      
      You can also create custom event lists to build your own synchronization
      primitives. Just use:
      
      	ev_init_list	to initialize an event list
      	ev_enqueue	to schedule event on specified event list
      	ev_postpone	works as well for custom lists
      	ev_run_list	to run all events on your custom list
      	ev_run		to run a specific event and dequeue it
      e8f73195
  17. 05 Feb, 1999 1 commit
  18. 10 Jan, 1999 1 commit
  19. 20 Dec, 1998 1 commit
    • Martin Mareš's avatar
      Finer grained logging levels: · 98e87c86
      Martin Mareš authored
      #define L_DEBUG "\001"   /* Debugging messages */
      #define L_INFO "\002"    /* Informational messages */
      #define L_WARN "\003"    /* Warnings */
      #define L_ERR "\004"     /* Errors */
      #define L_AUTH "\005"    /* Authorization failed etc. */
      #define L_FATAL "\006"   /* Fatal errors */
      #define L_TRACE "\002"   /* Protocol tracing */
      #define L_INFO "\003"    /* Informational messages */
      #define L_REMOTE "\004"  /* Remote protocol errors */
      #define L_WARN "\004"    /* Local warnings */
      #define L_ERR "\005"     /* Local errors */
      #define L_AUTH "\006"    /* Authorization failed etc. */
      #define L_FATAL "\007"   /* Fatal errors */
      #define L_BUG "\010"     /* BIRD bugs */
      
      Introduced bug() which is like die(), but with level L_BUG. Protocols
      should _never_ call die() as it should be used only during initialization
      and on irrecoverable catastrophic events like out of memory.
      
      Also introduced ASSERT() which behaves like normal assert(), but it calls
      bug() when assertion fails. When !defined(DEBUGGING), it gets ignored.
      98e87c86
  20. 08 Dec, 1998 1 commit
    • Martin Mareš's avatar
      Hopefully finished kernel syncer (krt) rewrite: · 8e66a0eb
      Martin Mareš authored
        o  Interface syncing is now a part of krt and it can have configurable
           parameters. Actually, the only one is scan rate now :)
        o  Kernel routing table syncing is now synchronized with interface
           syncing (we need the most recent version of the interface list
           to prevent lots of routes to non-existent destinations from
           appearing). Instead of its own timer, we just check if it's
           route scan time after each iface list scan.
        o  Syncing of device routes implemented.
        o  CONFIG_AUTO_ROUTES should control syncing of automatic device routes.
        o  Rewrote krt_remove_route() to really remove routes :)
        o  Better diagnostics.
        o  Fixed a couple of bugs.
      8e66a0eb
  21. 07 Dec, 1998 1 commit
  22. 06 Dec, 1998 1 commit
  23. 29 Nov, 1998 2 commits
  24. 27 Nov, 1998 1 commit
  25. 19 Oct, 1998 2 commits
  26. 18 Oct, 1998 1 commit
  27. 13 Oct, 1998 1 commit
    • Martin Mareš's avatar
      o There are cases when SIOCGIFINDEX is defined, but it doesn't work. When · c93214d4
      Martin Mareš authored
         this happens, don't reject the whole interface, just mark it as index 0.
      o  Removed Pavel's comment about EFAULT and SIGSEGV. EFAULT is a valid return
         code for cases where the buffer is too small.
      o  Commented out the smart interface list size logic temporarily as it seems
         Linux 2.0 SIOCGIFCONF doesn't react to ifc_req==NULL sanely. Replaced it
         by exponential stepping.
      c93214d4
  28. 17 Jun, 1998 1 commit
  29. 01 Jun, 1998 1 commit
    • Martin Mareš's avatar
      - Rewrote whole interface logic. Removed support for multiple addresses per · 4cc78c50
      Martin Mareš authored
        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.)
      4cc78c50
  30. 26 May, 1998 1 commit