diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-10-10 16:30:42 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2011-10-10 16:30:47 +0200 |
commit | 3085170188cc5bf04f4cfb6f07c292e06d2b40a8 (patch) | |
tree | dddf97d12a9e956a5868f0c8016b9908462884ee | |
parent | bcae80898d18bd8640efae10c3f3dff93c1be3d0 (diff) |
proto-shell: add a library function for sending protocol handler updates
-rwxr-xr-x | dummy/netifd-proto.sh | 87 | ||||
-rwxr-xr-x | dummy/proto/ppp.sh | 3 |
2 files changed, 90 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 diff --git a/dummy/proto/ppp.sh b/dummy/proto/ppp.sh index 5078833..adce2ca 100755 --- a/dummy/proto/ppp.sh +++ b/dummy/proto/ppp.sh @@ -36,6 +36,9 @@ pppoe_setup() { json_get_var username username json_get_var password password echo "pppoe_setup($1, $2), username=$username, password=$password" + proto_init_update ppp0 1 + proto_add_ipv4_address "192.168.2.1" 32 + proto_send_update "$1" } pppoe_teardown() { |