blob: 414061a70e18ba422185dd821613084502e4c4b6 [file] [log] [blame]
#!/bin/bash
# Copyright 2022 The ChromiumOS Authors.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# go/deshell-chromeos: this script is for test image only and should never
# be shipped to a release image.
usage() {
cat <<EOF
Usage: l3info [--address] [--neighbor] [--route] [--firewall] [--all]
--address: Print link and address information in all netns
--neighbor: Print neighbor information in all netns
--route: Print route and routing policy information
--firewall: Print iptables information (requires root)
--all: Equivalent to l3info --address --neighbor --route --firewall
EOF
}
log_run() {
echo "#" "$@"
"$@"
echo
}
# Short awk script to dedupe inputs without sorting.
dedupe() {
awk '!x[$0]++'
}
print_route() {
local family
local table
for family in 4 6; do
log_run ip -"${family}" rule show
for table in $(ip -"${family}" rule show \
| sed -E 's/.*lookup (.*)$/\1/' | dedupe); do
if [[ "${table}" != "default" && "${table}" != "local" ]]; then
log_run ip -"${family}" route show table "${table}"
fi
done
done
}
print_iptables() {
local iptables_command
local table
for iptables_command in iptables ip6tables; do
for table in filter mangle nat; do
log_run "${iptables_command}" -v -t "${table}" -S
done
done
}
print_address() {
# `ip addr show` prints both IPv4 and IPv6 addresses.
log_run ip addr show
log_run ip -all netns exec ip addr show
}
print_neighbor() {
# `ip neigh show` prints both IPv4 ARP and IPv6 NDP table.
log_run ip neigh show
log_run ip -all netns exec ip neigh show
}
main() {
if [ $# -eq 0 ]; then
usage
exit 1
fi
local param
for param in "$@"; do
case "${param}" in
route|--route)
print_route
;;
firewall|--firewall)
print_iptables
;;
address|addr|--address|--addr)
print_address
;;
neighbor|--neighbor)
print_neighbor
;;
all|--all)
print_address
print_neighbor
print_route
print_iptables
exit 0
;;
*)
usage
exit 1
;;
esac
done
exit 0
}
main "$@"