2
0

qosify.init 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #!/bin/sh /etc/rc.common
  2. # Copyright (c) 2021 OpenWrt.org
  3. START=19
  4. USE_PROCD=1
  5. PROG=/usr/sbin/qosify
  6. add_option() {
  7. local type="$1"
  8. local name="$2"
  9. config_get val "$cfg" "$name"
  10. [ -n "$val" ] && json_add_$type "$name" "$val"
  11. }
  12. add_flow_config() {
  13. local cfg="$1"
  14. add_option string dscp_prio
  15. add_option string dscp_bulk
  16. add_option int bulk_trigger_timeout
  17. add_option int bulk_trigger_pps
  18. add_option int prio_max_avg_pkt_len
  19. }
  20. add_defaults() {
  21. cfg="$1"
  22. json_add_boolean reset 1
  23. config_get files "$cfg" defaults
  24. json_add_array files
  25. for i in $files; do
  26. json_add_string "" "$i"
  27. done
  28. json_close_array
  29. add_flow_config "$cfg"
  30. add_option int timeout
  31. add_option string dscp_icmp
  32. add_option string dscp_default_udp
  33. add_option string dscp_default_tcp
  34. }
  35. add_interface() {
  36. local cfg="$1"
  37. config_get_bool disabled "$cfg" disabled 0
  38. [ "$disabled" -gt 0 ] && return
  39. config_get name "$cfg" name
  40. json_add_object "$name"
  41. config_get bw "$cfg" bandwidth
  42. config_get bw_up "$cfg" bandwidth_up
  43. bw_up="${bw_up:-$bw}"
  44. [ -n "$bw_up" ] && json_add_string bandwidth_up "$bw_up"
  45. config_get bw_down "$cfg" bandwidth_down
  46. bw_down="${bw_down:-$bw}"
  47. [ -n "$bw_down" ] && json_add_string bandwidth_down "$bw_down"
  48. add_option string bandwidth
  49. add_option boolean ingress
  50. add_option boolean egress
  51. add_option string mode
  52. add_option boolean nat
  53. add_option boolean host_isolate
  54. add_option boolean autorate_ingress
  55. add_option string ingress_options
  56. add_option string egress_options
  57. config_get user_options "$cfg" options
  58. config_get otype "$cfg" overhead_type
  59. options=
  60. case "$otype" in
  61. none);;
  62. manual)
  63. config_get overhead "$cfg" overhead
  64. [ -n "$overhead" ] && append options "overhead $overhead"
  65. config_get encap "$cfg" overhead_encap
  66. [ -n "$encap" ] && append options "$encap"
  67. ;;
  68. conservative|\
  69. pppoa-vcmux|\
  70. pppoa-llc|\
  71. pppoe-vcmux|\
  72. pppoe-llcsnap|\
  73. bridged-vcmux|\
  74. bridged-llcsnap|\
  75. ipoa-vcmux|\
  76. ipoa-llcsnap|\
  77. pppoe-ptm|\
  78. bridged-ptm|\
  79. docsis|\
  80. ethernet)
  81. append options "$otype"
  82. ;;
  83. esac
  84. config_get mpu "$cfg" overhead_mpu
  85. [ -n "$mpu" ] && append options "mpu $mpu"
  86. config_get ovlan "$cfg" overhead_vlan
  87. [ "${ovlan:-0}" -ge 2 ] && append options "ether-vlan"
  88. [ "${ovlan:-0}" -ge 1 ] && append options "ether-vlan"
  89. [ -n "$user_options" ] && append options "$user_options"
  90. [ -n "$options" ] && json_add_string options "$options"
  91. json_close_object
  92. }
  93. add_class() {
  94. local cfg="$1"
  95. config_get value "$cfg" value
  96. config_get ingress "$cfg" ingress
  97. config_get egress "$cfg" egress
  98. json_add_object "$cfg"
  99. json_add_string ingress "${ingress:-$value}"
  100. json_add_string egress "${egress:-$value}"
  101. add_flow_config "$cfg"
  102. json_close_object
  103. }
  104. reload_service() {
  105. json_init
  106. config_load qosify
  107. config_foreach add_defaults defaults
  108. json_add_object interfaces
  109. config_foreach add_interface interface
  110. json_close_object
  111. json_add_object classes
  112. config_foreach add_class class
  113. config_foreach add_class alias
  114. json_close_object
  115. json_add_object devices
  116. config_foreach add_interface device
  117. json_close_object
  118. ubus call qosify config "$(json_dump)"
  119. }
  120. service_triggers() {
  121. procd_add_reload_trigger qosify
  122. }
  123. start_service() {
  124. procd_open_instance
  125. procd_set_param command "$PROG"
  126. procd_set_param respawn
  127. procd_close_instance
  128. }
  129. service_started() {
  130. ubus -t 10 wait_for qosify
  131. [ $? = 0 ] && reload_service
  132. }