1
1
#! /usr/bin/env bash
2
2
3
+ source /etc/sysconfig/network-scripts/n3000/n3000-common.sh
4
+
5
+ function source_env() {
6
+ if [[ -f " ${env_file} " ]]; then
7
+ echo " INFO: Sourcing env"
8
+ echo " INFO: Source env file content:"
9
+ echo " $( cat ${env_file} ) "
10
+ . " ${env_file} "
11
+ fi
12
+ }
13
+
3
14
function unbind_driver()
4
15
{
5
16
# Expected argument:
@@ -27,15 +38,20 @@ function get_pf0_address() {
27
38
}
28
39
29
40
function get_image_mode {
30
- local env_file=$1
31
- local fpgainfo_file=" /usr/bin/fpgainfo"
41
+ local fpga_loaded_image_file=" /sys/class/fpga/intel-fpga-dev.0/intel-fpga-fme.0/spi-altera.0.auto/spi_master/spi0/spi0.0/fpga_flash_ctrl/fpga_image_load"
42
+
43
+ if [[ ! -f " ${fpga_loaded_image_file} " ]]; then
44
+ # TODO: If this happens, device is in bad state
45
+ echo -n " ERROR: FPGA bad state"
46
+ exit -1
47
+ fi
48
+
49
+ local mode_id=" $( cat ${fpga_loaded_image_file} ) "
32
50
33
- if [[ -f " ${fpgainfo_file} " ]]; then
34
- # plugin container
35
- echo -n " $( /usr/bin/fpgainfo fme | awk ' /Boot Page/ { print $4; }' ) "
51
+ if [[ " ${mode_id} " == " 0" ]]; then
52
+ echo -n " factory"
36
53
else
37
- # agent-dpdk container
38
- echo -n " $( cat ${env_file} | awk -F= ' /N3000_FPGA_MODE_CONFIGURED/ { print $2; }' ) "
54
+ echo -n " user"
39
55
fi
40
56
}
41
57
@@ -119,7 +135,10 @@ function unbind_n3000_xxv710()
119
135
if [[ -d " /sys/bus/pci/devices/${pci_addr} /net" ]]; then
120
136
current_device_ifname=$( ls /sys/bus/pci/devices/${pci_addr} /net 2> /dev/null)
121
137
if [[ -n " ${current_device_ifname} " && -f " /etc/sysconfig/network-scripts/ifcfg-${current_device_ifname} " ]]; then
122
- rm -f /etc/sysconfig/network-scripts/ifcfg-" ${current_device_ifname} "
138
+ echo " INFO: Moving ifcfg for ${current_device_ifname} to ${ifcfg_dir} "
139
+
140
+ [[ ! -f " ${ifcfg_dir} /ifcfg-${current_device_ifname} " ]] && \
141
+ mv -f " /etc/sysconfig/network-scripts/ifcfg-${current_device_ifname} " " ${ifcfg_dir} /ifcfg-${current_device_ifname} "
123
142
fi
124
143
fi
125
144
unbind_driver " ${pci_addr} "
@@ -173,19 +192,6 @@ function get_config() {
173
192
declare -p config
174
193
}
175
194
176
- function store_ifcfg() {
177
- local ifcfg_dir=$1
178
- local ifname=$2
179
-
180
- if [[ ! -f " /etc/sysconfig/network-scripts/ifcfg-$ifname " ]]; then
181
- echo " WARNING: /etc/sysconfig/network-scripts/ifcfg-$ifname not found"
182
- fi
183
-
184
- [[ ! -d " $ifcfg_dir " ]] && mkdir -p " $ifcfg_dir "
185
-
186
- cp " /etc/sysconfig/network-scripts/ifcfg-$ifname " " $ifcfg_dir /ifcfg-$ifname "
187
- }
188
-
189
195
function restore_ifcfg() {
190
196
local ifcfg_dir=$1
191
197
@@ -200,11 +206,13 @@ function restore_ifcfg() {
200
206
local ifile=" $( echo $ifcfg_file | awk -F/ ' { print $NF; }' ) "
201
207
202
208
if [[ -f " /etc/sysconfig/network-scripts/$ifile " ]]; then
203
- echo " WARNING : /etc/sysconfig/network-scripts/$ifile exists - should be absent at this point "
209
+ echo " INFO : /etc/sysconfig/network-scripts/$ifile exists - skipping "
204
210
continue
205
211
fi
206
212
207
213
cp " $ifcfg_file " " /etc/sysconfig/network-scripts/$ifile "
214
+
215
+ echo " INFO: /etc/sysconfig/network-scripts/$ifile restored"
208
216
done
209
217
210
218
shopt -u nullglob
@@ -232,16 +240,14 @@ function preconfig_dataplane() {
232
240
local ifname_key=" phy${i} _ifname"
233
241
local requested_ifname=" ${config[${ifname_key}]} "
234
242
echo " INFO: phy_addr=$phy_addr , ifname found: $phy_ifname , requested ifname: $requested_ifname "
235
-
236
- if [[ " $phy_ifname " != " $requested_ifname " ]]; then
237
- ip link set dev $phy_ifname name $requested_ifname
238
- fi
243
+ ip link set " ${phy_ifname} " down
244
+ ip link set " ${phy_ifname} " name " ${requested_ifname} "
239
245
240
246
set_network_info_for_device " ${requested_ifname} " " ${phy_addr} "
241
247
242
- /usr/sbin/ifup $ requested_ifname
248
+ [ -n " ${N3000_TRIPLEO_L3MH_ROUTE} " ] && echo " ${N3000_TRIPLEO_L3MH_ROUTE} " > " /etc/sysconfig/network-scripts/route- ${ requested_ifname} "
243
249
244
- [[ " ${ifcfg_op} " != " noop " ]] && store_ifcfg " $ifcfg_dir " " $ requested_ifname"
250
+ /usr/sbin/ifup $ requested_ifname
245
251
done
246
252
}
247
253
@@ -253,15 +259,18 @@ function preconfig_dataplane() {
253
259
if [[ $phy_id == " 0" || $phy_id == " 1" ]]; then
254
260
local phy_addr=" $( lspci -d :0d58 -D | awk ' {print $1}' | awk " NR == $(( phy_id + 1 )) " ) "
255
261
local phy_ifname=$( realpath -e /sys/bus/pci/devices/${phy_addr} /net/* 2> /dev/null | awk -F/ ' {print $NF}' )
262
+ local requested_ifname=" ${PHYSICAL_INTERFACE} "
263
+ if [[ -z " ${PHYSICAL_INTERFACE} " ]]; then
264
+ requested_ifname=" $( cat /var/run/vrouter/nic) "
265
+ fi
256
266
267
+ echo " INFO: phy_addr=$phy_addr , ifname found: $phy_ifname , requested ifname: $requested_ifname "
257
268
ip link set " ${phy_ifname} " down
258
- ip link set " ${phy_ifname} " name " ${PHYSICAL_INTERFACE } "
269
+ ip link set " ${phy_ifname} " name " ${requested_ifname } "
259
270
260
- set_network_info_for_device " ${PHYSICAL_INTERFACE} " " ${phy_addr} "
261
-
262
- ip link set " ${PHYSICAL_INTERFACE} " up
271
+ set_network_info_for_device " ${requested_ifname} " " ${phy_addr} "
263
272
264
- [[ " ${ifcfg_op} " != " noop " ]] && store_ifcfg " $ifcfg_dir " " ${PHYSICAL_INTERFACE} "
273
+ ip link set " ${requested_ifname} " up
265
274
fi
266
275
}
267
276
@@ -270,15 +279,18 @@ function preconfig_dataplane() {
270
279
271
280
local phy_addr=" $( lspci -d :0d58 -D | awk ' {print $1}' | awk " NR == 1" ) "
272
281
local phy_ifname=$( realpath -e /sys/bus/pci/devices/${phy_addr} /net/* 2> /dev/null | awk -F/ ' {print $NF}' )
282
+ local requested_ifname=" ${PHYSICAL_INTERFACE} "
283
+ if [[ -z " ${PHYSICAL_INTERFACE} " ]]; then
284
+ requested_ifname=" $( cat /var/run/vrouter/nic) "
285
+ fi
273
286
287
+ echo " INFO: phy_addr=$phy_addr , ifname found: $phy_ifname , requested ifname: $requested_ifname "
274
288
ip link set " ${phy_ifname} " down
275
- ip link set " ${phy_ifname} " name " ${PHYSICAL_INTERFACE} "
276
-
277
- set_network_info_for_device " ${PHYSICAL_INTERFACE} " " ${phy_addr} "
289
+ ip link set " ${phy_ifname} " name " ${requested_ifname} "
278
290
279
- ip link set " ${PHYSICAL_INTERFACE } " up
291
+ set_network_info_for_device " ${requested_ifname } " " ${phy_addr} "
280
292
281
- [[ " ${ifcfg_op} " != " noop " ]] && store_ifcfg " $ifcfg_dir " " ${PHYSICAL_INTERFACE} "
293
+ ip link set " ${requested_ifname} " up
282
294
}
283
295
284
296
local ifcfg_op=$1
@@ -296,6 +308,8 @@ function preconfig_dataplane() {
296
308
echo " INFO: Config:"
297
309
declare -p config
298
310
311
+ [[ " ${ifcfg_op} " == " restore" ]] && restore_ifcfg " $ifcfg_dir "
312
+
299
313
prepare_$config_type
300
314
}
301
315
@@ -340,7 +354,7 @@ function verify_user_mode_config {
340
354
function switch_fpga_mode() {
341
355
local requested_mode=$1
342
356
local env_file=$2
343
- local found_mode=$( get_image_mode " ${env_file} " )
357
+ local found_mode=" $( get_image_mode) "
344
358
345
359
if [[ " ${found_mode} " == " user" ]]; then
346
360
local user_mode_config=" $( verify_user_mode_config) "
@@ -358,26 +372,26 @@ function switch_fpga_mode() {
358
372
# However the deployment logic requires to only switch between modes -
359
373
# that is: factory to known user mode state and unknown user mode to factory mode.
360
374
# so there is no need for a logic for unknown user mode state to known user mode state
375
+ echo " INFO: ${requested_mode} mode already present"
361
376
return
362
377
fi
363
378
364
379
N3000_SWITCH_MODE=" ${requested_mode} " /etc/sysconfig/network-scripts/n3000/n3000-mode-manager.sh
380
+ }
365
381
366
- if [[ -n " $( grep N3000_FPGA_MODE_CONFIGURED ${env_file} ) " ]]; then
367
- sed -i " s/N3000_FPGA_MODE_CONFIGURED=*/N3000_FPGA_MODE_CONFIGURED=${requested_mode} /g" ${env_file}
368
- else
369
- echo " N3000_FPGA_MODE_CONFIGURED=${requested_mode} " >> ${env_file}
370
- fi
382
+ function rebind_factory {
383
+ local driver=$1
384
+ for i in $( seq 1 2) ; do
385
+ phy_addr=$( lspci -d :0d58 -D | awk ' {print $1}' | awk " NR == $i " )
386
+
387
+ override_driver " ${phy_addr} " " ${driver} "
388
+ done
371
389
}
372
390
373
391
function setup_factory_mode {
374
392
local env_file=$1
375
393
376
394
switch_fpga_mode " factory" " ${env_file} "
377
395
378
- for i in $( seq 1 2) ; do
379
- phy_addr=$( lspci -d :0d58 -D | awk ' {print $1}' | awk " NR == $i " )
380
-
381
- override_driver " ${phy_addr} " " i40e"
382
- done
396
+ rebind_factory " i40e"
383
397
}
0 commit comments