tag:
priority: 460
type: txt
help: Virtual eXtensible LAN interface
val_help: <vxlanN>; VXLAN interface name
syntax:expression: pattern $VAR(@) "vxlan[0-9]+$"

commit:expression: $VAR(./vni/) != "";			\
		   "Must configure vxlan vni for $VAR(@)"

begin:
  [ -d /sys/module/vxlan ] || sudo modprobe vxlan


create:
  if [ -e /sys/class/net/$VAR(@) ]; then
    echo "VXLAN interface \"$VAR(@)\" already exists."
    exit 1
  fi

  VXLAN_GROUP=""
  VXLAN_VNI="id $VAR(./vni/@)"
  VXLAN_TTL="ttl 16"

  if [ ! $VAR(./link/) == "" ]; then
    VXLAN_DEV="dev $VAR(./link/@)"
  fi

  if [ ! $VAR(./group/) == "" ]; then
    VXLAN_GROUP="group $VAR(./group/@)"
  fi

  if [ ! $VAR(./remote/) == "" ]; then
    VXLAN_GROUP="remote $VAR(./remote/@)"
  fi

  if [ -z "$VXLAN_GROUP" ]; then
    echo "group or remote must be configured."
    exit 1
  fi

  ip link add name $VAR(@) type vxlan 	\
	$VXLAN_VNI $VXLAN_GROUP $VXLAN_TTL $VXLAN_DEV
  ip link set $VAR(@) up

  touch /tmp/vxlan-$VAR(@)-create


delete:
  if [ ! -e /sys/class/net/$VAR(@) ]; then
    echo "VXLAN interface \"$VAR(@)\" does not exist."
  else
    ip link del dev $VAR(@)
  fi


end:
  if [ -e /tmp/vxlan-$VAR(@)-create ]; then
    rm /tmp/vxlan-$VAR(@)-create
  fi
