netdev-l2addr.sh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. source lib.sh
  4. set -o pipefail
  5. NSIM_ADDR=2025
  6. TEST_ADDR="d0:be:d0:be:d0:00"
  7. RET_CODE=0
  8. cleanup() {
  9. cleanup_netdevsim "$NSIM_ADDR"
  10. cleanup_ns "$NS"
  11. }
  12. trap cleanup EXIT
  13. fail() {
  14. echo "ERROR: ${1:-unexpected return code} (ret: $_)" >&2
  15. RET_CODE=1
  16. }
  17. get_addr()
  18. {
  19. local type="$1"
  20. local dev="$2"
  21. local ns="$3"
  22. ip -j -n "$ns" link show dev "$dev" | jq -er ".[0].$type"
  23. }
  24. setup_ns NS
  25. nsim=$(create_netdevsim $NSIM_ADDR "$NS")
  26. get_addr address "$nsim" "$NS" >/dev/null || fail "Couldn't get ether addr"
  27. get_addr broadcast "$nsim" "$NS" >/dev/null || fail "Couldn't get brd addr"
  28. get_addr permaddr "$nsim" "$NS" >/dev/null && fail "Found perm_addr without setting it"
  29. ip -n "$NS" link set dev "$nsim" address "$TEST_ADDR"
  30. ip -n "$NS" link set dev "$nsim" brd "$TEST_ADDR"
  31. [[ "$(get_addr address "$nsim" "$NS")" == "$TEST_ADDR" ]] || fail "Couldn't set ether addr"
  32. [[ "$(get_addr broadcast "$nsim" "$NS")" == "$TEST_ADDR" ]] || fail "Couldn't set brd addr"
  33. if create_netdevsim_port "$NSIM_ADDR" "$NS" 2 "FF:FF:FF:FF:FF:FF" 2>/dev/null; then
  34. fail "Created netdevsim with broadcast permaddr"
  35. fi
  36. nsim_port=$(create_netdevsim_port "$NSIM_ADDR" "$NS" 2 "$TEST_ADDR")
  37. get_addr address "$nsim_port" "$NS" >/dev/null || fail "Couldn't get ether addr"
  38. get_addr broadcast "$nsim_port" "$NS" >/dev/null || fail "Couldn't get brd addr"
  39. [[ "$(get_addr permaddr "$nsim_port" "$NS")" == "$TEST_ADDR" ]] || fail "Couldn't get permaddr"
  40. cleanup_netdevsim "$NSIM_ADDR" "$NS"
  41. exit $RET_CODE