* Changes in Quagga 0.96.6

- 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:
