Go to file
Xin Long 74af8dd962 ip route: restore route entries in correct order
Sometimes we cannot restore route entries, because in kernel
  [1] fib_check_nh()
  [2] fib_valid_prefsrc()
cause some routes to depend on existence of others while adding.

For example, we saved all the routes, and flushed all tables
  [a] default via 192.168.122.1 dev eth0
  [b] 192.168.122.0/24 dev eth0 src 192.168.122.21
  [c] broadcast 127.0.0.0 dev lo table local src 127.0.0.1
  [d] local 127.0.0.0/8 dev lo table local  src 127.0.0.1
  [e] local 127.0.0.1 dev lo table local src 127.0.0.1
  [f] broadcast 127.255.255.255 dev lo table local src 127.0.0.1
  [g] broadcast 192.168.122.0 dev eth0 table local src 192.168.122.21
  [h] local 192.168.122.21 dev eth0 table local src 192.168.122.21
  [i] broadcast 192.168.122.255 dev eth0 table local src 192.168.122.21

  Now start to restore them:
    If we want to add [a], we have to add [b] first, as [1] and
    'via 192.168.122.1' in [a].
    If we want to add [b], we have to add [h] first, as [2] and
    'src 192.168.122.21' in [b].

  So the correct order to restore should be like:
    [e][h] -> [b][c][d][f][g][i] -> [a]

This patch fixes it by traversing the file 3 times, it only restores
part of them in each run according to the following conditions, to
make sure every entry can be restored successfully.
  1. !gw && (!fib_prefsrc || fib_prefsrc == cfg->fc_dst)
  2. !gw && (fib_prefsrc != cfg->fc_dst)
  3. gw

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Phil Sutter <phil@nwl.cc>
2016-07-15 11:34:10 -07:00
bash-completion tc: add bash-completion function 2016-05-03 09:53:26 -07:00
bridge Use ARRAY_SIZE macro everywhere 2016-06-29 09:18:18 -07:00
devlink Make builds default to quiet mode 2016-05-31 12:13:07 -07:00
doc doc/tc-filters.tex: Drop overly subjective paragraphs 2016-03-27 10:34:40 -07:00
etc/iproute2 {f, m}_bpf: allow for user-defined object pinnings 2015-11-29 11:55:16 -08:00
examples tc, bpf: add support for map pre/allocation 2016-04-11 21:54:47 +00:00
genl Make builds default to quiet mode 2016-05-31 12:13:07 -07:00
include Add support for configuring Infiniband GUIDs 2016-07-15 11:25:36 -07:00
ip ip route: restore route entries in correct order 2016-07-15 11:34:10 -07:00
lib Add support for configuring Infiniband GUIDs 2016-07-15 11:25:36 -07:00
man Add support for configuring Infiniband GUIDs 2016-07-15 11:25:36 -07:00
misc Use ARRAY_SIZE macro everywhere 2016-06-29 09:18:18 -07:00
netem scrub out whitespace issues 2016-03-27 10:50:14 -07:00
tc tc: flower: Add skip_{hw|sw} support 2016-07-06 21:24:48 -07:00
testsuite testsuite: add a test for tc pedit action 2016-03-27 10:34:38 -07:00
tipc Make builds default to quiet mode 2016-05-31 12:13:07 -07:00
.gitignore doc: Add my article about tc, filters and actions 2016-03-04 15:29:00 -08:00
COPYING Update address of FSF in license 2008-03-08 13:31:03 -08:00
Makefile Make builds default to quiet mode 2016-05-31 12:13:07 -07:00
README README: update mail address and download location 2013-01-18 09:54:58 -08:00
README.decnet Decnet documentation update 2005-06-13 18:47:56 +00:00
README.devel iproute2: fix minor typo in comments 2011-07-11 10:11:09 -07:00
README.distribution README cleanup's 2012-01-03 15:04:55 -08:00
README.iproute2+tc tc, bpf: finalize eBPF support for cls and act front-end 2015-04-10 13:31:19 -07:00
README.lnstat Rename: misc/README.lnstat -> README.lnstat 2004-10-19 20:24:47 +00:00
configure Make builds default to quiet mode 2016-05-31 12:13:07 -07:00

README

This is a set of utilities for Linux networking.

Information:
    http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2

Download:
    http://www.kernel.org/pub/linux/utils/net/iproute2/

Repository:
    git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git

How to compile this.
--------------------
1. libdbm

arpd needs to have the db4 development libraries. For Debian
users this is the package with a name like libdb4.x-dev.
DBM_INCLUDE points to the directory with db_185.h which
is the include file used by arpd to get to the old format Berkeley
database routines.  Often this is in the db-devel package.

2. make

The makefile will automatically build a Config file which
contains whether or not ATM is available, etc.

3. To make documentation, cd to doc/ directory , then
   look at start of Makefile and set correct values for
   PAGESIZE=a4		, ie: a4 , letter ...	(string)
   PAGESPERPAGE=2	, ie: 1 , 2 ...		(numeric)
   and make there. It assumes, that latex, dvips and psnup
   are in your path.

4. This package includes matching sanitized kernel headers because
   the build environment may not have up to date versions. See Makefile
   if you have special requirements and need to point at different
   kernel include files.

Stephen Hemminger
stephen@networkplumber.org

Alexey Kuznetsov
kuznet@ms2.inr.ac.ru