Esempio n. 1
0
class Stream(object):
    __metaclass__ = _MetaIxTclApi
    __tcl_command__ = 'stream'
    __tcl_members__ = [
            TclMember('name'),
            TclMember('enable', type=bool),
            TclMember('sa', type=int),
            TclMember('da', type=int),
            TclMember('framesize', type=int),
    ]

    def __init__(self, tcl, port, id):
        self._api = tcl
        self.port = port
        self.id = id
        self.protocol = StreamProtocol(tcl, self)
        self.vlan = StreamVlan(tcl, self)

    def _stream_id(self):
        return self.port._port_id() + (self.id,)

    def _ix_get(self, member, id):
        self._api.call('stream get %d %d %d %d', *self._stream_id())

    def _ix_set(self, id):
        self._api.call('stream set %d %d %d %d', *self._stream_id())

    def __str__(self):
        return '%d/%d/%d.%d' % self._stream_id()

    def apply(self):
        self._api.call('stream write %d %d %d %d', *self._stream_id())
Esempio n. 2
0
class Statistics(object):
    """Per port statistics."""
    __metaclass__ = _MetaIxTclApi
    __tcl_command__ = 'stat'
    __tcl_members__ = [
            TclMember('bytesReceived', type=int, flags=FLAG_RDONLY),
            TclMember('bytesSent', type=int, flags=FLAG_RDONLY),
            TclMember('bitsReceived', type=int, flags=FLAG_RDONLY),
            TclMember('bitsSent', type=int, flags=FLAG_RDONLY),
            TclMember('framesReceived', type=int, flags=FLAG_RDONLY),
            TclMember('framesSent', type=int, flags=FLAG_RDONLY),
            TclMember('fcsErrors', type=int, flags=FLAG_RDONLY),
            TclMember('framerFCSErrors', type=int, flags=FLAG_RDONLY),
            TclMember('fragments', type=int, flags=FLAG_RDONLY),
    ]

    def __init__(self, tcl, port):
        self._api = tcl
        self.port = port

    def _ix_get(self, member):
        self._api.call('stat get %s %d %d %d',
                member.name, *self.port._port_id())

    def _ix_set(self, member):
        self._api.call('stat set %s %d %d %d',
                member.name, *self.port._port_id())
Esempio n. 3
0
class StreamVlan(object):
    __metaclass__ = _MetaIxTclApi
    __tcl_command__ = 'vlan'
    __tcl_members__ = [
            TclMember('vlanID', type=int),
            TclMember('userPriority'),
            TclMember('cfi'),
            TclMember('mode'),
            TclMember('repeate', type=int),
            TclMember('step', type=int),
            TclMember('maskval'),
            TclMember('protocolTagId', type=bool),
    ]

    def __init__(self, tcl, stream):
        self._api = tcl
        self.stream = stream

    def _ix_get(self, member, id):
        self.stream._ix_get(member, id)

    def _ix_set(self, id):
        self.stream._ix_set(id)

    def __str__(self):
        return self.stream.__str__(self)
Esempio n. 4
0
class StreamProtocol(object):
    __metaclass__ = _MetaIxTclApi
    __tcl_command__ = 'protocol'
    __tcl_members__ = [
            TclMember('name'),
            TclMember('appName'),
            TclMember('ethernetType'),
            TclMember('enable802dot1qTag'),
            TclMember('enableISLtag', type=bool),
            TclMember('enableMPLS', type=bool),
            TclMember('enableMaxSec', type=bool),
            TclMember('enableOAM', type=bool),
    ]

    def __init__(self, tcl, stream):
        self._api = tcl
        self.stream = stream

    def _ix_get(self, member, id):
        self.stream._ix_get(member, id)

    def _ix_set(self, id):
        self.stream._ix_set(id)

    def __str__(self):
        return self.stream.__str__(self)
Esempio n. 5
0
class Session(object):
    __metaclass__ = _MetaIxTclApi
    __tcl_command__ = 'session'
    __tcl_members__ = [
            TclMember('userName', flags=FLAG_RDONLY),
            TclMember('captureBufferSegmentSize', type=int),
    ]

    def __init__(self, api):
        self._api = api

    def _ix_get(self, member):
        self._api.call_rc('session get')

    def _ix_set(self, member):
        self._api.call_rc('session set')

    def login(self, username):
        self._api.call_rc('session login %s', username)

    def logout(self):
        self._api.call_rc('session logout')
Esempio n. 6
0
class Port(object):
    __metaclass__ = _MetaIxTclApi
    __tcl_command__ = 'port'
    __tcl_members__ = [
            TclMember('name'),
            TclMember('owner', flags=FLAG_RDONLY),
            TclMember('type', type=int, flags=FLAG_RDONLY),
            TclMember('loopback'),
            TclMember('flowControl'),
            TclMember('linkState', type=int, flags=FLAG_RDONLY),
            TclMember('portMode', type=int),
            TclMember('transmitMode'),
    ]

    LINK_STATE_DOWN = 0
    LINK_STATE_UP = 1
    LINK_STATE_LOOPBACK = 2
    LINK_STATE_MII_WRITE = 3
    LINK_STATE_RESTART_AUTO = 4
    LINK_STATE_AUTO_NEGOTIATING = 5
    LINK_STATE_MII_FAIL = 6
    LINK_STATE_NO_TRANSCEIVER = 7
    LINK_STATE_INVALID_ADDRESS = 8
    LINK_STATE_READ_LINK_PARTNER = 9
    LINK_STATE_NO_LINK_PARTNER = 10
    LINK_STATE_RESTART_AUTO_END = 11
    LINK_STATE_FPGA_DOWNLOAD_FAILED = 12
    LINK_STATE_LOSS_OF_FRAME = 24
    LINK_STATE_LOSS_OF_SIGNAL = 25

    def __init__(self, tcl, parent, id):
        self.card = parent
        self.id = id
        self._api = tcl
        self.stats = Statistics(tcl, self)

    def _ix_get(self, member):
        self._api.call_rc('port get %d %d %d', *self._port_id())

    def _ix_set(self, member):
        self._api.call_rc('port set %d %d %d', *self._port_id())

    def _port_id(self):
        return self.card._card_id() + (self.id,)

    def __str__(self):
        return '%d/%d/%d' % self._port_id()
Esempio n. 7
0
class PortGroup(object):
    START_TRANSMIT = 7
    STOP_TRANSMIT = 8
    START_CAPTURE = 9
    STOP_CAPTURE = 10
    RESET_STATISTICS = 13
    PAUSE_TRANSMIT = 15
    STEP_TRANSMIT = 16
    TRANSMIT_PING = 17
    TAKE_OWNERSHIP = 40
    TAKE_OWNERSHIP_FORCED = 41
    CLEAR_OWNERSHIP = 42
    CLEAR_OWNERSHIP_FORCED = 43

    __metaclass__ = _MetaIxTclApi
    __tcl_command__ = 'portGroup'
    __tcl_members__ = [
            TclMember('lastTimeStamp', type=int, flags=FLAG_RDONLY),
    ]

    next_free_id = 1

    def __init__(self, api, id=None):
        self._api = api
        if id is None:
            self.id = self.next_free_id
            self.next_free_id += 1
        else:
            self.id = id

    def _ix_get(self):
        pass

    def create(self):
        self._api.call_rc('portGroup create %s', self.id)

    def destroy(self):
        self._api.call_rc('portGroup destroy %s', self.id)

    def add_port(self, port):
        self._api.call_rc('portGroup add %s %d %d %d',
                self.id, *port._port_id())

    def del_port(self, port):
        self._api.call_rc('portGroup del %s %d %d %d',
                self.id, *port._port_id())

    def _set_command(self, cmd):
        self._api.call_rc('portGroup setCommand %s %d', self.id, cmd)

    def start_transmit(self):
        self._set_command(self.START_TRANSMIT)

    def stop_transmit(self):
        self._set_command(self.STOP_TRANSMIT)

    def start_capture(self):
        self._set_command(self.START_CAPTURE)

    def stop_capture(self):
        self._set_command(self.STOP_CAPTURE)

    def reset_statistics(self):
        self._set_command(self.RESET_STATISTICS)

    def pause_transmit(self):
        self._set_command(self.PAUSE_TRANSMIT)

    def step_transmit(self):
        self._set_command(self.STEP_TRANSMIT)

    def transmit_ping(self):
        self._set_command(self.TRANSMIT_PING)

    def take_ownership(self, force=False):
        if not force:
            self._set_command(self.TAKE_OWNERSHIP)
        else:
            self._set_command(self.TAKE_OWNERSHIP_FORCED)

    def clear_ownership(self, force=False):
        if not force:
            self._set_command(self.CLEAR_OWNERSHIP)
        else:
            self._set_command(self.CLEAR_OWNERSHIP_FORCED)
Esempio n. 8
0
class Chassis(object):
    __metaclass__ = _MetaIxTclApi
    __tcl_command__ = 'chassis'
    __tcl_members__ = [
            TclMember('baseIpAddress'),
            TclMember('cableLength', type=int),
            TclMember('hostname', flags=FLAG_RDONLY),
            TclMember('id', type=int),
            TclMember('ipAddress', flags=FLAG_RDONLY),
            TclMember('ixServerVersion', flags=FLAG_RDONLY),
            TclMember('master', flags=FLAG_RDONLY),
            TclMember('maxCardCount', type=int, flags=FLAG_RDONLY),
            TclMember('name'),
            TclMember('operatingSystem', type=int, flags=FLAG_RDONLY),
            TclMember('sequence', type=int),
            TclMember('type', type=int, flags=FLAG_RDONLY),
            TclMember('typeName', flags=FLAG_RDONLY),
    ]

    TYPE_1600 = 2
    TYPE_200 = 3
    TYPE_400 = 4
    TYPE_100 = 5
    TYPE_400C = 6
    TYPE_1600T = 7
    TYPE_DEMO = 9
    TYPE_OPTIXIA = 10
    TYPE_OPIXJR = 11
    TYPE_400T = 14
    TYPE_250 = 17
    TYPE_400TF = 18
    TYPE_OPTIXIAX16 = 19
    TYPE_OPTIXIAXL10 = 20
    TYPE_OPTIXIAXM12 = 22

    OS_UNKNOWN = 0
    OS_WIN95 = 1
    OS_WINNT = 2
    OS_WIN2000 = 3
    OS_WINXP = 4

    def __init__(self, api, host):
        self.host = host
        self.cards = []
        self._api = api

    def _ix_add(self):
        self._api.call_rc('chassis add %s', self.host)

    def _ix_del(self):
        self._api.call_rc('chassis del %s', self.host)

    def _ix_get(self, member):
        self._api.call_rc('chassis get %s', self.host)

    def _ix_set(self, member):
        self._api.call_rc('chassis set %s', self.host)

    def connect(self, chassis_id=1):
        self._ix_add()
        self.id = chassis_id

    def disconnect(self):
        self._ix_del()

    def discover(self):
        log.info('Discover chassis %d (%s)', self.id, self.type_name)
        for cid in xrange(self.max_card_count):
            # unfortunately there is no config option which cards are used. So
            # we have to iterate over all possible card ids and check if we are
            # able to get a handle.
            cid += 1 # one-based
            try:
                card = Card(self._api, self, cid)
                log.info('Adding card %s (%s)', card, card.type_name)
                card.discover()
                self.cards.append(card)
            except IxTclHalError:
                # keep in sync with card ids
                self.cards.append(None)
Esempio n. 9
0
class Card(object):
    __metaclass__ = _MetaIxTclApi
    __tcl_command__ = 'card'
    __tcl_members__ = [
            TclMember('cardOperationMode', type=int, flags=FLAG_RDONLY),
            TclMember('clockRxRisingEdge', type=int),
            TclMember('clockSelect', type=int),
            TclMember('clockTxRisingEdge', type=int),
            TclMember('fpgaVersion', type=int, flags=FLAG_RDONLY),
            TclMember('hwVersion', type=int, flags=FLAG_RDONLY),
            TclMember('portCount', type=int, flags=FLAG_RDONLY),
            TclMember('serialNumber', type=int, flags=FLAG_RDONLY),
            TclMember('txFrequencyDeviation', type=int),
            TclMember('type', type=int, flags=FLAG_RDONLY),
            TclMember('typeName'),
    ]

    TYPE_NONE = 0

    def __init__(self, api, parent, id):
        self.chassis = parent
        self.id = id
        self.ports = []
        self._api = api

    def _ix_get(self, member):
        self._api.call_rc('card get %d %d', *self._card_id())

    def _ix_set(self, member):
        self._api.call_rc('card set %d %d', *self._card_id())

    def discover(self):
        for pid in xrange(self.port_count):
            pid += 1 # one-based
            port = Port(self._api, self, pid)
            log.info('Adding port %s', port)
            self.ports.append(port)

    def _card_id(self):
        return (self.chassis.id, self.id)

    def __str__(self):
        return '%d/%d' % self._card_id()
Esempio n. 10
0
class Port(object):
    __metaclass__ = _MetaIxTclApi
    __tcl_command__ = 'port'
    __tcl_members__ = [
            TclMember('name'),
            TclMember('owner', flags=FLAG_RDONLY),
            TclMember('type', type=int, flags=FLAG_RDONLY),
            TclMember('loopback'),
            TclMember('flowControl'),
            TclMember('linkState', type=int, flags=FLAG_RDONLY),
            TclMember('portMode', type=int),
            TclMember('transmitMode'),
            TclMember('speed', type=int),
            TclMember('autonegotiate', type=bool),
    ]

    LINK_STATE_DOWN = 0
    LINK_STATE_UP = 1
    LINK_STATE_LOOPBACK = 2
    LINK_STATE_MII_WRITE = 3
    LINK_STATE_RESTART_AUTO = 4
    LINK_STATE_AUTO_NEGOTIATING = 5
    LINK_STATE_MII_FAIL = 6
    LINK_STATE_NO_TRANSCEIVER = 7
    LINK_STATE_INVALID_ADDRESS = 8
    LINK_STATE_READ_LINK_PARTNER = 9
    LINK_STATE_NO_LINK_PARTNER = 10
    LINK_STATE_RESTART_AUTO_END = 11
    LINK_STATE_FPGA_DOWNLOAD_FAILED = 12
    LINK_STATE_LOSS_OF_FRAME = 24
    LINK_STATE_LOSS_OF_SIGNAL = 25

    PHY_MODE_COPPER = 0
    PHY_MODE_FIBER = 1

    def __init__(self, tcl, parent, id):
        self.card = parent
        self.id = id
        self._api = tcl
        self.stats = Statistics(tcl, self)
        self.streams = StreamWrapper(self._api, self)

    def _ix_get(self, member):
        self._api.call_rc('port get %d %d %d', *self._port_id())

    def _ix_set(self, member):
        self._api.call_rc('port set %d %d %d', *self._port_id())

    def _port_id(self):
        return self.card._card_id() + (self.id,)

    def __str__(self):
        return '%d/%d/%d' % self._port_id()

    def apply(self):
        self._api.call('port write %d %d %d', *self._port_id())

    def factory_defaults(self):
        self._api.call('port setFactoryDefaults %d %d %d', *self._port_id())
        self.apply()

    def mode_defaults(self):
        self._api.call('port setFactoryDefaults %d %d %d', *self._port_id())
        self.apply()

    @property
    def phy_mode(self):
        self._ix_get(self)
        return int(self._api.call('port cget -phyMode')[0])

    @phy_mode.setter
    def phy_mode(self, mode):
        self._api.call('port setPhyMode %s %d %d %d', mode, *self._port_id())