diff options
author | Steven Barth <cyrus@openwrt.org> | 2014-10-02 19:37:36 +0000 |
---|---|---|
committer | Steven Barth <cyrus@openwrt.org> | 2014-10-02 19:37:36 +0000 |
commit | 36b05bbed34c8f4192ea04d17a030fc78e6e5c4f (patch) | |
tree | 518c85667ba208134c6af66df7cbee8bc2c32716 /package/network/config/ipip/files/ipip.sh | |
parent | 73179a188c6eed4db08ed5f9e109fae17db6575e (diff) | |
download | master-31e0f0ae-36b05bbed34c8f4192ea04d17a030fc78e6e5c4f.tar.gz master-31e0f0ae-36b05bbed34c8f4192ea04d17a030fc78e6e5c4f.tar.bz2 master-31e0f0ae-36b05bbed34c8f4192ea04d17a030fc78e6e5c4f.zip |
IPIP: IP in IP package support
The package supports IP in IP by registering the ipip protocol handler
Following options are configurable
-peeraddr (IPv4 remote address)
-ipaddr (IPv4 local address)
-ttl (time to live of encapsulating packet)
-tos (type of service of encapsulating packet either inherit (outer header inherits the value of the inner header) or hex value)
-df (don't fragment flag of encapsulating packet)
-mtu (IPIP tunnel mtu)
-tunlink (bind tunnel to this interface)
-zone (firewall zone to which the IPIP tunnel will be added)
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
SVN-Revision: 42746
Diffstat (limited to 'package/network/config/ipip/files/ipip.sh')
-rwxr-xr-x | package/network/config/ipip/files/ipip.sh | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/package/network/config/ipip/files/ipip.sh b/package/network/config/ipip/files/ipip.sh new file mode 100755 index 0000000000..51c503f895 --- /dev/null +++ b/package/network/config/ipip/files/ipip.sh @@ -0,0 +1,80 @@ +#!/bin/sh + +[ -n "$INCLUDE_ONLY" ] || { + . /lib/functions.sh + . /lib/functions/network.sh + . ../netifd-proto.sh + init_proto "$@" +} + +proto_ipip_setup() { + local cfg="$1" + + local df ipaddr peeraddr tunlink ttl tos zone mtu + json_get_vars df ipaddr peeraddr tunlink ttl tos zone mtu + + [ -z "$peeraddr" ] && { + proto_notify_error "$cfg" "MISSING_ADDRESS" + proto_block_restart "$cfg" + return + } + + ( proto_add_host_dependency "$cfg" "$peeraddr" "$tunlink" ) + + [ -z "$ipaddr" ] && { + local wanif="$tunlink" + if [ -z $wanif ] && ! network_find_wan wanif; then + proto_notify_error "$cfg" "NO_WAN_LINK" + return + fi + + if ! network_get_ipaddr ipaddr "$wanif"; then + proto_notify_error "$cfg" "NO_WAN_LINK" + return + fi + } + + [ -z "$zone" ] && zone="wan" + + proto_init_update "ipip-$cfg" 1 + + proto_add_tunnel + json_add_string mode "ipip" + json_add_int mtu "${mtu:-1280}" + json_add_int ttl "${ttl:-64}" + [ -n "$tos" ] && json_add_string tos "$tos" + json_add_string local "$ipaddr" + json_add_string remote "$peeraddr" + [ -n "$tunlink" ] && json_add_string link "$tunlink" + json_add_boolean df "${df:-1}" + + proto_close_tunnel + + proto_add_data + [ -n "$zone" ] && json_add_string zone "$zone" + proto_close_data + + proto_send_update "$cfg" +} + +proto_ipip_teardown() { + local cfg="$1" +} + +proto_ipip_init_config() { + no_device=1 + available=1 + + proto_config_add_int "mtu" + proto_config_add_int "ttl" + proto_config_add_string "tos" + proto_config_add_string "tunlink" + proto_config_add_string "zone" + proto_config_add_string "ipaddr" + proto_config_add_string "peeraddr" + proto_config_add_boolean "df" +} + +[ -n "$INCLUDE_ONLY" ] || { + add_protocol ipip +} |