tag: priority: 380 type: txt help: Tunnel interface val_help: ; Tunnel interface name syntax:expression: pattern $VAR(@) "^tun[0-9]+$" \ ; "tunnel must be (tun0-tun999)" commit:expression: $VAR(./local-ip/) != "" || $VAR(./dhcp-interface/) != ""; \ "Must configure either local-ip or dhcp-interface for tunnel $VAR(@)" commit:expression: $VAR(./local-ip/) == "" || $VAR(./dhcp-interface/) == ""; \ "Must configure only one of local-ip or dhcp-interface for tunnel $VAR(@)" commit:expression: $VAR(./encapsulation/) != "" ; \ "Must configure the tunnel encapsulation for $VAR(@)" commit:expression: exec " if [ $VAR(./encapsulation/@) = gre ] && [ ! -n \"$VAR(./remote-ip/)\" ]; then \ echo \"No remote-ip configured for $VAR(@), tunnel can only be used for mGRE.\"; \ fi; \ if [ -n \"$VAR(./6rd-prefix/)\" ]; then \ if [ $VAR(./encapsulation/@) != sit ]; then \ echo \"6rd-prefix can only be set for SIT tunnels\"; \ exit 1; \ fi \ fi; \ if [ $VAR(./encapsulation/@) != gre ] && [ ! -n \"$VAR(./remote-ip/)\" ]; then \ echo \"Must configure the tunnel remote-ip for $VAR(@)\"; \ exit 1; \ fi; exit 0" commit:expression: (!(pattern $VAR(./local-ip/@) ".*:.*") && $VAR(./encapsulation/@) == "gre" && $VAR(./remote-ip/) == "") || \ $VAR(./encapsulation/@) != "gre" || ($VAR(./encapsulation/@) == "gre" && $VAR(./remote-ip/) != ""); "IPv6 local-ip ($VAR(./local-ip/@)) is forbidden for mGRE tunnels." commit:expression: (!(pattern $VAR(./address/@@) ".*:.*") && $VAR(./encapsulation/@) == "gre" && $VAR(./remote-ip/) == "") || \ $VAR(./encapsulation/@) != "gre" || ($VAR(./encapsulation/@) == "gre" && $VAR(./remote-ip/) != ""); "IPv6 addresses ($VAR(./address/@@)) are forbidden for mGRE tunnels." create: if [ $VAR(./encapsulation/@) == gre ] && [ -z $VAR(./remote-ip/) ]; then sudo invoke-rc.d opennhrp.init start; fi if [ x$VAR(./multicast/@) == xenable ]; then MC="multicast on allmulticast on"; fi if [ -n "$VAR(./local-ip/@)" ]; then LIP=$VAR(./local-ip/@) else LIP=$(/opt/vyatta/sbin/vyatta-dhcp-helper.pl --interface=$VAR(./dhcp-interface/@) --want=local) fi case "$VAR(./encapsulation/@)" in "gre" | "ipip" | "sit") if [ -n "$VAR(./parameters/ip/bridge-group/)" ] ; then echo "interfaces tunnel $VAR(@): Tunnel encapsulation type must be gre-bridge if a bridge group is defined"; exit 1; fi if [ -n "$VAR(./parameters/ip/tos/@)" ]; then TOS="tos $VAR(./parameters/ip/tos/@)" else TOS="tos inherit" fi if [ -n "$VAR(./parameters/ip/ttl/@)" ]; then TTL="ttl $VAR(./parameters/ip/ttl/@)" else TTL="ttl 255" fi if [ -n "$VAR(./parameters/ip/key/@)" ]; then KEY="key $VAR(./parameters/ip/key/@)" fi if [ "$VAR(./encapsulation/@)" == "gre" ] && [ -z $VAR(./remote-ip/) ]; then sudo ip tunnel add $VAR(@) local $LIP mode gre $KEY $TTL $TOS elif [ "$VAR(./encapsulation/@)" == "sit" ] && [ -n "$VAR(./6rd-prefix/@)" ]; then if [ -n "$VAR(./6rd-relay-prefix/@)" ]; then RP="6rd-relay_prefix $VAR(./6rd-relay-prefix/@)" fi sudo ip tunnel add $VAR(@) remote $VAR(./remote-ip/@) mode sit sudo ip tunnel 6rd dev $VAR(@) 6rd-prefix $VAR(./6rd-prefix/@) $RP else sudo ip tunnel add $VAR(@) local $LIP remote $VAR(./remote-ip/@) mode $VAR(./encapsulation/@) $KEY $TTL $TOS fi if [ -z "`ip tunnel show | grep $VAR(@)`" ]; then echo interfaces tunnel $VAR(@): error creating tunnel interface exit 1 fi ;; "gre-bridge") sudo ip link add $VAR(@) type gretap local $LIP remote $VAR(./remote-ip/@) || echo "interfaces tunnel $VAR(@): error creating tunnel interface" ;; "ipip6" | "ip6ip6") sudo ip -6 tunnel add $VAR(@) local $LIP remote $VAR(./remote-ip/@) mode $VAR(./encapsulation/@) || echo "interfaces tunnel $VAR(@): error creating tunnel interface" ;; esac sudo ip link set $VAR(@) $MC up || echo "interfaces tunnel $VAR(@): error setting tunnel interface active" delete: /opt/vyatta/sbin/vyos-update-nhrp.pl --checkref --tun $VAR(@) sudo ip link set $VAR(@) down case "$VAR(./encapsulation/@)" in "gre" | "ipip" | "sit") if [ -z $VAR(./remote-ip/) ]; then sudo ip tunnel del $VAR(@) mode gre else sudo ip tunnel del $VAR(@) mode $VAR(./encapsulation/@) fi;; "gre-bridge") sudo ip link delete $VAR(@) ;; "ipip6" | "ip6ip6") sudo ip -6 tunnel del $VAR(@) mode $VAR(./encapsulation/@);; esac end: if [ "${COMMIT_ACTION}" == DELETE ]; then /opt/vyatta/sbin/vyatta-tunnel-cleanup $VAR(@) fi