@@ -26,150 +26,147 @@ usage() {
2626}
2727
2828addVxlan () {
29- local vxlanId=$1
30- local pif=$2
31- local vxlanDev=vxlan$vxlanId
32- local vxlanBr=$3
33- local mcastGrp=" 239.$(( ($vxlanId >> 16 ) % 256 )) .$(( ($vxlanId >> 8 ) % 256 )) .$(( $vxlanId % 256 )) "
34-
35- # # TODO(VXLAN): $brif (trafficlabel) should be passed from caller because we cannot assume 1:1 mapping between pif and brif.
36- # lookup bridge interface
37- local sysfs_dir=/sys/devices/virtual/net/
38- local brif=` find ${sysfs_dir} * /brif/ -name $pif | sed -e " s,$sysfs_dir ,," | sed -e ' s,/brif/.*$,,' `
39-
40- if [ " $brif " == " " ]
41- then
42- if [ -d " /sys/class/net/${pif} " ]
43- then
44- # if bridge is not found, but matches a pif, use it
45- brif=$pif
46- else
47- printf " Failed to lookup bridge interface which includes pif: $pif ."
48- return 1
49- fi
50- else
51- # confirm ip address of $brif
52- ip addr show $brif | grep -w inet
53- if [ $? -gt 0 ]
54- then
55- printf " Failed to find vxlan multicast source ip address on brif: $brif ."
56- return 1
57- fi
58- fi
59-
60- # mcast route
61- # # TODO(VXLAN): Can we assume there're only one IP address which can be multicast src IP on the IF?
62- ip route get $mcastGrp | grep -w " dev $brif "
63- if [ $? -gt 0 ]
64- then
65- ip route add $mcastGrp /32 dev $brif
66- if [ $? -gt 0 ]
67- then
68- printf " Failed to add vxlan multicast route on brif: $brif ."
69- return 1
70- fi
71- fi
72-
73- if [ ! -d /sys/class/net/$vxlanDev ]
74- then
75- ip link add $vxlanDev type vxlan id $vxlanId group $mcastGrp ttl 10 dev $brif
76-
77- if [ $? -gt 0 ]
78- then
79- # race condition that someone already creates the vxlan
80- if [ ! -d /sys/class/net/$vxlanDev ]
81- then
82- printf " Failed to create vxlan $vxlanId on brif: $brif ."
83- return 1
84- fi
85- fi
86- fi
87-
88- # is up?
89- ip link show $vxlanDev | grep -w UP > /dev/null
90- if [ $? -gt 0 ]
91- then
92- ip link set $vxlanDev up > /dev/null
93- fi
94-
95- if [ ! -d /sys/class/net/$vxlanBr ]
96- then
97- brctl addbr $vxlanBr > /dev/null
98-
99- if [ $? -gt 0 ]
100- then
101- if [ ! -d /sys/class/net/$vxlanBr ]
102- then
103- printf " Failed to create br: $vxlanBr "
104- return 2
105- fi
106- fi
107-
108- brctl setfd $vxlanBr 0
109- fi
110-
111- # pif is eslaved into vxlanBr?
112- ls /sys/class/net/$vxlanBr /brif/ | grep -w " $vxlanDev " > /dev/null
113- if [ $? -gt 0 ]
114- then
115- brctl addif $vxlanBr $vxlanDev > /dev/null
116- if [ $? -gt 0 ]
117- then
118- ls /sys/class/net/$vxlanBr /brif/ | grep -w " $vxlanDev " > /dev/null
119- if [ $? -gt 0 ]
120- then
121- printf " Failed to add vxlan: $vxlanDev to $vxlanBr "
122- return 3
123- fi
124- fi
125- fi
126-
127- # is vxlanBr up?
128- ip link show $vxlanBr | grep -w UP > /dev/null
129- if [ $? -gt 0 ]
130- then
131- ip link set $vxlanBr up
132- fi
133-
134- return 0
29+ local vxlanId=$1
30+ local pif=$2
31+ local vxlanDev=vxlan$vxlanId
32+ local vxlanBr=$3
33+ local mcastGrp=" 239.$(( ($vxlanId >> 16 ) % 256 )) .$(( ($vxlanId >> 8 ) % 256 )) .$(( $vxlanId % 256 )) "
34+
35+ # # TODO(VXLAN): $brif (trafficlabel) should be passed from caller because we cannot assume 1:1 mapping between pif and brif.
36+ # lookup bridge interface
37+ local sysfs_dir=/sys/devices/virtual/net/
38+ local brif=` find ${sysfs_dir} * /brif/ -name $pif | sed -e " s,$sysfs_dir ,," | sed -e ' s,/brif/.*$,,' `
39+
40+ if [ " $brif " == " " ]
41+ then
42+ if [ -d " /sys/class/net/${pif} " ]
43+ then
44+ # if bridge is not found, but matches a pif, use it
45+ brif=$pif
46+ else
47+ printf " Failed to lookup bridge interface which includes pif: $pif ."
48+ return 1
49+ fi
50+ else
51+ # confirm ip address of $brif
52+ ip addr show $brif | grep -w inet
53+ if [ $? -gt 0 ]
54+ then
55+ printf " Failed to find vxlan multicast source ip address on brif: $brif ."
56+ return 1
57+ fi
58+ fi
59+
60+ # mcast route
61+ # # TODO(VXLAN): Can we assume there're only one IP address which can be multicast src IP on the IF?
62+ ip route get $mcastGrp | grep -w " dev $brif "
63+ if [ $? -gt 0 ]
64+ then
65+ ip route add $mcastGrp /32 dev $brif
66+ if [ $? -gt 0 ]
67+ then
68+ printf " Failed to add vxlan multicast route on brif: $brif ."
69+ return 1
70+ fi
71+ fi
72+
73+ if [ ! -d /sys/class/net/$vxlanDev ]
74+ then
75+ ip link add $vxlanDev type vxlan id $vxlanId group $mcastGrp ttl 10 dev $brif
76+ if [ $? -gt 0 ]
77+ then
78+ # race condition that someone already creates the vxlan
79+ if [ ! -d /sys/class/net/$vxlanDev ]
80+ then
81+ printf " Failed to create vxlan $vxlanId on brif: $brif ."
82+ return 1
83+ fi
84+ fi
85+ fi
86+
87+ # is up?
88+ ip link show $vxlanDev | grep -w UP > /dev/null
89+ if [ $? -gt 0 ]
90+ then
91+ ip link set $vxlanDev up > /dev/null
92+ fi
93+
94+ if [ ! -d /sys/class/net/$vxlanBr ]
95+ then
96+ brctl addbr $vxlanBr > /dev/null
97+ if [ $? -gt 0 ]
98+ then
99+ if [ ! -d /sys/class/net/$vxlanBr ]
100+ then
101+ printf " Failed to create br: $vxlanBr "
102+ return 2
103+ fi
104+ fi
105+ brctl setfd $vxlanBr 0
106+ fi
107+
108+ # pif is eslaved into vxlanBr?
109+ ls /sys/class/net/$vxlanBr /brif/ | grep -w " $vxlanDev " > /dev/null
110+ if [ $? -gt 0 ]
111+ then
112+ brctl addif $vxlanBr $vxlanDev > /dev/null
113+ if [ $? -gt 0 ]
114+ then
115+ ls /sys/class/net/$vxlanBr /brif/ | grep -w " $vxlanDev " > /dev/null
116+ if [ $? -gt 0 ]
117+ then
118+ printf " Failed to add vxlan: $vxlanDev to $vxlanBr "
119+ return 3
120+ fi
121+ fi
122+ fi
123+
124+ # is vxlanBr up?
125+ ip link show $vxlanBr | grep -w UP > /dev/null
126+ if [ $? -gt 0 ]
127+ then
128+ ip link set $vxlanBr up
129+ fi
130+
131+ return 0
135132}
136133
137134deleteVxlan () {
138- local vxlanId=$1
139- local pif=$2
140- local vxlanDev=vxlan$vxlanId
141- local vxlanBr=$3
142- local mcastGrp=" 239.$(( ($vxlanId >> 16 ) % 256 )) .$(( ($vxlanId >> 8 ) % 256 )) .$(( $vxlanId % 256 )) "
143-
144- local sysfs_dir=/sys/devices/virtual/net/
145- local brif=` find ${sysfs_dir} * /brif/ -name $pif | sed -e " s,$sysfs_dir ,," | sed -e ' s,/brif/.*$,,' `
146-
147- ip route del $mcastGrp /32 dev $brif
148-
149- ip link delete $vxlanDev
150-
151- if [ $? -gt 0 ]
152- then
153- printf " Failed to del vxlan: $vxlanId "
154- printf " Continue..."
155- fi
156-
157- ip link set $vxlanBr down
158-
159- if [ $? -gt 0 ]
160- then
161- return 1
162- fi
163-
164- brctl delbr $vxlanBr
165-
166- if [ $? -gt 0 ]
167- then
168- printf " Failed to del bridge $vxlanBr "
169- return 1
170- fi
171-
172- return 0
135+ local vxlanId=$1
136+ local pif=$2
137+ local vxlanDev=vxlan$vxlanId
138+ local vxlanBr=$3
139+ local mcastGrp=" 239.$(( ($vxlanId >> 16 ) % 256 )) .$(( ($vxlanId >> 8 ) % 256 )) .$(( $vxlanId % 256 )) "
140+
141+ local sysfs_dir=/sys/devices/virtual/net/
142+ local brif=` find ${sysfs_dir} * /brif/ -name $pif | sed -e " s,$sysfs_dir ,," | sed -e ' s,/brif/.*$,,' `
143+
144+ ip route del $mcastGrp /32 dev $brif
145+
146+ ip link delete $vxlanDev
147+
148+ if [ $? -gt 0 ]
149+ then
150+ printf " Failed to del vxlan: $vxlanId "
151+ printf " Continue..."
152+ fi
153+
154+ ip link set $vxlanBr down
155+
156+ if [ $? -gt 0 ]
157+ then
158+ return 1
159+ fi
160+
161+ brctl delbr $vxlanBr
162+
163+ if [ $? -gt 0 ]
164+ then
165+ printf " Failed to del bridge $vxlanBr "
166+ return 1
167+ fi
168+
169+ return 0
173170}
174171
175172op=
@@ -179,61 +176,60 @@ option=$@
179176while getopts ' o:v:p:b:' OPTION
180177do
181178 case $OPTION in
182- o) oflag=1
183- op=" $OPTARG "
184- ;;
185- v) vflag=1
186- vxlanId=" $OPTARG "
187- ;;
188- p) pflag=1
189- pif=" $OPTARG "
190- ;;
191- b) bflag=1
192- brName=" $OPTARG "
193- ;;
194- ? ) usage
195- exit 2
196- ;;
179+ o) oflag=1
180+ op=" $OPTARG "
181+ ;;
182+ v) vflag=1
183+ vxlanId=" $OPTARG "
184+ ;;
185+ p) pflag=1
186+ pif=" $OPTARG "
187+ ;;
188+ b) bflag=1
189+ brName=" $OPTARG "
190+ ;;
191+ ? ) usage
192+ exit 2
193+ ;;
197194 esac
198195done
199196
200197# Check that all arguments were passed in
201198if [ " $oflag$vflag$pflag$bflag " != " 1111" ]
202199then
203- usage
204- exit 2
200+ usage
201+ exit 2
205202fi
206203
207204# Do we support Vxlan?
208205lsmod| grep ^vxlan >& /dev/null
209206if [ $? -gt 0 ]
210207then
211- modprobe=` modprobe vxlan 2>&1 `
212- if [ $? -gt 0 ]
213- then
214- printf " Failed to load vxlan kernel module: $modprobe "
215- exit 1
216- fi
208+ modprobe=` modprobe vxlan 2>&1 `
209+ if [ $? -gt 0 ]
210+ then
211+ printf " Failed to load vxlan kernel module: $modprobe "
212+ exit 1
213+ fi
217214fi
218215
219216if [ " $op " == " add" ]
220217then
221- # Add the vxlan
222- addVxlan $vxlanId $pif $brName
223-
224- # If the add fails then return failure
225- if [ $? -gt 0 ]
226- then
227- exit 1
228- fi
218+ # Add the vxlan
219+ addVxlan $vxlanId $pif $brName
220+
221+ # If the add fails then return failure
222+ if [ $? -gt 0 ]
223+ then
224+ exit 1
225+ fi
229226else
230- if [ " $op " == " delete" ]
231- then
232- # Delete the vxlan
233- deleteVxlan $vxlanId $pif $brName
234-
235- # Always exit with success
236- exit 0
237- fi
227+ if [ " $op " == " delete" ]
228+ then
229+ # Delete the vxlan
230+ deleteVxlan $vxlanId $pif $brName
231+
232+ # Always exit with success
233+ exit 0
234+ fi
238235fi
239-
0 commit comments