@@ -35,74 +35,62 @@ let write_config () =
35
35
try Network_config. write_config ! config
36
36
with Network_config. Write_error -> ()
37
37
38
- let sort_and_update () =
39
- if Network_utils. device_already_renamed then
40
- ()
41
- else
42
- let last_config = ! config in
43
- let last_interface_order =
44
- Option. value ~default: [] last_config.interface_order
45
- in
46
- match Network_device_order. sort last_interface_order with
47
- | Ok (new_order , changed_interfaces ) ->
48
- let update_name name =
49
- List. assoc_opt name changed_interfaces |> Option. value ~default: name
50
- in
51
- let update_port (port , port_conf ) =
52
- ( update_name port
53
- , {
54
- port_conf with
55
- interfaces= List. map update_name port_conf.interfaces
56
- }
57
- )
58
- in
59
- let bridge_config =
60
- List. map
61
- (fun (bridge , bridge_conf ) ->
62
- ( bridge
63
- , {bridge_conf with ports= List. map update_port bridge_conf.ports}
64
- )
65
- )
66
- last_config.bridge_config
67
- in
68
- let interface_config =
69
- List. map
70
- (fun (name , conf ) -> (update_name name, conf))
71
- last_config.interface_config
72
- in
73
- config :=
74
- {
75
- last_config with
76
- interface_config
77
- ; bridge_config
78
- ; interface_order= Some new_order
79
- }
80
- | Error err ->
81
- error " Failed to sort interface order [%s]"
82
- (Network_device_order. string_of_error err)
83
-
84
- let sort_on_first_boot () =
85
- if Network_utils. device_already_renamed then
86
- None
87
- else
88
- match Network_device_order. sort [] with
89
- | Ok (sorted , _ ) ->
90
- Some sorted
38
+ let sort last_order =
39
+ match last_order with
40
+ | Some last_order -> (
41
+ match Network_device_order. sort last_order with
42
+ | Ok (interface_order , changes ) ->
43
+ (Some interface_order, changes)
91
44
| Error err ->
92
45
error " Failed to sort interface order [%s]"
93
46
(Network_device_order. string_of_error err) ;
94
- Some []
47
+ (Some last_order, [] )
48
+ )
49
+ | None ->
50
+ (None , [] )
95
51
96
- let build_config () =
52
+ let update_changes last_config changed_interfaces =
53
+ let update_name name =
54
+ let new_name =
55
+ List. assoc_opt name changed_interfaces |> Option. value ~default: name
56
+ in
57
+ if name <> new_name then
58
+ debug " Renaming %s to %s" name new_name ;
59
+ new_name
60
+ in
61
+ let update_port (port , port_conf ) =
62
+ ( update_name port
63
+ , {port_conf with interfaces= List. map update_name port_conf.interfaces}
64
+ )
65
+ in
66
+ let bridge_config =
67
+ List. map
68
+ (fun (bridge , bridge_conf ) ->
69
+ ( bridge
70
+ , {bridge_conf with ports= List. map update_port bridge_conf.ports}
71
+ )
72
+ )
73
+ last_config.bridge_config
74
+ in
75
+ let interface_config =
76
+ List. map
77
+ (fun (name , conf ) -> (update_name name, conf))
78
+ last_config.interface_config
79
+ in
80
+ (bridge_config, interface_config)
81
+
82
+ let read_config () =
97
83
try
98
84
config := Network_config. read_config () ;
99
85
debug " Read configuration from networkd.db file." ;
100
- sort_and_update ()
86
+ let interface_order, changes = sort ! config.interface_order in
87
+ let bridge_config, interface_config = update_changes ! config changes in
88
+ config := {! config with bridge_config; interface_config; interface_order}
101
89
with Network_config. Read_error -> (
102
90
try
103
91
(* No configuration file found. Try to get the initial network setup from
104
92
* the first-boot data written by the host installer. *)
105
- let interface_order = sort_on_first_boot () in
93
+ let interface_order, _ = sort Network_config. initial_interface_order in
106
94
config := Network_config. read_management_conf interface_order ;
107
95
debug " Read configuration from management.conf file."
108
96
with Network_config. Read_error ->
@@ -148,7 +136,7 @@ let sync_state () =
148
136
write_config ()
149
137
150
138
let reset_state () =
151
- let interface_order = sort_on_first_boot () in
139
+ let interface_order, _ = sort Network_config. initial_interface_order in
152
140
config := Network_config. read_management_conf interface_order
153
141
154
142
let set_gateway_interface _dbg name =
@@ -352,16 +340,18 @@ module Interface = struct
352
340
let get_interface_positions dbg () =
353
341
Debug. with_thread_associated dbg
354
342
(fun () ->
355
- if Network_utils. device_already_renamed then
356
- sort_based_on_ethx ()
357
- else
358
- Option. value ~default: [] ! config.interface_order
359
- |> List. filter_map (fun dev ->
360
- if dev.present then
361
- Some (dev.name, dev.position)
362
- else
363
- None
364
- )
343
+ match ! config.interface_order with
344
+ | Some order ->
345
+ List. filter_map
346
+ (fun dev ->
347
+ if dev.present then
348
+ Some (dev.name, dev.position)
349
+ else
350
+ None
351
+ )
352
+ order
353
+ | None ->
354
+ sort_based_on_ethx ()
365
355
)
366
356
()
367
357
@@ -1667,7 +1657,7 @@ let on_startup () =
1667
1657
in
1668
1658
try
1669
1659
(* the following is best-effort *)
1670
- build_config () ;
1660
+ read_config () ;
1671
1661
remove_centos_config () ;
1672
1662
if ! backend_kind = Openvswitch then
1673
1663
Ovs. set_max_idle 5000 ;
0 commit comments