2005-08-16  Stephen Hemminger  <shemminger@osdl.org>

	* Limit ip route flush to 10 rounds.
	* Cleanup ip rule flush error message
	
2005-08-08  Stephen Hemminger  <shemminger@osdl.org>

	* Update to 2.6.13+ kernel headers
	* Fix array overrun in paretonormal
	* Fix ematch to not include dropped fields from skb.
	
2005-07-14  Thomas Graf <tgraf@suug.ch>

	* Make ematch bison/lex build with common flex
	
2005-07-10  Stephen Hemminger  <shemminger@osdl.org>
	
	* Fix Gcc 4.0 build warnings signed/unsigned

2005-06-23  Jamal Hadi Salim <hadi@znyx.com>

	* Fix for options process with ipt

2005-06-23  Thomas Graf <tgraf@suug.ch>
	
	* Add extended matches (nbyte, cmp, u32, meta)
	* Add basic classifier
	* Fix clean/distclean makefile targets
	* update local header file copies
	* IPv4 multipath algorithm selection support
	* cscope Makefile target
	* Fix off-by-one while generating argument vector
	  in batched mode.
	* Assume stdin if no argument is given to -batch

2005-06-22  Stephen Hemminger  <shemminger@osdl.org>

	* Update include files to 2.6.12
	* Add ss support for TCP_CONG

2005-06-13  Steven Whitehouse <steve@chygwyn.com>

	* Decnet doc's update

2005-06-07  Stephen Hemminger  <shemminger@osdl.org>

	* Fix 'ip link' map to handle case where device gets autoloaded
	  by using if_nametoindex as fallback
	* Device indices are unsigned not int.

2005-06-07   Masahide NAKAMURA <nakam@linux-ipv6.org>
	
	* [ip] show timestamp when using '-t' option.
	* [ip] remove duplicated code for expired message of xfrm.
	* [ip] add "deleteall" command for xfrm;
	  "flush" uses kernel's flush interface and
	  "deleteall" uses legacy iproute2's flush feature like
	   getting-and-deleting-for-each.

2005-03-30  Stephen Hemminger  <shemminger@osdl.org>

	* include/linux/netfilter_ipv4/ip_tables.h dont include compiler.h
	  because it isn't needed and not on all systems
	* Update rtnetlink.h and pkt_cls.h to be stripped versions
	  of headers from 2.6.12-rc1

2005-03-30  Jamal Hadi Salim <hadi@znyx.com>

	* Proper verison of iptables headers (from 1.3.1)
	* Set revision file in m_ipt
	* Fix action_util naming in mirred
	* don't call ll_init_map in mirred

2005-03-19  Thomas Graf <tgraf@suug.ch>

	* Warn about wildcard deletions and provide IFA_ADDRESS upon
	  deletions to enforce prefix length validation for IPv4.
	* Fix netlink message alignment when the last routing attribute added
	  has a data length not aligned to RTA_ALIGNTO.
	
2005-03-30  Masahide NAKAMURA <nakam@linux-ipv6.org>
	
	* ipv6 xfrm allocspi and monitor support.
	
2005-03-29  Stephen Hemminger  <shemminger@osdl.org>

	* switch to stack for netem tables

2005-03-18  Stephen Hemminger  <shemminger@osdl.org>

	* add -force option to batch mode
	* handle midline comments in batch mode
	* sum per cpu fields in lnstat correctly

2005-03-14  Stephen Hemminger  <shemminger@osdl.org>

	* cleanup batch mode, allow continuation, comments etc.
	* recode reuse of netlink socket

2005-03-14  Boian Bonev <boian@bonev.com>
	
	* enhancement to batch mode.
	 it does not exit on error, just report it
	 tc reuses the already open netlink socket for subsequent command(s)

2005-03-14  Thomas Graf <tgraf@suug.ch>
	
	* ip link command
	  print NO-CARRIER flag if there is no carrier and the link is up.

2005-03-14  Patrick McHardy <kaber@trash.net>

	* bug: Use USER_HZ where necessary

2005-03-10  Jamal Hadi Salim <hadi@znyx.com>

	* Fix bug with register_target

2005-03-10  Stephen Hemminger  <shemminger@osdl.org>

	* fix pkt_cls.h to have tc_u32_mark
	* update include files to be stripped versions of 2.6.11
	* add documentation about netem distributions [from nistnet]
	* turn off nup in document make [from FC3]
	* don't build with extra debug info (-g) [from FC3]
	
2005-03-10 Nix <nix@esperi.org.uk>

	* make man3 directory
	
2005-03-10 Pasi <Pasi.Eronen@nokia.com>
	
	* add ESP-in-UDP encapsulation

2005-03-10 Thomas Graf <tgraf@suug.ch>
	* [NETEM] Fix off by one
 	* update local header file copies
	* [NEIGH] print number of probes done so far (statistics mode only)
	
2005-03-10 Herbert Xu <herbert@gondor.apana.org.au>
	* Trivial typo in ip help

2005-02-09  Stephen Hemminger  <shemminger@osdl.org>

	* netem distribution data reorganization

2005-02-09  Roland Dreier <roland@topspin.com>

	* ip over infiniband address display

2005-02-09  Jim Gifford <lfs@jg555.com>

	* make install fix for ip/

2005-02-07 Mads Martin Joergensen <mmj@suse.de>
	
	* Don't mix address families when flushing	
	
2005-02-07  Stephen Hemminger  <shemminger@osdl.org>

	* Validate classid is not too large to cause loss of bits.

2005-02-07 Jean-Marc Ranger <jmranger@sympatico.ca>

	* need to call getline() with null for first usage
	* don't overwrite const arg

2005-02-07  Stephen Hemminger  <shemminger@linux.site>

	* Add experimental distribution

2005-01-18  Yun Mao <maoy@cis.upenn.edu>

	* typo in ss

2005-01-18  Thomas Graf <tgraf@suug.ch>
	
	* tc pedit/action cleanups
	* add addraw_l
	* rtattr_parse cleanups

2005-01-17  Jamal Hadi Salim <hadi@znyx.com>

	* typo in m_mirred
	* add support for pedit

2005-01-13  Jim Gifford <lfs@jg555.com>
	
	* Fix allocation size error in nomal and paretonormal generation
	  programs.

2005-01-12  Masahide Nakamura <nakam@linux-ipv6.org>
	
	* ipmonitor shows IPv6 prefix list notification
	* update to iproute2 xfrm for ipv6	
	
2005-01-12  Stephen Hemminger  <shemminger@osdl.org>

	* Fix compile warnings when building 64bit system since
	  u64 is unsigned long, but format is %llu

2005-01-12  "Catalin(ux aka Dino) BOIE" <util@deuroconsult.ro>

	* Add the possibility to use fwmark in u32 filters
	
2005-01-12  Andi Kleen <ak@suse.de>

	* Add netlink manual page

2004-10-20  Stephen Hemminger  <shemminger@osdl.org>
	
	* Add warning about "ip route nat" no longer supported

2005-01-12  Thomas Graf <tgraf@suug.ch>

	* Tc testsuite

2005-01-12  Jamal Hadi Salim <hadi@znyx.com>

	* Add iptables tc support. This meant borrowing headers
	  from iptables *ugh*

2004-12-08  Jamal Hadi Salim <hadi@znyx.com>

	* Add mirror and redirect actions

2004-10-20  Stephen Hemminger  <shemminger@osdl.org>

	* Don't include <asm/byteorder.h> since then we get dependant on
	  kernel headers on host machine
	* Minor fix for building on old machine without IPPROTO_SCTP

2004-10-19  Harald Welte <laforge@gnumonks.org>

	* Replace rtstat (and ctstat) with new lnstat

2004-10-19  Mads Martin Joergensen <mmj@suse.de>

	* Ip is using the wrong structure in ipaddress.c when showing stats
	* Make sure no buffer overflow in nstat

2004-10-19  Michal <md@lnet.pl>

	* fix scaling in print_rates (for bits)

2004-09-28  Stephen Hemminger  <shemminger@osdl.org>

	* fix build problems with arpd and pthread
	* add pkt_sched.h

2004-09-28  Mike Frysinger <vapier@gentoo.org>
	
	* make man8 directory
	* install ifcfg and rtpr scripts

2004-09-28  Andreas Haumer <andreas@xss.co.at>

	* make install symlink fix.

2004-09-28  Masahide Nakamura <nakam@linux-ipv6.org>

	* ICMP/ICMPv6's type and code in IPsec selector.
	* fixes `ip xfrm`'s algorithm key when using hexadecimal
	* support 'ip xfrm' protocol types
	* flush message types for XFRM's policy/state


2004-09-01  Stephen Hemminger  <shemminger@osdl.org>

	* Fix ip command to not crash when interface name is too long.
	  always use strncpy(.., IFNAMSIZ)

2004-08-31  Stephen Hemminger  <shemminger@osdl.org>

	* Add gact documentation from jamal
	* Chang more arguments to rtnetlink API const
	* Drop dead queuing disciplines
	* Handle qdisc without xstats in core rather than
	  putting stub's everywhere
	* Add requeue to tc_stats and handle new/old ABI issues

2004-08-30  Stephen Hemminger  <shemminger@osdl.org>

	* Make clean and install changes for man pages
	* Patch from jamal to support gact
	* Add support for loading distributions to netem
	

2004-08-23  Stephen Hemminger  <shemminger@osdl.org>

	* Update from jamal for all the parts that got broken in the
	  last classification patch.
	* Hfsc/sc patch from patrick

2004-08-13  Stephen Hemminger  <shemminger@osdl.org>

	* Add jamal's tc extensions for classification
	* Get rid of old Patches/ directory for tcp_diag module
	* Make get_rate table based.

2004-08-11  Stephen Hemminger  <shemminger@osdl.org>

	* Add xfrm message formatting from
	  Masahide Nakamura <nakam@linux-ipv6.org>

2004-08-09  Stephen Hemminger  <shemminger@osdl.org>

	* Fix netem scheduler to handle case where psched us != real us

	* Remove configuration for everything that can depend on 
	  extracted kernel headers
	* Add kernel headers required to include/linux

2004-08-04  Stephen Hemminger  <shemminger@osdl.org>

	* Get rid of old tcp_diag module, it is part of kernel.

	* Add some kernel include files back (netlink, tcp_diag, pkt_sched)

2004-07-30  Stephen Hemminger  <shemminger@osdl.org>

	* Make ip xfrm stuff config option since it doesn't exist on 2.4

	* HFSC doesn't exist on older 2.4 kernels so make it configurable

	* HTB API changed and won't build with mismatched version.
	  Rather than sticking user with a build error, just don't
	  build it in on mismatch.

	* Change configure script to make sure netem is the correct
	  version. I changed the structure def. a couple of times before
	  settling on the final API

2004-07-16  Stephen Hemminger  <shemminger@osdl.org>

	* Add htb mpu support 
	http://luxik.cdi.cz/~devik/qos/htb/v3/htb_tc_overhead.diff
	* Three small xfrm updates

2004-07-07  Stephen Hemminger  <shemminger@osdl.org>

	* Fix if_ether.h to fix arpd build
	* Add hfsc scheduler support
	* Add ip xfrm support
	* Add add jitter (instead of rate) to netem scheduler

2004-07-02  Stephen Hemminger  <shemminger@osdl.org>

	* use compile to test for ATM libraries
	* put TC layered scheduler hooks in /usr/lib/tc as shared lib
	  before it looked in standard search path (/lib;/usr/lib;...)
	  which seems out of place.
	* build netem as shared library (more for testing/example)
	* build ATM as shared library since libatm may be on build
	  machine but not on deployment machine
	* fix make install to not install SCCS directories

2004-07-01  Stephen Hemminger  <shemminger@osdl.org>

	* add more link options to ip command (from Mark Smith
	* add rate and duplicate arguments to tc command
	* add -iec flag for tc printout
	* rename delay scheduler to netem

2004-06-25  Stephen Hemminger  <shemminger@osdl.org>

	* Add loss parameter to delay
	* Rename delay qdisc to netsim
	* Add autoconfiguration by building a Config file
	  and using it.

2004-06-09  Stephen Hemminger  <shemminger@osdl.org>

	* Report rates in K=1000 (requested by several people)
	* Add GNU long style options
	* For HTB use get_hz to pick up value of system HZ at runtime
	* Delete unused funcs.

2004-06-08  Stephen Hemminger  <shemminger@osdl.org>

	* Cleanup ss
	     - use const char and local functions where possible
	* Add man pages from SuSe
	* SuSE patches
	     - path to db4.1
	     - don't hardcode path to /tmp in ifstat
	       Alternat fix: was to use TMPDIR
	     - handle non-root user calling ip route flush going into
	       an infinite loop.
	       Alternate fix: was to timeout if route table doesn't empty.
	* Try and get rid of dependency on kernel include files
	  Get rid of having private glibc-include headers
	
2004-06-07  Stephen Hemminger  <shemminger@osdl.org>

	* Import patches that make sense from Fedora Core 2
		- iproute2-2.4.7-hex
		     print fwmark in hex
		- iproute2-2.4.7-netlink
		     handle getting right netlink mesg back
		- iproute2-2.4.7-htb3-tc
		     add HTB scheduler
		- iproute2-2.4.7-default
		     add entry default to rttable
                    
2004-06-04  Stephen Hemminger  <shemminger@osdl.org>

	* Add support for vegas info to ss

2004-06-02  Stephen Hemminger  <shemminger@osdl.org>

	* Use const char in utility routines where appropriate
	* Rearrange include files so can build with standard headers
	* For "tc qdisc ls" see the default queuing discpline "pfifo_fast"
	  and understand it
	* Get rid of private defintions of network headers which existed
	  only to handle old glibc

2004-04-15  Stephen Hemminger  <shemminger@osdl.org>

	* Add the delay (network simulation scheduler)

2004-04-15  Stephen Hemminger  <shemminger@osdl.org>

	* Starting point baseline based on iproute2-2.4.7-ss020116-try

