]>
git.proxmox.com Git - mirror_ifupdown2.git/blob - ifupdown2/ifupdownaddons/mstpctlutil.py
3 # Copyright 2014 Cumulus Networks, Inc. All rights reserved.
4 # Author: Roopa Prabhu, roopa@cumulusnetworks.com
7 from utilsbase
import *
8 from ifupdown
.iface
import *
12 class mstpctlutil(utilsBase
):
13 """ This class contains helper methods to interact with mstpd using
14 mstputils commands """
16 _cache_fill_done
= False
18 _bridgeattrmap
= {'bridgeid' : 'bridge-id',
20 'fdelay' : 'forward-delay',
21 'txholdcount' : 'tx-hold-count',
22 'maxhops' : 'max-hops',
23 'ageing' : 'ageing-time',
24 'hello' : 'hello-time',
25 'forcevers' : 'force-protocol-version'}
27 _bridgeportattrmap
= {'portadminedge' : 'admin-edge-port',
28 'portp2p' : 'admin-point-to-point',
29 'portrestrrole' : 'restricted-role',
30 'portrestrtcn' : 'restricted-TCN',
31 'bpduguard' : 'bpdu-guard-port',
32 'portautoedge' : 'auto-edge-port',
33 'portnetwork' : 'network-port',
34 'portbpdufilter' : 'bpdufilter-port'}
36 def __init__(self
, *args
, **kargs
):
37 utilsBase
.__init
__(self
, *args
, **kargs
)
39 def is_mstpd_running(self
):
41 self
.exec_command('/bin/pidof mstpd')
47 def get_bridgeport_attr(self
, bridgename
, portname
, attrname
):
49 return self
.subprocess_check_output(['/sbin/mstpctl',
50 'showportdetail', '%s' %bridgename
, '%s' %portname
,
51 self
._bridgeportattrmap
[attrname
]]).strip('\n')
56 def get_bridgeport_attrs(self
, bridgename
, portname
):
59 bridgeattrs
= dict((k
, self
.get_bridgeport_attr(bridgename
, v
))
60 for k
, v
in self
._bridgeattrmap
.items())
61 bridgeattrs
['treeprio'] = int(bridgeattrs
.get('bridgeid',
62 '').split('.')[0], base
=16) * 4096
64 self
.logger
.warn(str(e
))
68 def set_bridgeport_attrs(self
, bridgename
, bridgeportname
, attrdict
,
70 for k
, v
in attrdict
.iteritems():
74 self
.set_bridgeport_attr(self
, bridgename
, bridgeportname
,
77 self
.logger
.warn(str(e
))
79 def set_bridgeport_attr(self
, bridgename
, bridgeportname
, attrname
,
80 attrvalue
, check
=True):
82 attrvalue_curr
= self
.get_bridgeport_attr(bridgename
,
83 bridgeportname
, attrname
)
84 if attrvalue_curr
and attrvalue_curr
== attrvalue
:
86 if attrname
== 'treeportcost' or attrname
== 'treeportprio':
87 self
.subprocess_check_output(['/sbin/mstpctl', 'set%s' %attrname
,
88 '%s' %bridgename
, '%s' %bridgeportname
, '0', '%s' %attrvalue
])
90 self
.subprocess_check_output(['/sbin/mstpctl', 'set%s' %attrname
,
91 '%s' %bridgename
, '%s' %bridgeportname
, '%s' %attrvalue
])
93 def get_bridge_attrs(self
, bridgename
):
96 bridgeattrs
= dict((k
, self
.get_bridge_attr(bridgename
, k
))
97 for k
in self
._bridgeattrmap
.keys())
98 bridgeattrs
['treeprio'] = '%d' %(int(bridgeattrs
.get('bridgeid',
99 '').split('.')[0], base
=16) * 4096)
100 del bridgeattrs
['bridgeid']
102 self
.logger
.debug(bridgeattrs
)
103 self
.logger
.debug(str(e
))
107 def get_bridge_attr(self
, bridgename
, attrname
):
109 return self
.subprocess_check_output(['/sbin/mstpctl',
110 'showbridge', '%s' %bridgename
,
111 self
._bridgeattrmap
[attrname
]]).strip('\n')
116 def set_bridge_attr(self
, bridgename
, attrname
, attrvalue
, check
=True):
119 attrvalue_curr
= self
.get_bridge_attr(bridgename
, attrname
)
120 if attrvalue_curr
and attrvalue_curr
== attrvalue
:
122 if attrname
== 'treeprio':
123 self
.subprocess_check_call(['/sbin/mstpctl', 'set%s' %attrname
,
124 '%s' %bridgename
, '0', '%s' %attrvalue
])
126 self
.subprocess_check_call(['/sbin/mstpctl', 'set%s' %attrname
,
127 '%s' %bridgename
, '%s' %attrvalue
])
129 def set_bridge_attrs(self
, bridgename
, attrdict
, check
=True):
130 for k
, v
in attrdict
.iteritems():
134 self
.set_bridge_attr(bridgename
, k
, v
, check
)
136 self
.logger
.warn('%s: %s' %(bridgename
, str(e
)))
139 def get_bridge_treeprio(self
, bridgename
):
141 bridgeid
= subprocess
.check_output(['/sbin/mstpctl',
142 'showbridge', '%s' %bridgename
,
143 self
._bridgeattrmap
['bridgeid']]).strip('\n')
144 return '%d' %(int(bridgeid
.split('.')[0], base
=16) * 4096)
149 def set_bridge_treeprio(self
, bridgename
, attrvalue
, check
=True):
151 attrvalue_curr
= self
.get_bridge_treeprio(bridgename
)
152 if attrvalue_curr
and attrvalue_curr
== attrvalue
:
154 self
.subprocess_check_output(['/sbin/mstpctl', 'settreeprio',
155 '%s' %bridgename
, '0', '%s' %attrvalue
])
157 def showbridge(self
, bridgename
=None):
159 return self
.exec_command('/sbin/mstpctl showbridge %s' %bridgename
)
161 return self
.exec_command('/sbin/mstpctl showbridge')
163 def showportdetail(self
, bridgename
):
164 return self
.exec_command('/sbin/mstpctl showportdetail %s' %bridgename
)
166 def mstpbridge_exists(self
, bridgename
):
168 subprocess
.check_call('mstpctl showbridge %s' %bridgename
)