network.sh 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. . /usr/share/libubox/jshn.sh
  2. __network_ipaddr()
  3. {
  4. local __var="$1"
  5. local __iface="$2"
  6. local __family="$3"
  7. local __prefix="${4:-0}"
  8. local __tmp="$(ubus call network.interface."$__iface" status 2>/dev/null)"
  9. json_load "${__tmp:-{}}"
  10. json_get_type __tmp "ipv${__family}_address"
  11. if [ "$__tmp" = array ]; then
  12. json_select "ipv${__family}_address"
  13. json_get_type __tmp 1
  14. if [ "$__tmp" = object ]; then
  15. json_select 1
  16. json_get_var $__var address
  17. [ $__prefix -gt 0 ] && {
  18. json_get_var __tmp mask
  19. eval "export -- \"$__var=\${$__var}/$__tmp\""
  20. }
  21. return 0
  22. fi
  23. fi
  24. return 1
  25. }
  26. network_get_ipaddr() { __network_ipaddr "$1" "$2" 4 0; }
  27. network_get_ipaddr6() { __network_ipaddr "$1" "$2" 6 0; }
  28. network_get_subnet() { __network_ipaddr "$1" "$2" 4 1; }
  29. network_get_subnet6() { __network_ipaddr "$1" "$2" 6 1; }
  30. __network_device()
  31. {
  32. local __var="$1"
  33. local __iface="$2"
  34. local __field="$3"
  35. local __tmp="$(ubus call network.interface."$__iface" status 2>/dev/null)"
  36. [ -n "$__tmp" ] || return 1
  37. json_load "$__tmp"
  38. json_get_var "$__var" "$__field"
  39. }
  40. network_is_up()
  41. {
  42. local __up
  43. __network_device __up "$1" up && [ $__up -eq 1 ]
  44. }
  45. network_get_device() { __network_device "$1" "$2" l3_device; }
  46. network_get_physdev() { __network_device "$1" "$2" device; }
  47. __network_defer()
  48. {
  49. local __device="$1"
  50. local __defer="$2"
  51. json_init
  52. json_add_string name "$__device"
  53. json_add_boolean defer "$__defer"
  54. ubus call network.device set_state "$(json_dump)" 2>/dev/null
  55. }
  56. network_defer_device() { __network_defer "$1" 1; }
  57. network_ready_device() { __network_defer "$1" 0; }