Page Menu
Home
VyOS Platform
Search
Configure Global Search
Log In
Files
F118306836
0-to-1
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
0-to-1
View Options
#!/usr/bin/env python3
# Change syntax of bridge interface
# - move interface based bridge-group to actual bridge (de-nest)
# - make stp and igmp-snooping nodes valueless
# https://phabricator.vyos.net/T1556
import
sys
from
vyos.configtree
import
ConfigTree
if
(
len
(
sys
.
argv
)
<
1
):
print
(
"Must specify file name!"
)
sys
.
exit
(
1
)
file_name
=
sys
.
argv
[
1
]
with
open
(
file_name
,
'r'
)
as
f
:
config_file
=
f
.
read
()
config
=
ConfigTree
(
config_file
)
base
=
[
'interfaces'
,
'bridge'
]
if
not
config
.
exists
(
base
):
# Nothing to do
sys
.
exit
(
0
)
else
:
#
# make stp and igmp-snooping nodes valueless
#
for
br
in
config
.
list_nodes
(
base
):
# STP: check if enabled
if
config
.
exists
(
base
+
[
br
,
'stp'
]):
stp_val
=
config
.
return_value
(
base
+
[
br
,
'stp'
])
# STP: delete node with old syntax
config
.
delete
(
base
+
[
br
,
'stp'
])
# STP: set new node - if enabled
if
stp_val
==
"true"
:
config
.
set
(
base
+
[
br
,
'stp'
],
value
=
None
)
# igmp-snooping: check if enabled
if
config
.
exists
(
base
+
[
br
,
'igmp-snooping'
,
'querier'
]):
igmp_val
=
config
.
return_value
(
base
+
[
br
,
'igmp-snooping'
,
'querier'
])
# igmp-snooping: delete node with old syntax
config
.
delete
(
base
+
[
br
,
'igmp-snooping'
,
'querier'
])
# igmp-snooping: set new node - if enabled
if
igmp_val
==
"enable"
:
config
.
set
(
base
+
[
br
,
'igmp'
,
'querier'
],
value
=
None
)
#
# move interface based bridge-group to actual bridge (de-nest)
#
bridge_types
=
[
'bonding'
,
'ethernet'
,
'l2tpv3'
,
'openvpn'
,
'vxlan'
,
'wireless'
]
for
type
in
bridge_types
:
if
not
config
.
exists
([
'interfaces'
,
type
]):
continue
for
intf
in
config
.
list_nodes
([
'interfaces'
,
type
]):
# check if bridge-group exists
if
config
.
exists
([
'interfaces'
,
type
,
intf
,
'bridge-group'
]):
bridge
=
config
.
return_value
([
'interfaces'
,
type
,
intf
,
'bridge-group'
,
'bridge'
])
# create new bridge member interface
config
.
set
(
base
+
[
bridge
,
'member'
,
'interface'
,
intf
])
# format as tag node to avoid loading problems
config
.
set_tag
(
base
+
[
bridge
,
'member'
,
'interface'
])
# cost: migrate if configured
if
config
.
exists
([
'interfaces'
,
type
,
intf
,
'bridge-group'
,
'cost'
]):
cost
=
config
.
return_value
([
'interfaces'
,
type
,
intf
,
'bridge-group'
,
'cost'
])
# set new node
config
.
set
(
base
+
[
bridge
,
'member'
,
'interface'
,
intf
,
'cost'
],
value
=
cost
)
if
config
.
exists
([
'interfaces'
,
type
,
intf
,
'bridge-group'
,
'priority'
]):
priority
=
config
.
return_value
([
'interfaces'
,
type
,
intf
,
'bridge-group'
,
'priority'
])
# set new node
config
.
set
(
base
+
[
bridge
,
'member'
,
'interface'
,
intf
,
'priority'
],
value
=
priority
)
# Delete the old bridge-group assigned to an interface
config
.
delete
([
'interfaces'
,
type
,
intf
,
'bridge-group'
])
try
:
with
open
(
file_name
,
'w'
)
as
f
:
f
.
write
(
config
.
to_string
())
except
OSError
as
e
:
print
(
"Failed to save the modified config:
{}
"
.
format
(
e
))
sys
.
exit
(
1
)
File Metadata
Details
Attached
Mime Type
text/x-script.python
Expires
Sat, Oct 17, 12:21 AM (9 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4402455
Default Alt Text
0-to-1 (3 KB)
Attached To
Mode
rVYOSONEX vyos-1x
Attached
Detach File
Event Timeline
Log In to Comment