b91863f7346fc4cd3548a2bd714d2184ef85e795
[project/netifd.git] / proto / netifd-proto.sh
1 . /usr/share/libubox/jshn.sh
2
3 proto_config_add_generic() {
4         json_add_array ""
5         json_add_string "" "$1"
6         json_add_int "" "$2"
7         json_close_array
8 }
9
10 proto_config_add_int() {
11         proto_config_add_generic "$1" 5
12 }
13
14 proto_config_add_string() {
15         proto_config_add_generic "$1" 3
16 }
17
18 proto_config_add_boolean() {
19         proto_config_add_generic "$1" 7
20 }
21
22 add_default_handler() {
23         case "$(type $1 2>/dev/null)" in
24                 *function*) return;;
25                 *) eval "$1() { return; }"
26         esac
27 }
28
29 proto="$1"
30 cmd="$2"
31 data="$3"
32
33 case "$cmd" in
34         dump)
35                 add_protocol() {
36                         immediate=0
37
38                         add_default_handler "$1_init_config"
39
40                         json_init
41                         json_add_string "name" "$1"
42                         eval "$1_init"
43                         json_add_boolean immediate "$immediate"
44                         json_add_array "config"
45                         eval "$1_init_config"
46                         json_close_array
47                         json_dump
48                 }
49         ;;
50         *)
51                 add_protocol() {
52                         [[ "$proto" == "$1" ]] || return 0
53
54                         case "$cmd" in
55                                 setup) eval "$1_setup \"\$data\"" ;;
56                                 teardown) eval "$1_teardown \"\$data\"" ;;
57                                 *) return 1 ;;
58                         esac
59                 }
60         ;;
61 esac