#!/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 "$@"
