# coding: utf-8

"""
FibreInterface.py

 The Clear BSD License

 Copyright (c) – 2016, NetApp, Inc. All rights reserved.

 Redistribution and use in source and binary forms, with or without modification, are permitted (subject to the limitations in the disclaimer below) provided that the following conditions are met:

 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

 * Neither the name of NetApp, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

 NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""

from pprint import pformat
from six import iteritems


class FibreInterface(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        FibreInterface - a model defined in Swagger

        :param dict swaggerTypes: The key is attribute name
                                  and the value is attribute type.
        :param dict attributeMap: The key is attribute name
                                  and the value is json key in definition.
        """
        self.swagger_types = {
            'channel': 'int',  # (required parameter)
            'loop_id': 'int',  # (required parameter)
            'speed': 'int',  # (required parameter)
            'hard_address': 'int',  # (required parameter)
            'node_name': 'str',  # (required parameter)
            'port_name': 'str',  # (required parameter)
            'port_id': 'str',  # (required parameter)
            'topology': 'str',  # (required parameter)
            'part': 'str',  # (required parameter)
            'revision': 'int',  # (required parameter)
            'chan_miswire': 'bool',  # (required parameter)
            'esm_miswire': 'bool',  # (required parameter)
            'link_status': 'str',  # (required parameter)
            'is_degraded': 'bool',  # (required parameter)
            'speed_control': 'str',  # (required parameter)
            'max_speed': 'int',  # (required parameter)
            'speed_neg_error': 'bool',  # (required parameter)
            'reserved1': 'str',  
            'reserved2': 'str',  
            'dds_channel_state': 'int',  # (required parameter)
            'dds_state_reason': 'int',  # (required parameter)
            'dds_state_who': 'int',  # (required parameter)
            'is_local': 'bool',  # (required parameter)
            'channel_ports': 'list[ChannelPorts]',  # (required parameter)
            'current_interface_speed': 'str',  # (required parameter)
            'maximum_interface_speed': 'str',  # (required parameter)
            'interface_ref': 'str',  # (required parameter)
            'physical_location': 'Location',  # (required parameter)
            'is_trunk_capable': 'bool',  # (required parameter)
            'trunk_miswire': 'bool',  # (required parameter)
            'protection_information_capable': 'bool',  # (required parameter)
            'one_way_max_rate': 'int',  # (required parameter)
            'bidirectional_max_rate': 'int',  # (required parameter)
            'id': 'str'
        }

        self.attribute_map = {
            'channel': 'channel',  # (required parameter)
            'loop_id': 'loopID',  # (required parameter)
            'speed': 'speed',  # (required parameter)
            'hard_address': 'hardAddress',  # (required parameter)
            'node_name': 'nodeName',  # (required parameter)
            'port_name': 'portName',  # (required parameter)
            'port_id': 'portId',  # (required parameter)
            'topology': 'topology',  # (required parameter)
            'part': 'part',  # (required parameter)
            'revision': 'revision',  # (required parameter)
            'chan_miswire': 'chanMiswire',  # (required parameter)
            'esm_miswire': 'esmMiswire',  # (required parameter)
            'link_status': 'linkStatus',  # (required parameter)
            'is_degraded': 'isDegraded',  # (required parameter)
            'speed_control': 'speedControl',  # (required parameter)
            'max_speed': 'maxSpeed',  # (required parameter)
            'speed_neg_error': 'speedNegError',  # (required parameter)
            'reserved1': 'reserved1',  
            'reserved2': 'reserved2',  
            'dds_channel_state': 'ddsChannelState',  # (required parameter)
            'dds_state_reason': 'ddsStateReason',  # (required parameter)
            'dds_state_who': 'ddsStateWho',  # (required parameter)
            'is_local': 'isLocal',  # (required parameter)
            'channel_ports': 'channelPorts',  # (required parameter)
            'current_interface_speed': 'currentInterfaceSpeed',  # (required parameter)
            'maximum_interface_speed': 'maximumInterfaceSpeed',  # (required parameter)
            'interface_ref': 'interfaceRef',  # (required parameter)
            'physical_location': 'physicalLocation',  # (required parameter)
            'is_trunk_capable': 'isTrunkCapable',  # (required parameter)
            'trunk_miswire': 'trunkMiswire',  # (required parameter)
            'protection_information_capable': 'protectionInformationCapable',  # (required parameter)
            'one_way_max_rate': 'oneWayMaxRate',  # (required parameter)
            'bidirectional_max_rate': 'bidirectionalMaxRate',  # (required parameter)
            'id': 'id'
        }

        self._channel = None
        self._loop_id = None
        self._speed = None
        self._hard_address = None
        self._node_name = None
        self._port_name = None
        self._port_id = None
        self._topology = None
        self._part = None
        self._revision = None
        self._chan_miswire = None
        self._esm_miswire = None
        self._link_status = None
        self._is_degraded = None
        self._speed_control = None
        self._max_speed = None
        self._speed_neg_error = None
        self._reserved1 = None
        self._reserved2 = None
        self._dds_channel_state = None
        self._dds_state_reason = None
        self._dds_state_who = None
        self._is_local = None
        self._channel_ports = None
        self._current_interface_speed = None
        self._maximum_interface_speed = None
        self._interface_ref = None
        self._physical_location = None
        self._is_trunk_capable = None
        self._trunk_miswire = None
        self._protection_information_capable = None
        self._one_way_max_rate = None
        self._bidirectional_max_rate = None
        self._id = None

    @property
    def channel(self):
        """
        Gets the channel of this FibreInterface.
        The channel number of this interface.

        :return: The channel of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._channel

    @channel.setter
    def channel(self, channel):
        """
        Sets the channel of this FibreInterface.
        The channel number of this interface.

        :param channel: The channel of this FibreInterface.
        :type: int
        """
        self._channel = channel

    @property
    def loop_id(self):
        """
        Gets the loop_id of this FibreInterface.
        The FC loop ID value used by the controller on this channel.

        :return: The loop_id of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._loop_id

    @loop_id.setter
    def loop_id(self, loop_id):
        """
        Sets the loop_id of this FibreInterface.
        The FC loop ID value used by the controller on this channel.

        :param loop_id: The loop_id of this FibreInterface.
        :type: int
        """
        self._loop_id = loop_id

    @property
    def speed(self):
        """
        Gets the speed of this FibreInterface.
        The speed of the interface in MB/sec. This field is deprecated. The field currentInterfaceSpeed should be used instead.

        :return: The speed of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._speed

    @speed.setter
    def speed(self, speed):
        """
        Sets the speed of this FibreInterface.
        The speed of the interface in MB/sec. This field is deprecated. The field currentInterfaceSpeed should be used instead.

        :param speed: The speed of this FibreInterface.
        :type: int
        """
        self._speed = speed

    @property
    def hard_address(self):
        """
        Gets the hard_address of this FibreInterface.
        The hard (preferred) address of the interface, in loop ID format.

        :return: The hard_address of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._hard_address

    @hard_address.setter
    def hard_address(self, hard_address):
        """
        Sets the hard_address of this FibreInterface.
        The hard (preferred) address of the interface, in loop ID format.

        :param hard_address: The hard_address of this FibreInterface.
        :type: int
        """
        self._hard_address = hard_address

    @property
    def node_name(self):
        """
        Gets the node_name of this FibreInterface.
        The unique identifier of the storage array node associated with this interface.

        :return: The node_name of this FibreInterface.
        :rtype: str
        :required/optional: required
        """
        return self._node_name

    @node_name.setter
    def node_name(self, node_name):
        """
        Sets the node_name of this FibreInterface.
        The unique identifier of the storage array node associated with this interface.

        :param node_name: The node_name of this FibreInterface.
        :type: str
        """
        self._node_name = node_name

    @property
    def port_name(self):
        """
        Gets the port_name of this FibreInterface.
        The unique identifier of the Fibre Channel port associated with this interface.

        :return: The port_name of this FibreInterface.
        :rtype: str
        :required/optional: required
        """
        return self._port_name

    @port_name.setter
    def port_name(self, port_name):
        """
        Sets the port_name of this FibreInterface.
        The unique identifier of the Fibre Channel port associated with this interface.

        :param port_name: The port_name of this FibreInterface.
        :type: str
        """
        self._port_name = port_name

    @property
    def port_id(self):
        """
        Gets the port_id of this FibreInterface.
        The NL_Port identifier assigned to this interface.

        :return: The port_id of this FibreInterface.
        :rtype: str
        :required/optional: required
        """
        return self._port_id

    @port_id.setter
    def port_id(self, port_id):
        """
        Sets the port_id of this FibreInterface.
        The NL_Port identifier assigned to this interface.

        :param port_id: The port_id of this FibreInterface.
        :type: str
        """
        self._port_id = port_id

    @property
    def topology(self):
        """
        Gets the topology of this FibreInterface.
        The Fibre Channel topology type being used.

        :return: The topology of this FibreInterface.
        :rtype: str
        :required/optional: required
        """
        return self._topology

    @topology.setter
    def topology(self, topology):
        """
        Sets the topology of this FibreInterface.
        The Fibre Channel topology type being used.

        :param topology: The topology of this FibreInterface.
        :type: str
        """
        allowed_values = ["unknown", "ptp", "fabric", "arbLoop", "fabLoop", "__UNDEFINED"]
        if topology not in allowed_values:
            raise ValueError(
                "Invalid value for `topology`, must be one of {0}"
                .format(allowed_values)
            )
        self._topology = topology

    @property
    def part(self):
        """
        Gets the part of this FibreInterface.
        An ASCII text string that describes the Fibre Channel controller chip type.

        :return: The part of this FibreInterface.
        :rtype: str
        :required/optional: required
        """
        return self._part

    @part.setter
    def part(self, part):
        """
        Sets the part of this FibreInterface.
        An ASCII text string that describes the Fibre Channel controller chip type.

        :param part: The part of this FibreInterface.
        :type: str
        """
        self._part = part

    @property
    def revision(self):
        """
        Gets the revision of this FibreInterface.
        The revision level of the Fibre Channel controller chip.

        :return: The revision of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._revision

    @revision.setter
    def revision(self, revision):
        """
        Sets the revision of this FibreInterface.
        The revision level of the Fibre Channel controller chip.

        :param revision: The revision of this FibreInterface.
        :type: int
        """
        self._revision = revision

    @property
    def chan_miswire(self):
        """
        Gets the chan_miswire of this FibreInterface.
        True, if this channel is joined with another one.

        :return: The chan_miswire of this FibreInterface.
        :rtype: bool
        :required/optional: required
        """
        return self._chan_miswire

    @chan_miswire.setter
    def chan_miswire(self, chan_miswire):
        """
        Sets the chan_miswire of this FibreInterface.
        True, if this channel is joined with another one.

        :param chan_miswire: The chan_miswire of this FibreInterface.
        :type: bool
        """
        self._chan_miswire = chan_miswire

    @property
    def esm_miswire(self):
        """
        Gets the esm_miswire of this FibreInterface.
        True, if an ESM miswire condition exists somewhere on this channel.

        :return: The esm_miswire of this FibreInterface.
        :rtype: bool
        :required/optional: required
        """
        return self._esm_miswire

    @esm_miswire.setter
    def esm_miswire(self, esm_miswire):
        """
        Sets the esm_miswire of this FibreInterface.
        True, if an ESM miswire condition exists somewhere on this channel.

        :param esm_miswire: The esm_miswire of this FibreInterface.
        :type: bool
        """
        self._esm_miswire = esm_miswire

    @property
    def link_status(self):
        """
        Gets the link_status of this FibreInterface.
        The status of the fibre channel link for this interface.

        :return: The link_status of this FibreInterface.
        :rtype: str
        :required/optional: required
        """
        return self._link_status

    @link_status.setter
    def link_status(self, link_status):
        """
        Sets the link_status of this FibreInterface.
        The status of the fibre channel link for this interface.

        :param link_status: The link_status of this FibreInterface.
        :type: str
        """
        allowed_values = ["none", "up", "down", "failed", "__UNDEFINED"]
        if link_status not in allowed_values:
            raise ValueError(
                "Invalid value for `link_status`, must be one of {0}"
                .format(allowed_values)
            )
        self._link_status = link_status

    @property
    def is_degraded(self):
        """
        Gets the is_degraded of this FibreInterface.
        True if the channel associated with this interface is degraded.

        :return: The is_degraded of this FibreInterface.
        :rtype: bool
        :required/optional: required
        """
        return self._is_degraded

    @is_degraded.setter
    def is_degraded(self, is_degraded):
        """
        Sets the is_degraded of this FibreInterface.
        True if the channel associated with this interface is degraded.

        :param is_degraded: The is_degraded of this FibreInterface.
        :type: bool
        """
        self._is_degraded = is_degraded

    @property
    def speed_control(self):
        """
        Gets the speed_control of this FibreInterface.
        The speed of the interface in MB per sec. This field is deprecated. The fieldcurrentInterfaceSpeed should be used instead.

        :return: The speed_control of this FibreInterface.
        :rtype: str
        :required/optional: required
        """
        return self._speed_control

    @speed_control.setter
    def speed_control(self, speed_control):
        """
        Sets the speed_control of this FibreInterface.
        The speed of the interface in MB per sec. This field is deprecated. The fieldcurrentInterfaceSpeed should be used instead.

        :param speed_control: The speed_control of this FibreInterface.
        :type: str
        """
        allowed_values = ["unknown", "fixed", "switched", "auto", "__UNDEFINED"]
        if speed_control not in allowed_values:
            raise ValueError(
                "Invalid value for `speed_control`, must be one of {0}"
                .format(allowed_values)
            )
        self._speed_control = speed_control

    @property
    def max_speed(self):
        """
        Gets the max_speed of this FibreInterface.
        The maximum speed in MB/s the interface can run. This field is deprecated. The field maximumInterfaceSpeed should be used instead.

        :return: The max_speed of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._max_speed

    @max_speed.setter
    def max_speed(self, max_speed):
        """
        Sets the max_speed of this FibreInterface.
        The maximum speed in MB/s the interface can run. This field is deprecated. The field maximumInterfaceSpeed should be used instead.

        :param max_speed: The max_speed of this FibreInterface.
        :type: int
        """
        self._max_speed = max_speed

    @property
    def speed_neg_error(self):
        """
        Gets the speed_neg_error of this FibreInterface.
        True if speed negotiation could not complete.

        :return: The speed_neg_error of this FibreInterface.
        :rtype: bool
        :required/optional: required
        """
        return self._speed_neg_error

    @speed_neg_error.setter
    def speed_neg_error(self, speed_neg_error):
        """
        Sets the speed_neg_error of this FibreInterface.
        True if speed negotiation could not complete.

        :param speed_neg_error: The speed_neg_error of this FibreInterface.
        :type: bool
        """
        self._speed_neg_error = speed_neg_error

    @property
    def reserved1(self):
        """
        Gets the reserved1 of this FibreInterface.


        :return: The reserved1 of this FibreInterface.
        :rtype: str
        :required/optional: optional
        """
        return self._reserved1

    @reserved1.setter
    def reserved1(self, reserved1):
        """
        Sets the reserved1 of this FibreInterface.


        :param reserved1: The reserved1 of this FibreInterface.
        :type: str
        """
        self._reserved1 = reserved1

    @property
    def reserved2(self):
        """
        Gets the reserved2 of this FibreInterface.


        :return: The reserved2 of this FibreInterface.
        :rtype: str
        :required/optional: optional
        """
        return self._reserved2

    @reserved2.setter
    def reserved2(self, reserved2):
        """
        Sets the reserved2 of this FibreInterface.


        :param reserved2: The reserved2 of this FibreInterface.
        :type: str
        """
        self._reserved2 = reserved2

    @property
    def dds_channel_state(self):
        """
        Gets the dds_channel_state of this FibreInterface.
        The DDS state of this drive side channel: optimal, degraded, or failed.

        :return: The dds_channel_state of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._dds_channel_state

    @dds_channel_state.setter
    def dds_channel_state(self, dds_channel_state):
        """
        Sets the dds_channel_state of this FibreInterface.
        The DDS state of this drive side channel: optimal, degraded, or failed.

        :param dds_channel_state: The dds_channel_state of this FibreInterface.
        :type: int
        """
        self._dds_channel_state = dds_channel_state

    @property
    def dds_state_reason(self):
        """
        Gets the dds_state_reason of this FibreInterface.
        DDS state reason.

        :return: The dds_state_reason of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._dds_state_reason

    @dds_state_reason.setter
    def dds_state_reason(self, dds_state_reason):
        """
        Sets the dds_state_reason of this FibreInterface.
        DDS state reason.

        :param dds_state_reason: The dds_state_reason of this FibreInterface.
        :type: int
        """
        self._dds_state_reason = dds_state_reason

    @property
    def dds_state_who(self):
        """
        Gets the dds_state_who of this FibreInterface.
        Which controller placed the drive side channel in this DDS state.

        :return: The dds_state_who of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._dds_state_who

    @dds_state_who.setter
    def dds_state_who(self, dds_state_who):
        """
        Sets the dds_state_who of this FibreInterface.
        Which controller placed the drive side channel in this DDS state.

        :param dds_state_who: The dds_state_who of this FibreInterface.
        :type: int
        """
        self._dds_state_who = dds_state_who

    @property
    def is_local(self):
        """
        Gets the is_local of this FibreInterface.
        Set to True if there are channel ports physically attached to this controller.

        :return: The is_local of this FibreInterface.
        :rtype: bool
        :required/optional: required
        """
        return self._is_local

    @is_local.setter
    def is_local(self, is_local):
        """
        Sets the is_local of this FibreInterface.
        Set to True if there are channel ports physically attached to this controller.

        :param is_local: The is_local of this FibreInterface.
        :type: bool
        """
        self._is_local = is_local

    @property
    def channel_ports(self):
        """
        Gets the channel_ports of this FibreInterface.
        Channel port speed information. This field is deprecated. The same information is available in the LinkSpeedDetectionError structure.

        :return: The channel_ports of this FibreInterface.
        :rtype: list[ChannelPorts]
        :required/optional: required
        """
        return self._channel_ports

    @channel_ports.setter
    def channel_ports(self, channel_ports):
        """
        Sets the channel_ports of this FibreInterface.
        Channel port speed information. This field is deprecated. The same information is available in the LinkSpeedDetectionError structure.

        :param channel_ports: The channel_ports of this FibreInterface.
        :type: list[ChannelPorts]
        """
        self._channel_ports = channel_ports

    @property
    def current_interface_speed(self):
        """
        Gets the current_interface_speed of this FibreInterface.
        The current interface speed of the Fibre Channel interface.

        :return: The current_interface_speed of this FibreInterface.
        :rtype: str
        :required/optional: required
        """
        return self._current_interface_speed

    @current_interface_speed.setter
    def current_interface_speed(self, current_interface_speed):
        """
        Sets the current_interface_speed of this FibreInterface.
        The current interface speed of the Fibre Channel interface.

        :param current_interface_speed: The current_interface_speed of this FibreInterface.
        :type: str
        """
        allowed_values = ["speedUnknown", "speed1gig", "speed2gig", "speed4gig", "speed10gig", "speed15gig", "speed3gig", "speed10meg", "speed100meg", "speed2pt5Gig", "speed5gig", "speed20gig", "speed30gig", "speed60gig", "speed8gig", "speed6gig", "speed40gig", "speed16gig", "speed56gig", "speed12gig", "__UNDEFINED"]
        if current_interface_speed not in allowed_values:
            raise ValueError(
                "Invalid value for `current_interface_speed`, must be one of {0}"
                .format(allowed_values)
            )
        self._current_interface_speed = current_interface_speed

    @property
    def maximum_interface_speed(self):
        """
        Gets the maximum_interface_speed of this FibreInterface.
        The maximum interface speed of the Fibre Channel interface.

        :return: The maximum_interface_speed of this FibreInterface.
        :rtype: str
        :required/optional: required
        """
        return self._maximum_interface_speed

    @maximum_interface_speed.setter
    def maximum_interface_speed(self, maximum_interface_speed):
        """
        Sets the maximum_interface_speed of this FibreInterface.
        The maximum interface speed of the Fibre Channel interface.

        :param maximum_interface_speed: The maximum_interface_speed of this FibreInterface.
        :type: str
        """
        allowed_values = ["speedUnknown", "speed1gig", "speed2gig", "speed4gig", "speed10gig", "speed15gig", "speed3gig", "speed10meg", "speed100meg", "speed2pt5Gig", "speed5gig", "speed20gig", "speed30gig", "speed60gig", "speed8gig", "speed6gig", "speed40gig", "speed16gig", "speed56gig", "speed12gig", "__UNDEFINED"]
        if maximum_interface_speed not in allowed_values:
            raise ValueError(
                "Invalid value for `maximum_interface_speed`, must be one of {0}"
                .format(allowed_values)
            )
        self._maximum_interface_speed = maximum_interface_speed

    @property
    def interface_ref(self):
        """
        Gets the interface_ref of this FibreInterface.
        The unique identifier for a given instance of this structure.

        :return: The interface_ref of this FibreInterface.
        :rtype: str
        :required/optional: required
        """
        return self._interface_ref

    @interface_ref.setter
    def interface_ref(self, interface_ref):
        """
        Sets the interface_ref of this FibreInterface.
        The unique identifier for a given instance of this structure.

        :param interface_ref: The interface_ref of this FibreInterface.
        :type: str
        """
        self._interface_ref = interface_ref

    @property
    def physical_location(self):
        """
        Gets the physical_location of this FibreInterface.
        The physical location of the Fibre Channel interface. The parent reference in location identifies the physical component (e.g., controller or host card) where the interface circuitry is located, and the position field is a firmware-assigned 1-relative number signifying \"1st Fibre Channel interface relative to the parent,\" \"2nd Fibre Channel interface relative to the parent,\" etc. This \"interface number\" is independent of the interface's channel association.

        :return: The physical_location of this FibreInterface.
        :rtype: Location
        :required/optional: required
        """
        return self._physical_location

    @physical_location.setter
    def physical_location(self, physical_location):
        """
        Sets the physical_location of this FibreInterface.
        The physical location of the Fibre Channel interface. The parent reference in location identifies the physical component (e.g., controller or host card) where the interface circuitry is located, and the position field is a firmware-assigned 1-relative number signifying \"1st Fibre Channel interface relative to the parent,\" \"2nd Fibre Channel interface relative to the parent,\" etc. This \"interface number\" is independent of the interface's channel association.

        :param physical_location: The physical_location of this FibreInterface.
        :type: Location
        """
        self._physical_location = physical_location

    @property
    def is_trunk_capable(self):
        """
        Gets the is_trunk_capable of this FibreInterface.
        This field is true if the Fibre interface on the controller board is trunk capable. This field is always false for host-side interfaces.

        :return: The is_trunk_capable of this FibreInterface.
        :rtype: bool
        :required/optional: required
        """
        return self._is_trunk_capable

    @is_trunk_capable.setter
    def is_trunk_capable(self, is_trunk_capable):
        """
        Sets the is_trunk_capable of this FibreInterface.
        This field is true if the Fibre interface on the controller board is trunk capable. This field is always false for host-side interfaces.

        :param is_trunk_capable: The is_trunk_capable of this FibreInterface.
        :type: bool
        """
        self._is_trunk_capable = is_trunk_capable

    @property
    def trunk_miswire(self):
        """
        Gets the trunk_miswire of this FibreInterface.
        True only when ESM is trunk capable and cabled incorrectly, or not trunk capable but connected in trunk mode.

        :return: The trunk_miswire of this FibreInterface.
        :rtype: bool
        :required/optional: required
        """
        return self._trunk_miswire

    @trunk_miswire.setter
    def trunk_miswire(self, trunk_miswire):
        """
        Sets the trunk_miswire of this FibreInterface.
        True only when ESM is trunk capable and cabled incorrectly, or not trunk capable but connected in trunk mode.

        :param trunk_miswire: The trunk_miswire of this FibreInterface.
        :type: bool
        """
        self._trunk_miswire = trunk_miswire

    @property
    def protection_information_capable(self):
        """
        Gets the protection_information_capable of this FibreInterface.


        :return: The protection_information_capable of this FibreInterface.
        :rtype: bool
        :required/optional: required
        """
        return self._protection_information_capable

    @protection_information_capable.setter
    def protection_information_capable(self, protection_information_capable):
        """
        Sets the protection_information_capable of this FibreInterface.


        :param protection_information_capable: The protection_information_capable of this FibreInterface.
        :type: bool
        """
        self._protection_information_capable = protection_information_capable

    @property
    def one_way_max_rate(self):
        """
        Gets the one_way_max_rate of this FibreInterface.
        Maximum one way data rate in B/s

        :return: The one_way_max_rate of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._one_way_max_rate

    @one_way_max_rate.setter
    def one_way_max_rate(self, one_way_max_rate):
        """
        Sets the one_way_max_rate of this FibreInterface.
        Maximum one way data rate in B/s

        :param one_way_max_rate: The one_way_max_rate of this FibreInterface.
        :type: int
        """
        self._one_way_max_rate = one_way_max_rate

    @property
    def bidirectional_max_rate(self):
        """
        Gets the bidirectional_max_rate of this FibreInterface.
        Maximum bi-directional data rate in B/s

        :return: The bidirectional_max_rate of this FibreInterface.
        :rtype: int
        :required/optional: required
        """
        return self._bidirectional_max_rate

    @bidirectional_max_rate.setter
    def bidirectional_max_rate(self, bidirectional_max_rate):
        """
        Sets the bidirectional_max_rate of this FibreInterface.
        Maximum bi-directional data rate in B/s

        :param bidirectional_max_rate: The bidirectional_max_rate of this FibreInterface.
        :type: int
        """
        self._bidirectional_max_rate = bidirectional_max_rate

    @property
    def id(self):
        """
        Gets the id of this FibreInterface.


        :return: The id of this FibreInterface.
        :rtype: str
        :required/optional: optional
        """
        return self._id

    @id.setter
    def id(self, id):
        """
        Sets the id of this FibreInterface.


        :param id: The id of this FibreInterface.
        :type: str
        """
        self._id = id

    def to_dict(self):
        """
        Returns the model properties as a dict
        """
        result = {}

        for attr, _ in iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """
        Returns the string representation of the model
        """
        return pformat(self.to_dict())

    def __repr__(self):
        """
        For `print` and `pprint`
        """
        if self is None:
           return None
        return self.to_str()

    def __eq__(self, other):
        """
        Returns true if both objects are equal
        """
        if self is None or other is None:
            return None
        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """
        Returns true if both objects are not equal
        """
        return not self == other

