summaryrefslogtreecommitdiff
path: root/templates/interfaces/vxlan/node.def
blob: 150fe3ec514a52f577acbcdb114b0565d0d23be1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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