Source code for jnpr.junos.cfg.phyport.switch
# 3rd-party
from lxml.builder import E
# local
from jnpr.junos.cfg import Resource
from jnpr.junos import JXML
from jnpr.junos.cfg.phyport.base import PhyPortBase
[docs]class PhyPortSwitch(PhyPortBase):
PORT_SPEED = {
'auto': 'auto-negotiation',
'10m': 'ethernet-10m',
'100m': 'ethernet-100m',
'1g': 'ethernet-1g'
}
# -----------------------------------------------------------------------
# XML readers
# -----------------------------------------------------------------------
def _xml_to_py(self, has_xml, has_py):
PhyPortBase._xml_to_py(self, has_xml, has_py)
# speed, duplex, loopback are all under 'ether-options'
ethopts = has_xml.find('ether-options')
if ethopts is None:
return
if ethopts.find('loopback') is not None:
has_py['loopback'] = True
speed = ethopts.find('speed')
if speed is not None:
# take the first child element
has_py['speed'] = speed[0].tag
PhyPortBase._set_invert(has_py, 'speed', self.PORT_SPEED)
Resource.copyifexists(ethopts, 'link-mode', has_py, 'duplex')
if 'duplex' in has_py:
PhyPortBase._set_invert(has_py, 'duplex', self.PORT_DUPLEX)
# -----------------------------------------------------------------------
# XML writers
# -----------------------------------------------------------------------
def _xml_hook_build_change_begin(self, xml):
if any([this in self.should for this in ['speed', 'duplex',
'loopback']]):
self._ethopts = E('ether-options')
xml.append(self._ethopts)
def _xml_change_speed(self, xml):
speed_tag = self.PORT_SPEED.get(self.speed)
add_this = E.speed(
JXML.DEL) if speed_tag is None else E.speed(
E(speed_tag))
self._ethopts.append(add_this)
return True
def _xml_change_duplex(self, xml):
value = self.PORT_DUPLEX.get(self.duplex)
Resource.xml_set_or_delete(self._ethopts, 'link-mode', value)
return True
def _xml_change_loopback(self, xml):
self._ethopts.append(
Resource.xmltag_set_or_del(
'loopback',
self.loopback))
return True