• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2#$Id$
3
4#
5# Script created by: Stephen R. van den Berg <srb@cuci.nl>, 1999/04/18
6# Donated to the public domain.
7#
8# This script transforms the output of "ip" into more readable text.
9# "ip" is the Linux-advanced-routing configuration tool part of the
10# iproute package.
11#
12
13test "X-h" = "X$1" && echo "Usage: $0 [tablenr [raw ip args...]]" && exit 64
14
15test -z "$*" && set 0
16
17ip route list table "$@" |
18 while read network rest
19 do set xx $rest
20    shift
21    proto=""
22    via=""
23    dev=""
24    scope=""
25    src=""
26    table=""
27    case $network in
28       broadcast|local|unreachable) via=$network
29          network=$1
30          shift
31          ;;
32    esac
33    while test $# != 0
34    do
35       case "$1" in
36          proto|via|dev|scope|src|table)
37             key=$1
38             val=$2
39             eval "$key='$val'"
40             shift 2
41             ;;
42          dead|onlink|pervasive|offload|notify|linkdown|unresolved)
43             shift
44             ;;
45          *)
46             # avoid infinite loop on unknown keyword without value at line end
47             shift
48             shift
49             ;;
50       esac
51    done
52    echo "$network	$via	$src	$proto	$scope	$dev	$table"
53 done | awk -F '	' '
54BEGIN {
55   format="%15s%-3s %15s %15s %8s %8s%7s %s\n";
56   printf(format,"target","","gateway","source","proto","scope","dev","tbl");
57 }
58 { network=$1;
59   mask="";
60   if(match(network,"/"))
61    { mask=" "substr(network,RSTART+1);
62      network=substr(network,0,RSTART);
63    }
64   via=$2;
65   src=$3;
66   proto=$4;
67   scope=$5;
68   dev=$6;
69   table=$7;
70   printf(format,network,mask,via,src,proto,scope,dev,table);
71 }
72'
73