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