summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-10-10 16:30:42 +0200
committerFelix Fietkau <nbd@openwrt.org>2011-10-10 16:30:47 +0200
commit3085170188cc5bf04f4cfb6f07c292e06d2b40a8 (patch)
treedddf97d12a9e956a5868f0c8016b9908462884ee
parentbcae80898d18bd8640efae10c3f3dff93c1be3d0 (diff)
proto-shell: add a library function for sending protocol handler updates
-rwxr-xr-xdummy/netifd-proto.sh87
-rwxr-xr-xdummy/proto/ppp.sh3
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() {