Note: this file lists major user-visible changes only.

* Changes in Quagga 0.99.21

- [bgpd] BGP multipath support has been merged
- [bgpd] SAFI (Multicast topology) support has been extended to propagate
  the topology to zebra.
- [bgpd] AS path limit functionality has been removed
- [babeld] a new routing daemon implementing the BABEL ad-hoc mesh routing
  protocol has been merged.
- [isisd] a major overhaul has been picked up. Please note that isisd is
  STILL NOT SUITABLE FOR PRODUCTION USE.
- [*] a lot of bugs have been fixed, please refer to the git log

* Changes in Quagga 0.99.10

- [bgpd] 4-byte AS support added
- [bgpd] MRT format changes to version 2. Those relying on
  bgpd MRT table dumps may need to update their tools.
- [bgpd] Added new route-map set statement: "as-path exclude"
- Zebra RIB updates queue has evolved into a multi-level
  structure to address RIB consistency issues.

* Changes in Quagga 0.99.2

- [bgpd] Work queues added to bgpd to split up update processing,
  particularly beneficial when a peer session goes down. AS_PATH
  parsing rewritten to be clearer, more robust and ready for 4-byte.

- [ripd] Simple authentication is no longer the default authentication
  mode for ripd. The default is now no-authentication. Any setups which
  used simple authentication will probably need to update their
  configuration manually.

- [ospfd] 1s dead-interval with sub-second Hellos feature added.
  SPF timers now specified in milliseconds, and with adaptive
  hold-time support. RFC3137 Stub-router support added. Default ABR
  type is now 'cisco'.

- Solaris least privileges support added.

* Changes in Quagga 0.99.1

- Zserv is now buffered via threads and non-blocking in most cases for both
  clients and zebra, which should improve responsiveness of daemons when
  they must send many messages to zebra.

- 'show thread cpu' now displays both cpu+system and wall-clock time,
  where getrusage() is available.

- Background threads added and workqueue API added, with a
  'show work-queues' command. Thread scheduling improved slightly.

- Zebra now has a work-queue for RIB processing. See 'show work-queues' in
  the zebra daemon vty.

- Support for interface renaming on Linux netlink systems.

- GNU Zebra bgpd merges, including BGP Graceful-restart and "match ip
  route-source" command.

- Automatic logging of backtraces should daemons crash to assist in
  diagnosis. See the documentation for more information on configuring
  logging correctly, and set --enable-gcc-rdynamic if compiling with gcc.

* Changes in Quagga 0.98.0

- Logging facilities upgraded.  One can now specify a severity level
  for each logging destination.  And a new "show logging" command gives
  thorough information on the current logging system configuration.

- Watchquagga daemon added.  This is not well tested yet.  Please try
  monitor mode first before enabling restart features.  It is important
  to make sure that the various timers are configured with appropriate
  values for your site.

- BGP route-server support added. See the texinfo documentation.

- OSPF API initialisation is disabled by default even if compiled in. You
  can enable it with -a/--apiserver command line switch.

- "write-config integrated" vtysh command replaced with "service
  integrated-vtysh-config" command.

- Router id is now handled by zebra daemon and all daemons receive changes
  from it. Router id can be overriden in daemons' configurations of course.
  To fix common router id in zebra daemon you can either install non-127
  address on loopback or use "router-id x.x.x.x" command.

- "secondary" keyword is removed from ip address configuration. All
  supported OS'es have their own vision what's secondary address and
  how to handle it.

- Zebra no longer enables forwarding by default. If you rely on zebra to
  enable forwarding make sure to add '<ip|ip6> forwarding' statements
  to your zebra configuration file.

- All libraries are built and used shared, on platforms where libtool
  supports shared libraries.

- Router advertisement syntax is changed. In usual cases (if you didn't do
  any fancy stuff) it's enough to change lines in configuration from:
  "ipv6 nd prefix-advertisement X:X:X:X::/X 2592000 604800 autoconfig on-link"
  to:
  "ipv6 nd prefix X:X:X:X::/X"

  All router advertisement options are documented in texi documentation.

- --enable-nssa configure switch is removed. NSSA support is stable enough.

- Daemons don't look at current directory for config file any more.

* Changes in Quagga 0.96.5

- include files are installed in $(prefix)/include/quagga.  Programs
  building against these includes should -I$(prefix)/include and e.g.
  #include <quagga/routemap.h>

- New option --enable-exampledir puts example files in a separate
  directory from $(sysconfdir), easing NetBSD pkgsrc hierarchy rules
  compliance.

- New configure options --enable-configfile-mask and
  --enable-logfile-mask to set umask values for config and log
  values.  Masks default to 0600, matching previous behavior.

- Import current CVS isisd from SourceForge, then merge it with
  the Quagga's Framework.

* Changes in Quagga 0.96.4

- Further fixes to ospfd, some relating to the PtP revert. Interface
lookups should be a lot more robust now. 

- Fix for a remote triggerable crash in vty layer.

- Improvements to ripd, and addition of split horizon support.

- Improved bgpd table support, now dumps at time of day intervals rather
than time from startup intervals. Much improved support for IPv6 table
dumps. show commands for views improved.

* Changes in Quagga 0.96.3

- revert the 'generic PtP' patch. Means Quagga will no longer work with
FreeSWAN, however, on the plus side this gets rid of a lot of niggly bugs
which the PtP patch introduced.

* Changes in Quagga 0.96.2

- Fix crash in ospfd

* Changes in Quagga 0.96.1

- Iron out problem with the privileges definitions

* Changes in Quagga 0.96

- Privilege support, daemons now run with the minimal privileges needed, see
  the documentation for details.
  
- NSSA ABR support in ospfd.

- OSPF-API support merged in.

- 6WIND patch merged in.

* Changes in zebra-0.93

* Changes in bgpd

** Configuration is changed to new format.

* Changes in ospfd

** Crush bugs which reported on Zebra ML is fixed.

** Opaque LSA and TE LSA support is added by KDD R&D Laboratories,
   Inc.

* Chages in ospf6d

** Many bugs are fixed.

* Changes in zebra-0.92a

* Changes in bgpd

** Fix "^$" community list bug.

** Below command's Address Family specific configurations are added

  nexthop-self
  route-reflector-client
  route-server-client
  soft-reconfiguration inbound

* Changes in zebra

** Treat kernel type routes as EGP routes.

* Changes in zebra-0.92

** Overall security is improved.  Default umask is 0077.

* Changes in ripd

** If output interface is in simple password authentication mode,
substruct one from rtemax.

* Changes in bgpd

** IPv4 multicast and IPv6 unicast configuration is changed to so
called new config.  All of AFI and SAFI specific configuration is
moved to "address-family" node.  When you have many IPv6 only
configuration, you will see many "no neighbor X:X::X:X activate" line
in your configuration to disable IPv4 unicast NLRI exchange.  In that
case please use "no bgp default ipv4-unicast" command to suppress the
output.  Until zebra-0.93, old config is still left for compatibility.

Old config
==========
router bgp 7675
 bgp router-id 10.0.0.1
 redistribute connected
 network 192.168.0.0/24
 neighbor 10.0.0.2 remote-as 7675
 ipv6 bgp network 3ffe:506::/33
 ipv6 bgp network 3ffe:1800:e800::/40
 ipv6 bgp aggregate-address 3ffe:506::/32
 ipv6 bgp redistribute connected
 ipv6 bgp neighbor 3ffe:506:1000::2 remote-as 1

New config
==========
router bgp 7675
 bgp router-id 10.0.0.1
 network 192.168.0.0/24
 redistribute connected
 neighbor 10.0.0.2 remote-as 7675
 neighbor 3ffe:506:1000::2 remote-as 1
 no neighbor 3ffe:506:1000::2 activate
!
 address-family ipv6
  network 3ffe:506::/33
  network 3ffe:1800:e800::/40
  aggregate-address 3ffe:506::/32
  redistribute connected
  neighbor 3ffe:506:1000::2 activate
 exit-address-family

* Changes in ospfd

** Internal interface treatment is changed.  Now ospfd can handle
multiple IP address for an interface.

** Redistribution of loopback interface's address works fine.

* Changes in zebra-0.91

** --enable-oldrib configure option is removed.

** HAVE_IF_PSEUDO part is removed.  Same feature is now supported by
default.

* Changes in ripd

** When redistributed route is withdrawn, perform poisoned reverse.

* Changes in zebra

** When interface's address is removed, kernel route pointing out to
the address is removed.

** IPv6 RIB is now based upon new RIB code.

** zebra can handle same connected route to one interface.

** New command for interface address.  Currently this commands are
only supported on GNU/Linux with netlink interface.

"ip address A.B.C.D secondary"
"ip address A.B.C.D label LABEL"

* Changes in bgpd

** BGP flap dampening bugs are fixed.

** BGP non-blocking TCP connection bug is fixed.

** "show ip bgp summary" shows AS path and community entry number.

** New commands have been added.
  "show ip bgp cidr-only"
  "show ip bgp ipv4 (unicast|multicast) cidr-only"
  "show ip bgp A.B.C.D/M longer-prefixes"
  "show ip bgp ipv4 (unicast|multicast) A.B.C.D/M longer-prefixes"
  "show ipv6 bgp X:X::X:X/M longer-prefixes"
  "show ipv6 mbgp X:X::X:X/M longer-prefixes"

** IPv6 IBGP nexthop change is monitored.

** Unknown transitive attribute is passed with partial flag bit on.

* Changes in ospfd

** Fix bug of LSA MaxAge flood.

** Fix bug of NSSA codes.

* Changes in zebra-0.90

** From this beta release, --enable-unixdomain and --enable-newrib
becomes default.  So both options are removed from configure.in.  To
revert old behavior please specify below option.

--enable-tcp-zebra # TCP/IP socket is used for protocol daemon and zebra.
--enable-oldrib    # Turn on old RIB implementation.

Old RIB implementation will be removed in zebra-0.91.

** From this beta release --enable-multipath is supported.  This
option is only effective on GNU/Linux kernel with
CONFIG_IP_ADVANCED_ROUTER and CONFIG_IP_ROUTE_MULTIPATH is set.

--enable-multipath=ARG  # ARG must be digit.  When ARG is 0 unlimit multipath number.

** From this release we do not include guile files.

* Changes in lib

** newlist.[ch] is merged with linklist.[ch].

** Now Zebra works on MacOS X public beta.

** Access-list can have remark.  "access-list WORD remark LINE" define
remark for specified access-list.

** Key of key-chain is sorted by it's idetifier value.

** prefix-list rule is slightly changed.  The rule of "len <= ge-value
<= le-value" is changed to "len < ge-value <= le-value".

** According to above prefix-list rule change, add automatic
conversion function of an old rule. ex.) 10.0.0.0/8 ge 8 -> 10.0.0.0/8
le 32

** SMUX can handle SNMP trap.

** In our event library, event thread is executed before any other
thread like timer, read and write event.

** Robust method for writing configuration file and recover from
backing up config file.

** Display "end" at the end of configuration.

** Fix memory leak in vtysh_read().

** Fix memroy leak about access-list and prefix-list name.

* Changes in zebra

** UNIX domain socket server of zebra protocol is added.

** Fix PointoPoint interface network bug.  The destination network
should be installed into routing table instead of local network.

** Metric value is reflected to kernel routing table.

** "show ip route" display uptime of RIP,OSPF,BGP routes.

** New RIB implementation is added.

Now we have enhanced RIB (routing information base) implementation in
zebra.  New RIB has many new features and fixed some bugs which exist
in old RIB code.

*** Static route with distance value

    Static route can be specified with administrative distance.  The
  distance value 255 means it is not installed into the kernel.
  Default value of distance for static route is 1.
  
    ip route A.B.C.D/M A.B.C.D <1-255>
    ip route A.B.C.D/M IFNAME <1-255>
  
    If the least distance value's route's nexthop are unreachable,
  select the least distance value route which has reachable nexthop is
  selected.
  
    ip route 0.0.0.0/0 10.0.0.1
    ip route 0.0.0.0/0 11.0.0.1 2
  
    In this case, when 10.0.0.1 is unreachable and 11.0.0.1 is
  reachable.  The route with nexthop 11.0.0.1 will be installed into
  forwarding table.
  
    zebra> show ip route
    S>* 0.0.0.0/0 [2/0] via 11.0.0.1
    S   0.0.0.0/0 [1/0] via 10.0.0.1 inactive
  
    If the nexthop is unreachable "inactive" is displayed.  You can
  specify any string to IFNAME.  There is no need of the interface is
  there when you configure the route.
  
    ip route 1.1.1.1/32 ppp0
  
  When ppp0 comes up, the route is installed properly.

*** Multiple nexthop routes for one prefix

    Multiple nexthop routes can be specified for one prefix.  Even the
  kernel support only one nexthop for one prefix user can configure
  multiple nexthop.
  
    When you configure routes like below, prefix 10.0.0.1 has three
  nexthop.
  
    ip route 10.0.0.1/32 10.0.0.2
    ip route 10.0.0.1/32 10.0.0.3
    ip route 10.0.0.1/32 eth0
  
    If there is no route to 10.0.0.2 and 10.0.0.3.  And interface eth0
    is reachable, then the last route is installed into the kernel.
  
    zebra> show ip route
    S>  10.0.0.1/32 [1/0] via 10.0.0.2 inactive
                          via 10.0.0.3 inactive
      *                   is directly connected, eth0
  
    '*' means this nexthop is installed into the kernel. 

*** Multipath (more than one nexthop for one prefix) can be installed into the kernel.

    When the kernel support multipath, zebra can install multipath
  routes into the kernel.  Before doing that please make it sure that
  setting --enable-multipath=ARG to configure script.  ARG must be digit
  value.  When specify 0 to ARG, there is no limitation of the number
  of the multipath.  Currently only GNU/Linux with netlink interface is
  supported.
  
    ip route 10.0.0.1/32 10.0.0.2
    ip route 10.0.0.1/32 10.0.0.3
    ip route 10.0.0.1/32 eth0
  
    zebra> show ip route
    S>* 10.0.0.1/32 [1/0] via 10.0.0.2
      *                   via 10.0.0.3
                          is directly connected, eth0

*** Kernel message delete installed route.

    After zebra install static or dynamic route into the kernel.
  
    R>* 0.0.0.0/0 [120/3] via 10.0.0.1
  
    If you delete this route outside zebra, old zebra does not reinstall
  route again.  Now the route is re-processed and properly reinstall the
  static or dynamic route into the kernel.

** GNU/Linux netlink socket handling is improved to fix race condition
between kernel message and user command responce.

* Changes in bgpd

** Add show neighbor's routes command.

  "show ip bgp neighbors (A.B.C.D|X:X::X:X) routes"
  "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X) routes"
  "show ipv6 bgp neighbors (A.B.C.D|X:X::X:X) routes"
  "show ipv6 mbgp neighbors (A.B.C.D|X:X::X:X) routes"

** BGP passive peer support problem is fixed.

** Redistributed IGP nexthop is passed to BGP nexthop.

** On multiaccess media, if the nexthop is reachable nexthop is passed
as it is.

** Remove zebra-0.88 compatibility commands.

  "match ip prefix-list WORD"
  "match ipv6 prefix-list WORD"

  Instead of above please use below commands.

  "match ip address prefix-list WORD"
  "match ipv6 address prefix-list WORD"

** Fix bug of holdtimer is not reset when bgp cleared.

** "show ip bgp summary" display peer establish/drop count.

** Change "match ip next-hop" argument from IP address to access-list
name.

** When "bgp enforce-first-as" is enabled, check EBGP peer's update
has it's AS number in the first AS number in AS sequence.

** New route-map command "set community-delete COMMUNITY-LIST" is
added.  Community matched the CoMMUNITY-LIST is removed from the
community.

** BGP-MIB implementation is finished.

** When BGP connection comes from unconfigured IP address, close
socket immediately.

** Do not compare router ID when the routes comes from EBGP peer.
When originator ID is same, take shorter cluster-list route.  If
cluster-list is same take smaller IP address neighbor's route.

** Add "bgp bestpath as-path ignore" command.  When this option is
set, do not concider AS path length when route selection.

** Add "bgp bestpath compare-routerid".  When this option is set,
compare router ID when the routes comes from EBGP peer.

** Add "bgp deterministic-med" process.

** BGP flap dampening feature is added.

** When IBGP nexthop is changed, it is reflected to RIB.

** Change "neighbor route-refresh" command to "neighbor capability
route-refresh".

* Changes in ripd

** Change "match ip next-hop" argument from IP address to access-list
name.

** "no ip rip (send|receive)" command accept version number argument.

** Memory leak related classfull network generation is fixed.

** When a route is in garbage collection process (invalid with metric
16) and a router receives the same route with valid metric then route
was not installed into zebra rib, but only into ripd rib. Moreover ,
it will never get into zebra rib, because ripd wrongly assumes it's
already there.

* Change in ospfd

** Fix bug of refreshing default route.

** --enable-nssa turn on undergoing NSSA feature.

** Fix bug of Hello packet's option is not properly set when interface
comes up.

** Reduce unconditional logging.

** Add nexthop to OSPF path only when it is not there.

** When there is no DR on network (suppose you have only one router
with interface priority 0). It's router LSA does not contain the link
information about this network.

** When you change a priority of interface from/to 0
ISM_NeighborChange event should be scheduled in order to elect new
DR/BDR on the network.

** When we add some LSA into retransmit list we need to check whether
the present old LSA in retransmit list is not more recent than the new
one.

** In states Loading and Full the slave must resend its last Database
Description packet in response to duplicate Database Description
packets received from the master.  For this reason the slave must wait
RouterDeadInterval seconds before freeing the last Database
Description packet. Reception of a Database Description packet from
the master after this interval will generate a SeqNumberMismatch
neighbor event. RFC2328 Section 10.8

** Virtual link can not configured in stub area.

** Clear a ls_upd_queue queue of the interface when interface goes
down.

** "no router ospf" unregister redistribution requests from zebra.

** New command for virtual-link configuration is added.

  "area A.B.C.D virtual-link A.B.C.D"
  "area A.B.C.D virtual-link A.B.C.D hello-interval <1-65535> retransmit-interval <3-65535> transmit-delay <1-65535> dead-interval <1-65535>"
  "area A.B.C.D virtual-link A.B.C.D hello-interval <1-65535> retransmit-interval <3-65535> transmit-delay <1-65535> dead-interval <1-65535> authentication-key AUTH_KEY"
  "area A.B.C.D virtual-link A.B.C.D authentication-key AUTH_KEY"
  "area A.B.C.D virtual-link A.B.C.D hello-interval <1-65535> retransmit-interval <3-65535> transmit-delay <1-65535> dead-interval <1-65535> message-digest-key <1-255> md5 KEY"
  "area A.B.C.D virtual-link A.B.C.D message-digest-key <1-255> md5 KEY"

** Clear cryptographic sequence number when neighbor status is changed
to NSM down.

** Make Summary LSA's origination and refreshment as same as other
type of LSA.

** New OSPF pakcet read method. Now maximum packet length may be 65535
bytes (maximum IP packet length).

** Checking the age of the found LSA and if the LSA is MAXAGE we
should call refresh instead of originate.

** Install multipath information to zebra.

** Fix socket descriptor leak when system call failed.

* Changes in ospf6d

** Whole functionality has been rewritten as new code. new command
"show ipv6 ospf6 spf node", "show ipv6 ospf6 spf tree", "show ipv6
ospf6 spf table" has been added.

** Change to do not send garbage route whose nexthop is not linklocal
address.

** "redistribute ospf6" was generated in "router ospf6" in config
file. It is fixed.

** LSDB sync bug is fixed.

** Fix bug of using unavailable route.

* Changes in vtysh

** route-map and access-list configuration is merged into one
configuration.

** /usr/local/etc/Zebra.conf is integrated configuration file.  "write
memory" in vtysh will write whole configuration to this file.

** When -b option is specified to vtysh, vtysh read
/usr/local/etc/Zebra.conf file then pass the confuguration to proper
protocol daemon.  So make all protocol daemon's configuration file
empty then invoke all daemon.  After that vtysh -b will setup saved
configuration.

zebrastart.sh
=============
/usr/local/sbin/zebra -d
/usr/local/sbin/ripd -d
/usr/local/sbin/ospfd -d
/usr/local/sbin/bgpd -d
/usr/local/bin/vtysh -b

* Changes in zebra-0.89

* Changes in lib

** distribute-list can set all interface's access-list and prefix-list
configuration.

* Changes in ripd

** "show ip protocols" display proper distribute-list settings and
distance settings.

** When metric infinity route received withdraw the route from kernel
immediately it used to be wait garbage collection.

** key-chain can be used for simple password authentication.

** RIPv2 MIB getnext interface bug is fixed.

* Changes in vtysh

** --with-libpam enable PAM authentication for vtysh.

** Now vtysh read vtysh.conf.  This file should be
${SYSCONFDIR}/etc/vtysh.conf for security reason.  Usually it is
/usr/local/etc/vtysh.conf.

** "username WORD nopassword" command is added to vtysh.

* Chagees in ospfd

** NBMA interface support is added.

** OSPF area is sorted by area ID.

** New implementation of OSPF refreesh.

** OSPF-MIB read function is partly added.

* Changes in bgpd

** When the peering is done by ebgp-multihop, nexthop is looked up
like IBGP routes.

** "show ip mbgp" commands are changed to "show ip bgp ipv4
multicast".

** New terminal commands are added.
  "show ip bgp ipv4 (unicast|multicast) filter-list WORD"
  "show ip bgp ipv4 (unicast|multicast) community"
  "show ip bgp ipv4 (unicast|multicast) community-list WORD"
  "show ip bgp ipv4 (unicast|multicast) community-list WORD exact-match"

** MBGP soft-reconfiguration command is added.
  "clear ip bgp x.x.x.x ipv4 (unicast|multicast) in"
  "clear ip bgp x.x.x.x ipv4 (unicast|multicast) out"
  "clear ip bgp x.x.x.x ipv4 (unicast|multicast) soft"
  "clear ip bgp <1-65535> ipv4 (unicast|multicast) in"
  "clear ip bgp <1-65535> ipv4 (unicast|multicast) out"
  "clear ip bgp <1-65535> ipv4 (unicast|multicast) soft"
  "clear ip bgp * ipv4 (unicast|multicast) in"
  "clear ip bgp * ipv4 (unicast|multicast) out"
  "clear ip bgp * ipv4 (unicast|multicast) soft"

** MED related commands are added.
  "bgp deterministic-med"
  "bgp bestpath med confed"
  "bgp bestpath med missing-as-worst"

** "bgp default local-preference" command is added.

** BGP confederation peer's routes are passed to zebra like IBGP route.

** Community match command is added.
  "show ip bgp community <val>"
  "show ip bgp community <val> exact-match"

** EBGP multihop route treatment bug is fixed.  Now nexthop is
resolved by IGP routes.

** Some commands are added to show routes by filter-list and community
value.
  "show ip bgp ipv4 (unicast|multicast) filter-list WORD"
  "show ip bgp ipv4 (unicast|multicast) community"
  "show ip bgp ipv4 (unicast|multicast) community-list WORD"
  "show ip bgp ipv4 (unicast|multicast) community-list WORD exact-match"

* Changes in zebra

** zebra read interface's address information using getifaddrs() when
it is available.

** Reflect IPv6 interface's address change to protocol daemons.

* Changes in zebra-0.88

* Changes in lib

** "exact-match" option is added to "access-list" and "ipv6
access-list" command.  If this option is specified, the prefix and
prefix length is compared as exact match mode.

* Changes in zebra

** New Zebra message ZEBRA_REDISTRIBUTE_DEFAULT_ADD and
ZEBRA_REDISTRIBUTE_DEFAULT_DELTE are added.

** Default administrative distance value is changed.

            Old         New
------------------------------------------
system      10           0
kernel      20           0
connected   30           0
static      40           1
rip         50         120
ripng       50         120
ospf        60         110
ospf6       49         110
bgp         70         200(iBGP)  20(eBGP)
------------------------------------------

** Distance value can be passed from protocol daemon to zebra.

** "show ip route" shows [metric/distance] value pair.

** Zebra Protocol is changed to support multi-path route and distance
value.

* Changes in ospfd

** "default-information originate [always]" command is added.

** "default-metric <0-16777214>" command is added.

** "show ip ospf database" command is integrated.  LS-ID and AdvRouter can
   be specifed.  The commands are

   show ip ospf database TYPE LS-ID
   show ip ospf database TYPE LS-ID ADV-ROUTER
   show ip ospf database TYPE LS-ID self-originate
   show ip ospf database TYPE self-originate

** route-map support for `redistribute' command are added.
   Supported `match' statements are

   match interface
   match ip address
   match next-hop

   Supported `set' statements are

   set metric
   set metric-type

** Pass OSPF metric value to zebra daemon.

* Changes in ripd

** When specified route-map does not exist, it means all deny.

** "default-metric <1-16>" command is added.

** "offset-list ACCESS-LIST-NAME <0-16>" and "offset-list
ACCESS-LIST-NAME <0-16> IFNAME" commands are added.

** "redistribute ROUTE-TYPE metric <0-16>" command is added.

** "default-information originate" command is added.

** "ip split-horizon" and "no ip split-horizon" is added to interface
configuration.

** "no router rip" command is added.

** "ip rip authentication mode (md5|text)" is added to interface
configuration.

** "ip rip authentication key-chain KEY-CHAIN" is added to interface
configuration.

** Pass RIP metric value to zebra daemon.

** Distance manipulation functions are added.

* Changes in bgpd

** Fix bug of next hop treatment for MPLS-VPN route exchange.

** BGP peer MIB is updated.

** Aggregated route has origin IGP, atomic-aggregate and proper
aggregator attribute.

** Suppressed route now installed into BGP table.  It is only
suppressed from announcement.

** BGP router-id is properly set after "no router bgp ASN" and "router
bgp ASN".

** Add check for nexthop is accessible or not for IBGP routes.

** Add cehck for nexthop is on connected or not for EBGP routes.

** "dump bgp route" command is changed to "dump bgp route-mrt" for
generating MRT compatible dump output.

** Soft reconfiguration inbound and outbound is supported.

** Route refresh feature is supported.

* Changes in vtysh

** VTY shell is now included into the distribution.

* Changes in zebra-0.87

* Changes in lib

** "show startup-config" command is added.

** "show history" command is added.

** Memory statistics command is changed.  New command

   show memory all
   show memory lib
   show memory rip
   show memory ospf
   show memory bgp

are added.

** Filters can be removed only specify it's name.  New command

   no access-list NAME
   no ip community-list NAME
   no ip as-path access-list NAME
   no route-map NAME

are added.

** At any node, user can view/save user configuration.

   write terminal
   write file
   wirte memory

are added to every node in default.

** LCD completion is added.  For example both "ip" and "ipv6" command
are exist, "i" then press TAB will be expanded to "ip".

* Changes in bgpd

** "show ip bgp" family shows total number of prefixes.

** "no bgp default ipv4-unicast" command is added.

** Extended Communities support is added.

** "no neighbor PEER send-community extended" command is added.

** MPLS-VPN PE-RR support is added.

 New address family vpnv4 unicast is introduced.

  !
  address-family vpnv4 unicast
   neighobr PEER activate
   network A.B.C.D rd RD tag TAG
  exit-address-family
  !

 To make it route-reflector, please configure it under normal router
bgp ASN.

  !
  router bgp 7675
   no bgp default ipv4-unicast
   bgp router-id 10.0.0.100
   bgp cluster-id 10.0.0.100
   neighbor 10.0.0.1 remote-as 65535
   neighbor 10.0.0.1 route-reflector-client
   neighbor 10.0.0.2 remote-as 65535
   neighbor 10.0.0.2 route-reflector-client
   neighbor 10.0.0.3 remote-as 65535
   neighbor 10.0.0.3 route-reflector-client
  !
  address-family vpnv4 unicast
   neighbor 10.0.0.1 activate
   neighbor 10.0.0.2 activate
   neighbor 10.0.0.3 activate
  exit-address-family
  !

* Changes in ospfd

** Many many bugs are fixed.

* Changes in ripd

** Better interface up/down event handle.

* Changes in zebra

** Better interface up/down event handle.

* Changes in zebra-0.86

* Changes in lib

** Fix bug of exec-timeout command which may cause crush.

** Multiple same policy for "access-list", "ip prefix-list, "as-path
access-list", "ip community-list" is not duplicated.

** It used to be "ip prefix-list A.B.C.D/M" match routes which mask >=
M.  Now default behavior is exact match so it only match routes which
mask == M.

* Changes in bgpd

** "match ip address prefix-list" is added to route-map.

** A route without local preference is evaluated as 100 local preference.

** Select smaller router-id route when other values are same.

** Compare MED only both routes comes from same neighboring AS.

** "bgp always-compare-med" command is added.

** Now MED value is passed to IBGP peer.

** When neighbor's filter is configured with non-existent access-list,
as-path access-list, ip prefix-list, route-map.  The behavior is
changed from all permit to all deny.

* Changes in ospfd

** Fix bug of external route tag byte order.

** OSPF Neighbor deletion bug which cause crush is fixed.

** Some route calculation bug are fixed.

** Add sanity check with router	routing table.

** Fix bug of memory leak about linklist.

** Fix bug of 1-WayReceived in NSM.

** Take care of BIGENDIAN architecture.

** Fix bug of NSM state flapping between ExStart and Exchange.

** Fix bug of Network-LSA originated in stub network.

** Fix bug of MS flag unset.

** Add to schedule router_lsa origination when the interface cost
changes.

** Increment LS age by configured interface transmit_delay.

** distribute-list is reimplemented.

** Fix bug of refresh never occurs.

** Fix bug of summary-LSAs reorigination.  Correctly copy
OSPF_LSA_APPROVED flag to new LSA. when summary-LSA is reoriginatd.

** Fix bug of re-origination when a neighbor disappears.

** Fix bug of segmentation fault with DD retransmission.

** Fix network-LSA re-origination problem.

** Fix problem of remaining withdrawn routes on zebra.

* Changes in ripd

** Do not leave from multicast group when interface goes down bug is
fixed.

* Changes in zebra

** Remove client structure when client dies.

** Take care static route when interface goes up/down.

* Changes in zebra-0.85

* Changes in bgpd

** "transparent-nexthop" and "transparenet-as" commands are added.

** Route reflector's originator-id bug is fixed.

* Changes in ospfd

** Fix bug of OSPF LSA memory leak.

** Fix bug of OSPF external route memory leak.

** AS-external-LSA origination bug was fixed.

** LS request treatment is completely rewritten.  Now performance is
drastically improved.

* Changes in ripd

** RIPv1 update is done by class-full manner.

* Changes in zebra-0.84b

* Changes in lib

** Fix bug of inet_pton return value handling

* Changes in bgpd

** Fix bug of BGP-4+ link-local address nexthop check for IBGP peer.

** Don't allocate whole buffer for displaying "show ip bgp".  Now it
consume only one screen size memory.

* Changes in ripd

** Fix debug output string.

** Add RIP peer handling.  RIP peer are shown by "show ip protocols".

* Changes in zebra-0.84a

* Changes in bgpd

** Fix serious bug of BGP-4+ peering under IPv6 link-local address.
   Due to the bug BGP-4+ peering may not be established.

* Changes in zebra-0.84

* Changes in lib

** IPv6 address and prefix parser is added to VTY by Toshiaki Takada
   <takada@zebra.org>.  DEFUN string is "X:X::X:X" for IPv6 address,
   "X:X::X:X/M" for IPv6 prefix.  You can use it like this.

   DEFUN (func, cmd, "neighbor (A.B.C.D|X:X::X:X) remote-as <1-65535>")

** VTY configuration is locked during configuration.  This is for
   avoiding unconditional crush from two terminals modify the
   configuration at the same time.  "who" command shows which termnal
   lock the configuration.  VTY which has '*' character at the head of
   line is locking the configuration.

** Old logging functions are removed.  Functions like
   log_open,log_close,openlog are deleted.  Instead of that please use
   zlog_* functions.  zvlog_* used in ospf6d are deleted also.

** "terminal monitor" command is added.  "no terminal monitor" is for
   disabling.  This command simply display logging information to the
   VTY.

** dropline.[ch] files are deleted.

* Changes in bgpd

** BGP neighbor configuration are sorted by it's IP address.

** BGP peer configuration and actual peer is separated.  This is
   preparation for Route Server support.

** "no neighbor PEER" command is added. You can delete neighbor
   without specifying AS number.

** "no neighbor ebgp-multihop" command is added.

** "no neighbor port PORT" command is added.

** To conform RFC1771, "neighbor PEER send-community" is default
   behavior.  If you want to disable sending community attribute,
   please specify "no neighbor PEER send-community" to the peer.

** "neighbor maximum-prefix NUMBER" command is added.

** Multi-protocol extention NLRI is proceeded only when the peer is
   configured proper Address Family and Subsequent Address Family.  If
   not, those NLRI are simply ignored.

** Aggregate-address support is improved.  Currently below commands
   works.

  "aggregate-address"
  "aggregate-address summary-only"
  "no aggregate-address"
  "no aggregate-address summary-only"

  "ipv6 bgp aggregate-address"
  "ipv6 bgp aggregate-address summary-only"
  "no ipv6 bgp aggregate-address"
  "no ipv6 bgp aggregate-address summary-only"

** redistribute route-map bug is fixed.

** MBGP support becomes default.  "configure" option --enable-mbgp is
   removed.

** New command "neighbor PEER timers connect <1-65535>" is added.

** New command "neighbor PEER override-capability" is added.

** New command "show ip bgp neighbor A.B.C.D advertised-route" is added.

** New command "show ip bgp neighbor A.B.C.D routes" is added.  To use
   this command, you have to configure neighbor with
   "neighbor A.B.C.D soft-reconfiguration inbound" beforehand.
   

* Changes in zebra-0.83

* bgpd

** Serious bug fix about fetching global and link-local address at the
same time.  Due to this bug, corrupted IPv6 prefix is generated.  If
you uses bgpd for BGP-4+ please update to this version.  The bug is
introduced in zebra-0.82.

** When bgpd send Notify message, don't use thread manager.  It is now
send to neighbor immediately.

* Changes in zebra-0.82

** Solaris 2.6 support is added by Michael Handler
<handler@sub-rosa.com>.

** MBGP support is added by Robert Olsson <Robert.Olsson@data.slu.se>.
Please specify --enable-mbgp to configure script.  This option will be
removed in the future and MBGP support will be default.

* Changes in zebra

** When interface goes down, withdraw connected routes from routing
table.  When interface goes up, restore the routes to the routing
table.

** `show interface' show interface's statistics on Linux and BSD with
routing socket.

** Now zebra can get MTU value on BSDI/OS.

* Changes in bgpd

** Add capability option support based upon
draft-ietf-idr-bgp4-cap-neg-04.txt.

** Add `show ipv6 bgp prefix-list' command.

** Check self AS appeared in received routes.

** redistribute route-map support is added.

** BGP packet dump feature compatible with MRT.

* Changes in ripd

** Fix bug of `timers basic' command's argument format.

* Changes in ripngd

** Calculate max RTE using interface's MTU value.

* Changes in ospfd

** Some correction to LSU processing.

** Add check for lsa->refresh_list.

* Changes in ospf6d

** Many debug feature is added.

* Changes in zebra-0.81

** SNMP support is disabled in default.--enable-snmp option is added
to configure script.

* Changes in bgpd

** Fix FSM bug which introduced in zebra-0.80.

* Changes in zebra-0.80

* access-list

  New access-list name space `ipv6 access-list' is added.  At the same
  time, `access-list' statemant only accepts IPv4 prefix.  Please be
  careful if you use IPv6 filtering.  You will need to change your
  configuration.  For IPv6 filtering please use `ipv6 access-list'.
  
  As of zebra-0.7x, user can use `access-list' for both IPv4 and IPv6
  filtering.
  
  ! zebra-0.7x
  access-list DML-net permit 203.181.89.0/24
  access-list DML-net permit 3ffe:506::0/32
  access-list DML-net deny any
  !
  
  Above configuration is not valid for zebra-08x.  Please add `ipv6'
  before 'access-list' when you configure IPv6 filtering.
  
  ! zebra-0.8x
  access-list DML-net permit 203.181.89.0/24
  access-list DML-net deny any
  !
  ipv6 access-list DML-net permit 3ffe:506::0/32
  ipv6 access-list DML-net deny any
  !

* prefix-list

  And also new prefix-list name space `ipv6 prefix-list' is added.  It
  is the same as the change of `access-list'. `ip prefix-list' now only
  accept IPv4 prefix.  It was source of confusion that `ip prefix-list'
  can be used both IPv4 and IPv6 filtering.  Now name space is separated
  to clear the meaning of the filter.
  
  If you use `ip prefix-list' for IPv6 filtering, please change the
  stetement.
  
  ! zebra-0.7x
  ip prefix-list 6bone-filter seq 5 permit 3ffe::/17 le 24 ge 24
  ip prefix-list 6bone-filter seq 10 permit 3ffe:8000::/17 le 28 ge 28
  ip prefix-list 6bone-filter seq 12 deny 3ffe::/16
  ip prefix-list 6bone-filter seq 15 permit 2000::/3 le 16 ge 16
  ip prefix-list 6bone-filter seq 20 permit 2001::/16 le 35 ge 35
  ip prefix-list 6bone-filter seq 30 deny any
  !
  
  Now user can explicitly configure it as IPv6 prefix-list.
  
  ! zebra-0.8x
  ipv6 prefix-list 6bone-filter seq 5 permit 3ffe::/17 le 24 ge 24
  ipv6 prefix-list 6bone-filter seq 10 permit 3ffe:8000::/17 le 28 ge 28
  ipv6 prefix-list 6bone-filter seq 12 deny 3ffe::/16
  ipv6 prefix-list 6bone-filter seq 15 permit 2000::/3 le 16 ge 16
  ipv6 prefix-list 6bone-filter seq 20 permit 2001::/16 le 35 ge 35
  ipv6 prefix-list 6bone-filter seq 30 deny any
  !

* RIP configuration

  If you want to filter only default route (0.0.0.0/0) and permit other
  routes, it was hard to do that.  Now `ip prefix-list' can be used for
  RIP route filtering.
  
  New statement:
  
  `distribute-list prefix PLIST_NAME (in|out) IFNAME'
  
  is added to ripd.  So you can configure on eth0 interface accept all
  routes other than default routes.
  
  !
  router rip
   distribute-list prefix filter-default in eth0
  !
  ip prefix-list filter-default deny 0.0.0.0/0 le 0
  ip prefix-list filter-default permit any
  !

* RIPng configuration

  Same change is done for ripngd.  You can use `ipv6 prefix-list' for
  filtering.
  
  !
  router ripng
   distribute-list prefix filter-default in eth0
  !
  ipv6 prefix-list filter-default deny ::/0 le 0
  ipv6 prefix-list filter-default permit any
  !

* BGP configuration

  So far, Multiprotocol Extensions for BGP-4 (RFC2283) configuration is
  done with traditional IPv4 peering statement like blow.
  
  !
  router bgp 7675
   neighbor 3ffe:506::1 remote-as 2500
   neighbor 3ffe:506::1 prefix-list 6bone-filter out
  !
  
  For separating configuration IPv4 and IPv6, and for retaining Cisco
  configuration compatibility, now IPv6 configuration is done by IPv6
  specific statement.  IPv6 BGP configuration is done by statement which
  start from `ipv6 bgp'.
  
  !
  router bgp 7675
  !
  ipv6 bgp neighbor 3ffe:506::1 remote-as 2500
  ipv6 bgp neighbor 3ffe:506::1 prefix-list 6bone-filter out
  !
  
  At the same time some IPv6 specific commands are deleted from IPv4
  configuration.
  
  o redistribute ripng
  o redistribute ospf6
  o neighbor PEER version BGP_VERSION
  o neighbor PEER interface IFNAME
  
  Those commands are only accepted as like below.
  
  o ipv6 bgp redistribute ripng
  o ipv6 bgp redistribute ospf6
  o ipv6 bgp neighbor PEER version BGP_VERSION
  o ipv6 bgp neighbor PEER interface IFNAME
  
  And below new commands are added.
  
  o ipv6 bgp network IPV6_PREFIX
  o ipv6 bgp redistribute static
  o ipv6 bgp redistribute connected
  o ipv6 bgp neighbor PEER remote-as <1-65535> [passive]
  o ipv6 bgp neighbor PEER ebgp-multihop [TTL]
  o ipv6 bgp neighbor PEER description DESCRIPTION
  o ipv6 bgp neighbor PEER shutdown
  o ipv6 bgp neighbor PEER route-reflector-client
  o ipv6 bgp neighbor PEER update-source IFNAME
  o ipv6 bgp neighbor PEER next-hop-self
  o ipv6 bgp neighbor PEER timers holdtime <0-65535>
  o ipv6 bgp neighbor PEER timers keepalive <0-65535>
  o ipv6 bgp neighbor PEER send-community
  o ipv6 bgp neighbor PEER weight <0-65535>
  o ipv6 bgp neighbor PEER default-originate
  o ipv6 bgp neighbor PEER filter-list FILTER_LIST_NAME (in|out)
  o ipv6 bgp neighbor PEER prefix-list PREFIX_LIST_NAME (in|out)
  o ipv6 bgp neighbor PEER distribute-list AS_LIST_NAME (in|out)
  o ipv6 bgp neighbor PEER route-map ROUTE_MAP_NAME (in|out)
  
  And some utility commands are introduced.
  
  o clear ipv6 bgp [PEER]
  o show ipv6 bgp neighbors [PEER]
  o show ipv6 bgp summary
  
  I hope these changes are easy to understand for current Zebra users...

* To restrict connection to VTY interface.

  It used to be both IPv4 and IPv6 filter can be specified with one
  access-list.  Then the access-list can be appried to VTY interface
  with `access-class' stetement in `line vty' node.  Below is example in
  zebra-0.7x.
  
  !
  access-list local-only permit 127.0.0.1/32
  access-list local-only permit ::1/128
  access-list local-only deny any
  !
  line vty
   access-class local-only
  !
  
  Now IPv4 and IPv6 filter have each name space.  It is not possible to
  specify IPv4 and IPv6 filter with one access-list.  For setting IPv6
  access-list in `line vty', `ipv6 access-class' statement is
  introduced.  Let me show the configuration in zebra-0.8x.
  
  !
  access-list local-only permit 127.0.0.1/32
  access-list local-only deny any
  !
  ipv6 access-list local-only permit ::1/128
  ipv6 access-list local-only dny any
  !
  line vty
   access-class local-only
   ipv6 access-class local-only
  !

* route-map

  New IPv6 related route-map match commands are added.
  
  o match ipv6 address
  o match ipv6 next-hop
  
  Please change your configuration if you use IP match statement for
  IPv6 route.
  
  zebra-0.7x config
  =================
  !
  access-list all permit any
  !
  route-map set-nexthop permit 10
   match ip address all
   set ipv6 next-hop global 3ffe:506::1
   set ipv6 next-hop local fe80::cbb5:591a
  !
  
  zebra-0.8x config
  =================
  !
  ipv6 access-list all permit any
  !
  route-map set-nexthop permit 10
   match ipv6 address all
   set ipv6 next-hop global 3ffe:506::1
   set ipv6 next-hop local fe80::cbb5:591a
  !

* zebra connection

  Protocol daemon such as ripd, bgpd, ospfd will reconnect zebra daemon
  when the connection fail.  Those daemons try to connect zebra every 10
  seconds first three trial, then the interval changed to 60 seconds.
  After all, if ten connections are fail, protocol daemon give up the
  connection to the zebra daemon.

* SNMP support (is not yet finished)

  Zebra uses SMUX protocol (RFC1227) for making communication with SNMP
  agent.  Currently lib/smux.c can be compiled only with ucd-snmp-4.0.1
  and http://ucd-snmp.ucdavis.edu/patches/012.patch.  It can not be
  compiled with ucd-snmp-3.6.2.
  
  After applying the patch to ucd-snmp-4.0.1, please configure it with
  SMUX module.
  
  % configure --with-mib-modules=smux
  
  After compile & install ucd-snmp-4.0.1, you will need to configure
  smuxpeer.  I'm now using below configuration.
  
  /usr/local/share/snmp/snmpd.conf
  ================================
  smuxpeer 1.3.6.1.6.3.1 test
  
  Above 1.3.6.1.6.3.1 and test is temporary configuration which is hard
  coded in lib/smux.c. Yes, I know it is bad, I'll change it ASAP.

* HUP signal treatment

  From zebra-0.80, ripd will reload it's configuration file when ripd
  receives HUP signal.  Other daemon such as bgpd, ospfd will support
  HUP signal treatment soon.

* Changes in zebra-0.79

* Changes in zebra

** Broadcast address setting on Linux box bug is fixed.

** Protocol daemon can install connected IPv6 route into the kernel.

** Now zebra can handle blackhole route.

* Changes in ripd

** Add route-map feature for RIP protocol.

** In case of RIP version 2 routing table entry has IPv4 address and
netmask pair which host part bit is on, ignore the entry.

* Changes in ripngd

** Change CMSG_DATA cast from (u_char *) to (int *).  (u_char *) does
not work for NetBSD-currnet on SparcStation 10.

* Changes in ospfd

** MaxAge LSA treatment is added.

** ABR/ASBR functionality is added.

** Virtual Link funtionality is added.

** ABR behaviors IBM/Cisco/Shortcut is added.

* Changes in ospf6d

** Enclosed KAME specific part with #ifdef #endif

* Changes in zebra-0.78

* Changes in lib

** SNMP support is started.

** Now Zebra can work on BSD/OS 4.X.

** Now Zebra can compiled on vanilla OpenBSD 2.5 but not yet working correcltly.

* Changes in zebra

** Interface index detection using ioctl() bug is fixed.

** Interface information protocol is changed.  Now interface
addition/deletion and interface's address addition/deletion is
separated.

* Changes in bgpd

** BGP hold timer bug is fixed.

** BGP keepavlie timer becomes configurable.

* Changes in ripd

** When making reply to rip's REQUEST message, fill in
RIP_METRIC_INFINITY with network byte order using htonl ().

** Pass host byte order address to IN_CLASSC and IN_CLASSB macro.

* Changes in ospfd

** LSA flooding works.

** Fix bug of DD processing.

** Fix bug of originating router-LSA bug is fixed.

** LSA structure is changed to support LSA aging.

* Changes in ospf6d

** `ip6' statement in configuration is changed to `ipv6'.

* Changes in zebra-0.77

* Changes in lib

** SIGUSR1 reopen logging file.

** route-map is extended to support multi-protocol routing
information.

** When compiling under GNU libc 2.1 environment don't use inet6-apps.

* Changes in zebra

** Basic IPv6 router advertisement codes added.  It is not yet usable.

** Fix IPv6 route addition/deletion bug is fixed.

** `show ip route A.B.C.D' works

* Changes in bgpd

** When invalid unfeasible routes length comes, bgpd send notify then
continue to process the packet.  Now bgpd stop parsing invalid packet
then return to main loop.

** BGP-4+ withdrawn routes parse bug is fixed.

** When BGP-4+ information passed to non shared network's peer, trim
link-local next-hop information.

** `no redistribute ROUTE_TYPE' withdraw installed routes from BGP
routing information.

** `show ipv6 route IPV6ADDR' command added.

** BGP start timer has jitter.

** Holdtimer configuration bug is fixed.  Now configuration does not
show unconfigured hold time value.

* Changes in ripngd

** Now update timer (default 30 seconds) has +/- 50% jitter value.

** Add timers basic command.

** `network' configuration is dynamically reflected.

** `timers basic <update> <timeout> <garbage>' added.

* Changes in ripd

** Reconstruct almost codes.

** `network' configuration is dynamically reflected.

** RIP timers now conforms to RFC2453.  So user can configure update,
timeout, garbage timer.

** `timers basic <update> <timeout> <garbage>' works.

* Changes in ospfd

** Bug of originating network LSA is fixed.

** `no router ospf' core dump bug is fixed.

* Changes in ospf6d

** Redistribute route works.

* Changes in zebra-0.76

* Changes in lib

** configure.in Linux IPv6 detection problem is fixed.

** Include SERVICES file to the distribution

** Update zebra.texi to zebra-0.76.

* Changes in zebra-0.75

* Changes in lib

** `termnal length 0' bug is fixed.

* Changes in zebra

** When zebra starts up, sweep all zebra installed routes.  If -k or
--keep_kernel option is specified to zebra dameon.  This function is
not performed.

* Changes in ripngd

** Aggreagte address command supported.  In router ripngd,
`aggregate-address IPV6PREFIX' works.

* Changes in bgpd

** Input route-map's bug which cause segmentation violation is fixed.

** route-map method improved.

** BGP-4+ nexthop detection improved.

** BGP-4+ route re-selection bug is fixed.

** BGP-4+ iBGP route's nexthop calculation works.

** After connection Established `show ip bgp neighbor' display BGP TCP
connection's source and destination address.

** In case of BGP-4+ `show ip bgp neighbor' display BGP-4+ global and
local nexthop which used for originated route.  This address will be
used when `next-hop-self'.

* Changes in ospfd

** Fix bug of DR election.

** Set IP precedence field with IPTOS_PREC_INTERNET_CONTROL.

** Schedule NeighborChange event if NSM status change.

** Never include a neighbor in Hello packet, when the neighbor goes
down.

* Changes in zebra-0.74

* Changes in lib

** Now `terminal length 0' means no line output control.

** `line LINES' command deleted.  Instead of this please use `terminal
length <0-512>'.

** `terminal length <0-512>' is each vty specific configuration so it
can not be configured in the configuration file.  If you want to
configure system wide line control, please use `service
terminal-length <0-512>'.  This configuration affects to the all vty
interface.

* Changes in zebra

** Installation of IPv6 route bug is fixed.

* Changes in bgpd

** Very serious bug of bgp_stop () is fixed. When multiple route to
the same destination exist, bgpd try to announce the information to
stopped peer.  Then add orphan write thread is added.  This cause
many strange behavior of bgpd.

** Router-id parsing bug is fixed.

** With BGP-4+ nexthop installation was done with global address but
it should be link-local address.  This bug is fixed now.

** When incoming route-map prepend AS, old AS path remained.  Now bgpd
free old AS path.

** `neighbor PEER weight <0-65535>' command added.

* Changes in ripngd

** Almost codes are rewritten to conform to RFC2080.

* Changes in ospfd

** SPF calculation timer is added.  Currently it is set to 30 seconds.

** SPF calculation works now.

** OSPF routing table codes are added.

** OSPF's internal routes installed into the kernel routing table.

** Now `ospfd' works as non-area, non-external route support OSPF
router.

** Call of log_rotate() is removed.

* Changes in ospf6d

** LSA data structure is changed.

** Call of log_rotate() is removed.

* Changes in zebra-0.73

* Changes in lib

** `config terminal' is changed to `configure terminal'.

** `terminal length <0-512>' command is added.

** Variable length argument was specified by `...'.  Now all strings
started with character `.' is variable length argument.

* Changes in zebra

** Internal route (such as iBGP, internal OSPF route) handling works
correctly.

** In interface node, `ipv6 address' and `no ipv6 address' works.

** Interface's address remain after `no ip address' bug is fixed.

** Host route such as IPv4 with /32 mask and IPv6 with /128 mask
didn't set RTF_GATEWAY even it has gateway.  This bug if fixed now.

* Changes in bgpd

** `match as-path' argument is used to be specify AS PATH value itself
directly (e.g. ^$).  But it is changed to specify `ip as-apth
access-list' name.

** iBGP route handle works without getting error from the kernel.

** `set aggregator as AS A.B.C.D' command is added to route-map.

** `set atomic-aggregate' command is added to bgpd's routemap.

** Announcement of atomic aggregate attribute and aggregator attribute
works.

** `update-source' bug is fixed.

** When a route learned from eBGP is announced to iBGP, local
preference was set to zero.  But now it set to
DEFAULT_LOCAL_PREF(100).

* Changes in ripd

** RIPv1 route filter bug is fixed.

** Some memory leak is fixed.

* Changes in ospfd

** Fix bug of DR Election.

** Fix bug of adjacency forming.

* Changes in ospf6d

** Clean up logging message.

** Reflect routing information to zebra daemon.

* Changes in zebra-0.72

* Changes in lib

** When getsockname return IPv4 mapped IPv6 address.  Convert it to
IPv4 address.

* Changes in bgpd

** Change route-map's next-hop related settings.

set ip nexthop          -> set ip next-hop
set ipv6 nexthop global -> set ipv6 next-hop global
set ipv6 nexthop local  -> set ipv6 next-hop local

** Add `next-hop-self' command.

* Changes in ospfd

** Fix bug of multiple `network area' directive crashes.

* Changes in zebra-0.71

* Changes in lib

** `log syslog' command is added.

** Use getaddrinfo function to bind IPv4/IPv6 server socket.

** `no banner motd' will suppress motd output when user connect to VTY.

** Bind `quit' command to major nodes.

* Changes in zebra

** Point-to-point link address handling bug is fixed.

* Changes in bgpd

** AS path validity check is added.  If malformed AS path is received
NOTIFY Malformed AS path is send to the peer.

** Use getaddrinfo function to bind IPv4/IPv6 server socket.

* Changes in ripd

** Connected network announcement bug is fixed.

** `broadcast' command is deleted.

** `network' command is added.

** `neighbor' command is added.

** `redistribute' command is added.

** `timers basic' command is added.

** `route' command is added.

* Changes in ripngd

** Fix metric calculation bug.

* Changes in ospfd

** Check sum bug is fixed.

* Chanegs in ospf6d

** Routing table code is rewritten.

* Changes in zebra-0.70

* Changes in zebra

** Critical routing information base calculation bug check is fixed.

** zebra ipv4 message is extended to support external/internal route
flavor.

** Now if internal route doesn't has direct connected nexthop, then
nexthop is calculated by looking up IGP routing table.

* Changes in bgpd

** `neighbor PEER update-source IFNAME' command added as ALIAS to
`neighbor PEER interface IFNAME'.

* Changes in ospfd

** DD null pointer bug is fixed.

* Changes in zebra-0.69

* Changes in zebra

** zebra redistirbution supports dynamic notification of the route
change.  If you add static route while running zebra, it will be
reflected to other protocol daemon which set `redistribute static'.

** If static route installation is failed due to the error.  The
static route is not added to the configuration and zebra routing
table.

** zebra sets forwarding flag to on when it starts up.

** `no ip forwarding' turn off IPv4 forwarding.

** `no ipv6 forwarding' turn off IPv6 forwarding.

** Change `show ipforward' command to `show ip forwarding'.

** Change `show ipv6forward' command to `show ipv6 forwarding'.

** `ip route A.B.C.D/M INTERFACE' works.  So you can set `ip route
10.0.0.0/8 eth0'.

* Changes in bgpd

** `neighbor PEER send-community' command is added.  If the option is
set, bgpd will send community attribute to the peer.

** When a BGP route has no-export community attribute and
send-community is set to the peer, the route is not announced to the
peer.

* Changes in ripngd

** When ripngd terminates, delete all installed route.

** `redistribute static', `redistribute connected' works.

** Change `debug ripng event' to `debug ripng events'.

** Change `show debug ripng' to `show debugging ripng'.

** Bug of static route deletion is fixed.

* Changes in ospfd

** LS request and LS update can be send and received.

* Changes in zebra-0.68

* Changes in lib

** DEFUN() is extended to support (a|b|c) statement.

** Input buffer overflow bug is fixed.

* Changes in bgpd

** `ip community-list' is added.

** set community and match community is added to route-map statement.

** aggregate-address A.B.C.D/M partly works.  Now it works only
summary-only mode.

* Changes in zebra

** IPv6 network address delete bug is fixed.

* Changes in ospfd

** DR election bug fixed.

** Now Database Description can be send or received.

** Neighbor State Machine goes to Full state.

* Changes in ospf6d

** router zebra related bug is fixed.

* Changes in zebra-0.67

* Changes in lib

** `service password-encryption' is added for encrypted password.

* Changes in bgpd

** `set as-path prepend ASPATH' is added to route-map command.

** `set weight WEIGHT' is added to route-map command.

** `no set ipv6 nexthop global' and `no set ipv6 nexthop local'
command is added to route-map.

** `neighbor IP_ADDR version BGP_VERSION' command's BGP_VERSION
argument changed.

Old               New
=====================
bgp4              4
bgp4+             4+
bgp4+-draft-00    4-
=====================

If you want to peer with old draft version of BGP-4+, please configure
like below:

router bgp ASN
 neighbor PEER version 4-

** Some AS path isn't correctly compared during route selection.  Now
it is fixed.

* Changes in ospfd

** `router zebra' is default behavior.

* Changes in ospf6d

** `router zebra' is default behavior.

* Changes in zebra-0.66

* Changes in zebra

** When other daemon such as gated install routes into the kernel then
zebra blocks.  This is only occur with netlink socket.  Now socket is
set as NONBLOCKING and problem is fixed.  Reported and fixed by
Patrick Koppen <koppen@rhrk.uni-kl.de>

* Changes in bgpd

** Now `router zebra' is not needed to insert BGP routes into the
kernel.  It is default behavior.  If you don't want to install the BGP
routes to the kernel, please configure like below:

!
router zebra
 no redistribute bgp
!

** redistribute connected works.

** redistribute static now filter local loopback routes and link local
network.

* Changes in ripd

** Some network check is added.  Patch is done by Carlos Alberto
Barcenilla <barce@frlp.utn.edu.ar>

* Changes in ripngd

** Sometimes ripngd install wrong nexthop into the kernel.  This bug
is fixed now.

** Now `router zebra' is not needed to insert RIPng routes into the
kernel.  It is default behavior. If you don't want to install the BGP
routes to the kernel, please configure like below:

!
router zebra
 no redistribute ripng
!

* Changes in zebra-0.65

* Changes in lib

** `C-c' changes current node to ENABLE_NODE.  Previously it doesn't.

** In ENABLE_NODE, `exit' command close vty connection.

** `service advanced-vty' enable advanced vty function.  If this
service is specified one can directly connect to ENABLE_NODE when
enable password is not set.

** `lines LINES' command is added by Stephen R. van den Berg
<srb@cuci.nl>.

* Changes in zebra

** Basic Linux policy based routing table support is added by Stephen
R. van den Berg <srb@cuci.nl>.

* Changes in bgpd

** route-map command is improved:
  `match ip next-hop': New command.
  `match metric': New command.
  `set metric': Doc fixed.
  `set local-preference': DEFUN added.

* Changes in ripd

** Check of announced network is added.  Now multicast address is
filtered.  Reported by Carlos Alberto Barcenilla
<barce@frlp.utn.edu.ar>

** Check of network 127 is added.  Reported by Carlos Alberto
Barcenilla <barce@frlp.utn.edu.ar>

* Changes in ripngd

** Aging route bug is fixed.

** `router zebra' semantics changed.  ripngd automatically connect to
zebra.

* Changes in ospfd

** `no router ospf' works.

* Changes in ospf6d

** Bug fix about network vertex.

* Changes in zebra-0.64.1.

This is bug fix release.

* Changes in lib

** Add check of sin6_scope_id in struct sockaddr_in6.  For compilation
on implementation which doesn't have sin6_scope_id.  Reported by Wim
Biemolt <Wim.Biemolt@ipv6.surfnet.nl>.

* Changes in zebra

** Fix bug of display BGP routes as "O" instead of "B".  Reported by
"William F. Maton" <wmaton@enterprise.ic.gc.ca> and Dave Hartzell
<hartzell@greatplains.net>.

* Changes in bgpd

** `no network IPV6_NETWORK' statement and `no neighbor IP_ADDR timers
holdtime [TIMER]' statement doesn't work. Reported by Georg Hitsch
<georg@atnet.at>.  Now both statement work.

* Changes in ospfd

** Last interface is not updated by ospf_if_update().  Reported by
Dave Hartzell <hartzell@greatplains.net>.

* Changes in ospf6d

** Byte order of ifid is changed.  Due to this change, this code will
not work with previous version, sorry.

** Fix `show ip route' route type mismatch.

** Fix bug of no network IPV6_NETWORK.

** Important bug fix about intra-area-prefix-lsa.

* Changes in zebra-0.64.

* Changes in lib

** prefix-list based filtering routine is added.  Currently used in
bgpd but it will be in other daemons.

* Changes in bgpd

** `no router bgp' works.  But network statement is not cleared.  This
should be fixed in next beta.

** Route reflector related statement is added.

  router bgp ASN
    bgp cluster-id a.b.c.d
    neighbor a.b.c.d route-reflector-client

  is added.

** Prefix list based filtering is added.

  router bgp ASN
    neighbor a.b.c.d prefix-list PREFIX_LIST_NAME

** Prefix list based routing display works.

  show ip bgp prefix-list PREFIX_LIST_NAME

* Changes in ripd

** Fix route metric check bug.  Reported from Mr. Carlos Alberto
Barcenilla.

* Changes in ospf6d

** There are many changes.  If you have interested in ospf6d please
visit ospf6d/README file.

* Changes in zebra-0.63 first beta package.

* Changes in lib

** `copy running-config stgartup-config' command is added.

** prefix length check bug is fixed.  Thanks Marlos Barcenilla
<barce@frip.utn.edu.ar>.

* Changes in ospfd

** DR and BDR election works.

** OSPF Hello simple authentication works.

* Changes in ospf6d

** Now ospf6d can be compiled on both Linux and *BSD system.

* Changes in zebra-19990420 snapshot

** `make dist' at top directory works now.

* Changes in lib

** VTY has now access-class to restrict remote connection.
Implemented by Alex Bligh <amb@gxn.net>.

!
line vty
  access-class ACCESS-LIST-NAME
!

** `show version' command added.  Implemented by Carlos Alberto
Barcenilla <barce@frlp.utn.edu.ar>

* Changes in zebra

** `ip address' command on *BSD bug is fixed.

** `no ip address' works now for IPv4 address.

** Now `write terminal' display `ip address' configuration.

* Changes in bgpd

** Redistribute static works now.  Please run both zebra and bgpd.
bgpd.conf should be like this:

!
router zebra
!
router bgp ASN
  redisitribute static
!

* Changes in guile

** configure --enable-guile turns on zebra-guile build.

** (router-bgp ASN) allocates real bgp structre.

* Changes in zebra-19990416 snapshot

** Set version to 0.60 for preparation of beta release.

** New directory guile is added for linking with guile interpreter.

* Changes in zebra

** On GNU/Linux Kernel 2.2.x (with netlink support), zebra detects
asynchronous routing updates.  *BSD support is not yet finished.

* Changes in bgpd

** `show ip bgp regexp ASPATH_REGEX' uses CISCO like regular expression 
instead of RPSL like regular expression.  I'm planing to provide RPSL
like regular expression with `show ip bgp rpsl' or something.

* Changes in lib

** Press '?' at variable mandatory argument, vty prints nothing.  Now
vty outputs description about the argument.  Fixed by Alex Bligh
<amb@gxn.net>

** buffer.c has some ugly bugs.  Due to the bug, vty interface hangs
when large output date exists.  This bug is fixed. Reported by Alex
Bligh <amb@gxn.net>.

* Changes in ospfd

** DR and BDR information is shown by `show ip ospf interface' command.

* Changes in zebra-19990408 snapshot

* Changes in bgpd

** Old BGP-4+ specification (described in old draft) treatment bug is
fixed.  It seems that mrtd uses this format as default.  So if you
have problem peering with mrtd and want to use old draft format please
use version statement like this.

neighbor PEER_ADDRESS remote-as ASN
neighbor PEER_ADDRESS version bgp4+-draft-00

** When AS path is epmty (routes generated by bgpd), SEGV is occur
when announce the routes to eBGP peer.  Reported by
kad@gibson.skif.net.

** ip as-path access-list command is added.

** neighbor PEER_ADDRESS filter-list AS_LIST [in|out] command is added.

** neighbor PEER_ADDRESS timers holdtimer TIMER command is added.

* Changes in all daemons

** With KAME stack, terminal interface is now bind AF_INET socket
instead of AF_INET6 one.

* Changes in zebra-19990403 snapshot

* Changes in bgpd

** When bgpd has 'router zebra', bgpd automatically select it's router
ID as most highest interface's IP Address.

** When AS path is empty (in case of iBGP), it doesn't include any AS
segment.  This change is for announcement to gated under iBGP.

* Changes in ospfd

** OSPF hello packet send/receive works.

* Changes in ospf6d

** Yasuhiro Ohara's ospf6d codes is imported.  It is under development
and can't be compiled on any platform.

* Changes in zebra-19990327 snapshot

* Changes in bgpd

** When BGP-4+ connection is done by IPv6 link-local address.  One
have to specify interface index for the connection.  So I've added
interface statement to the neighbor commmand.  Please specify
interface name for getting interface index like below.  This statement
only works on GNU/Linux.  I'll support BSD ASAP.

router bgp 7675
 neighbor fe80::200:f8ff:fe01:5fd3 remote-as 2500
 neighbor fe80::200:f8ff:fe01:5fd3 interface sit3

** For disable BGP peering `shutdown' command is added.

router bgp 7675
 neighbor 10.0.0.1 shutdown

** `description' command is added to neighbor statement.

router bgp 7675
 neighbor 10.0.0.1 description peering with Norway.

** `show ip bgp regexp AS-REGEXP' works again.

show ip bgp regexp AS7675

will show routes which include AS7675.

** When a route which is made from `network' statement is send to
neighbor.  Set it's nexthop to self.  So 10.0.0.0/8 is announced to
the peer A with source address 192.168.1.1.  The routes nexthop is set
to 192.168.1.1.

* Changes in zebra

** In zebra/rtread_sysctl.c, function rtm_read() may overrun allocated
buffer when the address family is not supported and the length is big
(i.e link address).  Reported Achim Patzner <ap@bnc.net>.

* Changes in ospfd

** Now ospfd receive OSPF packet.

* Changes in zebra-19990319 snapshot

* Changes in configuration and libraries

** User can disable IPv6 feature and/or pthread feature by configure
   option.

  To disable IPv6:    configure --disable-ipv6
  To disable pthread: configure --disable-pthread

** User can disable specified daemon by configure option.

  Don't make zebra:  configure --disable-zebra
  Don't make bgpd:   configure --disable-bgpd
  Don't make ripd:   configure --disable-ripd
  Don't make ripngd: configure --disable-ripngd
  Don't make ospfd:  configure --disable-ospfd
  Don't make ospf6d: configure --disable-ospf6d

** Sample configuration files are installed as 600 file flag.
   Suggested by Jeroen Ruigrok/Asmodai <asmodai@wxs.nl>.

** syslog logging feature is added by Peter Galbavy
   <Peter.Galbavy@knowledge.com>

** Inclusion of standard header files is reworked by Peter Galbavy
   <Peter.Galbavy@knowledge.com>

** Change description from GNU/Linux 2.1.X to GNU/Linux 2.2.X

** If daemon function exists in standard C library use it.

** To generate configure script we upgrade autoconf to 2.13.  To
generate Makefile.in we upgrade automake to 1.4.

** doc/texinfo.tex is added to distribution.

** Update ports/pkg/DESCR description.

** Update doc/zebra.texi.

** logfile FILENAME statement deleted.  Instead of that please use log
file FILENAME.

* Changes in zebra

* Changes in bgpd

** Communication between zebra and bgpd works now.  So if there is
   `router zebra' line in bgpd.conf, selected route is installed
   into kernel routing table.

** Delete all routes which inserted by bgpd when bgpd dies.  If you
want to retain routes even bgpd dies please specify [-r|--retain]
option to bgpd.

** BGP announcement code is reworked.  Now bgpd announce selected
   routes to other peer.

** All output bgp packet is buffered.  It's written to the socket when
   it gets ready.

** Output route-map works now.  You can specify output route-map by:

   neighbor IP_ADDR route-map ROUTE_MAP_NAME out

** New route-map command added.

   set ip nexthop IP_ADDR
   set ipv6 nexthop global IP_ADDR

** Fix bug about unlock of the route_node structure.

** BGP-4+ support is added.  bgpd can listen and speak BGP-4+ packet
specified in RFC2283. You can view IPv6 bgp table by: `show ipv6 bgp'.

** Meny packet overflow check is added.

* Changes in ripd

* Changes in ripngd

* Changes in ospfd

** ospfd work is started by Toshiaki Takada <takada@zebra.org>.  Now
several files are included in ospfd directory.

** ospf6d codes are merged from Yasuhiro Ohara <yasu@sfc.wide.ad.jp>'s
ospfd work.  Now codes are located in ospf6d directory.


Local variables:
mode: outline
paragraph-separate: "[ 	]*$"
end:
