diff options
Diffstat (limited to 'dummy/netifd-proto.sh')
-rwxr-xr-x | dummy/netifd-proto.sh | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/dummy/netifd-proto.sh b/dummy/netifd-proto.sh index 7ce88ee..85e8698 100755 --- a/dummy/netifd-proto.sh +++ b/dummy/netifd-proto.sh @@ -36,6 +36,93 @@ _proto_do_setup() { eval "$1_setup \"$interface\" \"$ifname\"" } +proto_init_update() { + local ifname="$1" + local up="$2" + local external="$3" + + PROTO_INIT=1 + PROTO_IPADDR= + PROTO_IP6ADDR= + PROTO_ROUTE= + PROTO_ROUTE6= + json_init + json_add_string "ifname" "$ifname" + json_add_boolean "link-up" "$up" + [ -n "$3" ] && json_add_boolean "address-external" "$external" +} + +proto_add_ipv4_address() { + local address="$1" + local mask="$2" + + jshn_append PROTO_IPADDR "$address/$mask" +} + +proto_add_ipv6_address() { + local address="$1" + local mask="$2" + + jshn_append PROTO_IP6ADDR "$address/$mask" +} + +proto_add_ipv4_route() { + local target="$1" + local mask="$2" + local gw="$3" + + jshn_append PROTO_ROUTE "$target/$mask/$gw" +} + +proto_add_ipv6_route() { + local target="$1" + local mask="$2" + local gw="$3" + + jshn_append PROTO_ROUTE6 "$target/$mask/$gw" +} + +_proto_push_ip() { + json_add_string "" "$1" +} + +_proto_push_route() { + local str="$1"; + local target="${str%%/*}" + str="${str#*/}" + local mask="${str%%/*}" + local gw="${str#*/}" + + json_add_table "" + json_add_string target "$target" + json_add_integer mask "$mask" + json_add_string gateway "$gw" + json_close_table +} + +_proto_push_array() { + local name="$1" + local val="$2" + local cb="$3" + + [ -n "$val" ] || return 0 + json_add_array "$name" + for item in $val; do + eval "$cb \"\$item\"" + done + json_close_array +} + +proto_send_update() { + local interface="$1" + + _proto_push_array "ipaddr" "$PROTO_IPADDR" _proto_push_ip + _proto_push_array "ip6addr" "$PROTO_IP6ADDR" _proto_push_ip + _proto_push_array "route" "$PROTO_ROUTE" _proto_push_route + _proto_push_array "route6" "$PROTO_ROUTE6" _proto_push_route + ubus call network.interface."$interface" notify_proto "$(json_dump)" & +} + init_proto() { proto="$1"; shift cmd="$1"; shift |