Example #1
0
def monitor_fp_event():
    handle = cps.event_connect()
    cps.event_register(handle, _fp_port_key)
    while True:
        o = cps.event_wait(handle)
        obj = cps_object.CPSObject(obj = o)
        _update_fp(obj)
Example #2
0
def sytem_fault_notify():
    handle = cps.event_connect()
    pas_fault_obj = cps_object.CPSObject(module='base-pas/platform-fault',
            data={
                'fault-type': 8
                })
    cps.event_send(handle,pas_fault_obj.get())
Example #3
0
    def monitor_events(self):
        self.log("Started CPS events listener...")
        interfaces_key = cps.key_from_name(
            'observed', 'dell-base-if-cmn/if/interfaces-state/interface')

        handle = cps.event_connect()
        cps.event_register(handle, interfaces_key)

        while True:
            o = cps.event_wait(handle)
            obj = cps_object.CPSObject(obj=o)

            # Monitor interfaces
            if interfaces_key == obj.get_key():

                list = []
                cps.get([
                    cps.key_from_name(
                        'observed',
                        'dell-base-if-cmn/if/interfaces-state/interface')
                ], list)
                # Ignore the first entry
                for entry in list[1:]:
                    # Construct a new object for each entry
                    get_obj = cps_object.CPSObject(obj=entry)
                    if (obj.get_attr_data("if/interfaces-state/interface/name")
                            == get_obj.get_attr_data(
                                "if/interfaces-state/interface/name")):

                        oper_status = get_obj.get_attr_data(
                            "if/interfaces-state/interface/oper-status")
                        # ...

                        new_list = []
                        cps.get([
                            cps.key_from_name(
                                'target',
                                'dell-base-if-cmn/if/interfaces/interface')
                        ], new_list)

                        # Ignore the first entry
                        for aux_entry in new_list[1:]:
                            # Construct a new object for each entry
                            get_aux_obj = cps_object.CPSObject(obj=aux_entry)

                            if (get_aux_obj.get_attr_data(
                                    "if/interfaces/interface/name") ==
                                    obj.get_attr_data(
                                        "if/interfaces-state/interface/name")):
                                if_name = get_aux_obj.get_attr_data(
                                    "if/interfaces/interface/name")
                                #enabled = get_aux_obj.get_attr_data("if/interfaces/interface/enabled")
                                Utils.cliLogger(if_name, 1)
                                Utils.cliLogger(0, 1)
                                interface = Interface(if_name, "", 0, "", "",
                                                      oper_status, "", "", "")
                                Utils.timeLogger(
                                    "EventHandler| CPS event Operstatus changed: "
                                )
                                q.put((dh.change_interface, (interface, ), {}))
def _register_ev(qual, obj):
    # Listen for cps/node-group events
    _key = cps.key_from_name(qual, obj)
    handle = cps.event_connect()

    cps.event_register(handle, _key)

    t = threading.Thread(target=_ev_wait_node_grp, args=(handle, )).start()
Example #5
0
def monitor_interface_event():
    handle = cps.event_connect()
    cps.event_register(handle,
                       nas_comm.yang.get_value('physical_key', 'keys_id'))
    cps.event_register(
        handle, nas_comm.yang.get_value('logical_if_state_key', 'keys_id'))
    cps.event_register(
        handle, nas_comm.yang.get_value('obs_logical_if_key', 'keys_id'))
    _led_control = media.led_control_get()
    while True:
        o = cps.event_wait(handle)
        obj = cps_object.CPSObject(obj=o)

        if nas_comm.yang.get_value('fp_key', 'keys_id') == obj.get_key():
            _update_fp(obj)
        if nas_comm.yang.get_value('physical_key', 'keys_id') == obj.get_key():
            continue

        if nas_comm.yang.get_value('obs_logical_if_key',
                                   'keys_id') == obj.get_key():
            _process_logical_if_event(obj)

        elif nas_comm.yang.get_value('logical_if_state_key',
                                     'keys_id') == obj.get_key():
            if_index = _get_obj_attr_value(
                obj, 'if/interfaces-state/interface/if-index')
            # check if if_index is present
            if if_index is None:
                nas_if.log_err(
                    'Interface index not present in the interface state event')
                continue
            # Get Interface attributes
            if_obj_list = nas_if.nas_os_if_list(d={'if-index': if_index})
            if if_obj_list is None:
                nas_if.log_err(
                    'Failed to get Interface attributes by ifindex from NAS interface'
                )
                continue
            admin_state = _get_obj_attr_value(
                obj, 'if/interfaces-state/interface/admin-status')
            if admin_state != None:
                # This is admin state change event
                try:
                    set_media_transceiver(if_obj_list[0])
                except:
                    nas_if.log_err(
                        "Unable to set media transceiver for if_index {}".
                        format(str(if_index)))

            if _led_control == True:
                oper_state = _get_obj_attr_value(
                    obj, 'if/interfaces-state/interface/oper-status')
                if oper_state != None:
                    try:
                        set_interface_media_speed(if_obj_list[0])
                    except:
                        nas_if.log_err("Error in setting LED")
                continue
Example #6
0
def handle_leaked_rt_event():
    _leaked_rt_evt_handle = cps.event_connect()
    cps.event_register(_leaked_rt_evt_handle, _leaked_rt_key)

    while True:
        leaked_rt_evt = cps.event_wait(_leaked_rt_evt_handle)
        obj = cps_object.CPSObject(obj=leaked_rt_evt)
        if obj is None:
            continue

        if not 'operation' in leaked_rt_evt.keys():
            continue

        op = None
        if leaked_rt_evt['operation'] == 'create':
            op = 'add'
        if leaked_rt_evt['operation'] == 'delete':
            op = 'del'

        src_vrf_name = None
        af = None
        prefix = None
        prefix_len = 0
        dst_vrf_name = None
        try:
            dst_vrf_name = obj.get_attr_data(
                'os-re/os-leak-route-config/vrf-name')
            af = obj.get_attr_data('os-re/os-leak-route-config/af')
            prefix = obj.get_attr_data(
                'os-re/os-leak-route-config/route-prefix')
            prefix = binascii.unhexlify(prefix)
            prefix = get_ip_str(af, prefix)
            prefix_len = obj.get_attr_data(
                'os-re/os-leak-route-config/prefix-len')
            src_vrf_name = obj.get_attr_data(
                'os-re/os-leak-route-config/src-vrf-name')
        except ValueError as e:
            log_err(
                'Error - Mandatatory object attributes are not present for route leak configuration!'
            )
            continue

        global _vrf_mutex
        _vrf_mutex.acquire()
        ret_val, nexthop_ip, nexthop_ip6 = _veth_ip_get(
            dst_vrf_name, src_vrf_name, True)
        _vrf_mutex.release()
        if ret_val is False:
            log_err('veth info. not found while handling src-vrf:%s af:%s prefix:%s/%s dst-vrd:%s'\
                    % (src_vrf_name, str(af), prefix, str(prefix_len), dst_vrf_name))
            continue
        if af == socket.AF_INET6:
            nexthop_ip = nexthop_ip6
        if dn_base_vrf_tool.process_leaked_rt_config(op, af, dst_vrf_name, prefix,\
                                                     prefix_len, nexthop_ip) != True:
            log_err('VRF route leaking configuration failed op:%s src-vrf:%s af:%s prefix:%s/%s dst-vrd:%s'\
                    % (op, src_vrf_name, str(af), prefix, str(prefix_len), dst_vrf_name))
            continue
    def __init__(self):
        """
        This function initializes the instance variable: CPS handle
        @param[in] None
        @returns None

        """

        self.handle = cps.event_connect()
Example #8
0
def monitor_media_event():
    handle = cps.event_connect()
    nas_if.log_info(" registering for media")
    cps.event_register(handle, cps.key_from_name('observed', 'base-pas/media'))

    while True:
        media = cps.event_wait(handle)
        obj = cps_object.CPSObject(obj=media)
        set_media_info(obj)
def handle_addr_event():
    _intf_addr_evt_handle = cps.event_connect()
    cps.event_register(_intf_addr_evt_handle, _linux_intf_addr_key)
    global _addr_mutex
    global _dad_timer
    _addr_mutex = Lock()

    while True:
        intf_evt = cps.event_wait(_intf_addr_evt_handle)
        obj = cps_object.CPSObject(obj=intf_evt)
        if obj is None:
            continue

        if not 'operation' in intf_evt.keys():
            continue
        op = intf_evt['operation']

        vrf_name = None
        intf_name = None
        intf_addr = None
        intf_prefix_len = 0
        dad_failed = 0

        try:
            dad_failed = obj.get_attr_data('base-ip/ipv6/dad-failed')
            # if DAD is not failed for the IPv6 address, ignore this event.
            if dad_failed == 0:
                continue
            vrf_name = obj.get_attr_data('base-ip/ipv6/vrf-name')
            intf_name = obj.get_attr_data('base-ip/ipv6/name')
            intf_addr = obj.get_attr_data('base-ip/ipv6/address/ip')
            intf_addr = binascii.unhexlify(intf_addr)
            intf_addr = socket.inet_ntop(socket.AF_INET6, intf_addr)
            intf_prefix_len = obj.get_attr_data(
                'base-ip/ipv6/address/prefix-length')
        except ValueError as e:
            continue

        key = '*' + str(vrf_name) + '*' + str(intf_name) + '*' + str(
            intf_addr) + '/' + str(intf_prefix_len) + '*'
        _addr_mutex.acquire()
        val = _intf_addr_dad_failed_list.get(key, None)
        if op == 'create' or op == 'set':
            if val is None:
                _intf_addr_dad_failed_list[key] = 1
                if len(_intf_addr_dad_failed_list) == 1:
                    _dad_timer = Timer(_dad_failure_handle_intvl,
                                       handle_dad_failure_timer)
                    _dad_timer.start()
        elif op == 'delete':
            if val is not None:
                _intf_addr_dad_failed_list.pop(key, None)
        _addr_mutex.release()
Example #10
0
def handle_ip_address_event():

    _ip_addr_evt_handle = cps.event_connect()
    cps.event_register(_ip_addr_evt_handle, _linux_ip_addr_key)
    cps.event_register(_ip_addr_evt_handle, _linux_ipv6_addr_key)
    global _vrf_ipsvcs_mutex
    while True:
        ip_evt = cps.event_wait(_ip_addr_evt_handle)
        obj = cps_object.CPSObject(obj=ip_evt)
        if obj is None:
            continue

        if not 'operation' in ip_evt.keys():
            continue

        if _linux_ip_addr_key == obj.get_key():
            af = 'ipv4'
        else:
            af = 'ipv6'

        op = ip_evt['operation']
        if op == 'create' or op == 'set':
            isAdd = 1
        else:
            isAdd = 0

        if af == 'ipv6':
            try:
                vrf_name = obj.get_attr_data('base-ip/ipv6/vrf-name')
            except ValueError as e:
                vrf_name = 'default'

            if vrf_name != 'default':
                _vrf_ipsvcs_mutex.acquire()
                ipv6_rule_programming(
                    obj, isAdd)  # this api needs to be protected by lock
                _vrf_ipsvcs_mutex.release()
            else:
                log_info('Default vrf ip address event. Ignore this')
        else:
            try:
                vrf_name = obj.get_attr_data('base-ip/ipv4/vrf-name')
            except ValueError as e:
                vrf_name = 'default'

            if vrf_name != 'default':
                _vrf_ipsvcs_mutex.acquire()
                ipv4_rule_programming(
                    obj, isAdd)  # this api needs to be protected by lock
                _vrf_ipsvcs_mutex.release()
            else:
                log_info('Default vrf ip address event. Ignore this')
Example #11
0
def _trace_events(_obj):
    handle = cps.event_connect()

    cps.event_register_object(handle, _obj.get())

    while True:
        ev = cps.event_wait(handle)
        print "@", str(datetime.datetime.now()), "- Event for", _get_key(
            ev['key'])
        if 'operation' in ev:
            print "Operation : ", ev['operation']
        cps_utils.print_obj(ev)
        print "----------------------------------------------"
Example #12
0
def monitor_phy_media():
    media.init_nas_media_info()
    handle = cps.event_connect()
    cps.event_register(handle, _media_key)
    while True:
        o = cps.event_wait(handle)
        obj = cps_object.CPSObject(obj=o)
        nas_if.log_info("media event received")
        try:
            # configure NPU for the media-type change event
            media.if_media_type_set(obj)
        except:
            # the event could be unrelated to media-type
            continue
def monitor_phy_media():
    media.init_nas_media_info()
    handle = cps.event_connect()
    cps.event_register(handle, _media_key)
    while True:
        o = cps.event_wait(handle)
        obj = cps_object.CPSObject(obj=o)
        print "media event received"
        try:
            # configure NPU for the media-type change event
            media.set_media_info(obj)
        except:
            # the event could be unrelated to media-type
            continue
Example #14
0
def monitor_media_events():
    handle = cps.event_connect()
    cps.event_register(handle, nas_comm.yang.get_value('media_key', 'keys_id'))
    while True:
        o = cps.event_wait(handle)
        obj = cps_object.CPSObject(obj=o)
        nas_if.log_info("Media event received")
        global mutex
        mutex.acquire()
        try:
            set_intf_request(obj)
        except:
            logging.exception('logical interface media event failed')
        mutex.release()
def handle_interface_event_for_lla_cfg():
    _intf_evt_handle = cps.event_connect()
    cps.event_register(_intf_evt_handle, _linux_intf_key)

    while True:
        intf_evt = cps.event_wait(_intf_evt_handle)
        obj = cps_object.CPSObject(obj=intf_evt)
        if obj is None:
            continue

        if not 'operation' in intf_evt.keys():
            continue
        if ((intf_evt['operation'] != 'create')
                and (intf_evt['operation'] != 'set')):
            continue

        vrf_name = None
        intf_name = None
        intf_mac = None
        intf_admin_status = 0

        try:
            vrf_name = obj.get_attr_data(
                'ni/if/interfaces/interface/bind-ni-name')
            intf_name = obj.get_attr_data('if/interfaces/interface/name')
            intf_mac = obj.get_attr_data(
                'dell-if/if/interfaces/interface/phys-address')
            intf_admin_status = obj.get_attr_data(
                'if/interfaces/interface/enabled')
            # if admin status is not enabled, ignore the interface event
            if intf_admin_status != 1:
                continue
        except ValueError as e:
            continue

        mac_list = intf_mac.split(':')
        # Create the LLA
        lla_addr = 'fe80::'+hex(int(mac_list[0],16)^2)[2:]+mac_list[1]+':'+mac_list[2]+\
                   'ff:fe'+mac_list[3]+':'+mac_list[4]+mac_list[5]
        lla_addr_with_prefix_len = lla_addr + '/64'
        # Configuring the LLA on the L2 intf will lead to error, pass the exception
        try:
            add_ip_addr(lla_addr_with_prefix_len, intf_name, "ipv6", vrf_name,
                        False)
        except:
            pass
Example #16
0
def monitor_interface_event():
    handle = cps.event_connect()
    cps.event_register(handle, _physical_key)
    cps.event_register(handle, _logical_if_state_key)
    _led_control = media.led_control_get()
    while True:
        o = cps.event_wait(handle)
        obj = cps_object.CPSObject(obj=o)
        if _physical_key == obj.get_key():
            if o['operation'] != 'create':
                continue
            nas_if.log_info("physical port creation event")
            set_media_type_on_port_create(obj)
        elif _logical_if_state_key == obj.get_key():
            if_index = _get_obj_attr_value(
                obj, 'if/interfaces-state/interface/if-index')
            # check if if_index is present
            if if_index == None:
                nas_if.log_err(
                    'Interface index not present in the interface state event')
                continue
            # Get Interface attributes
            admin_state = _get_obj_attr_value(
                obj, 'if/interfaces-state/interface/admin-status')
            if admin_state != None:
                # This is admin state change event
                try:
                    if_obj_list = nas_if.nas_os_if_list(
                        d={'if-index': if_index})
                    set_media_transceiver(if_obj_list[0])
                except:
                    nas_if.log_err("Unable to set media transceiver for ",
                                   str(if_index))
            if _led_control == True:
                oper_state = _get_obj_attr_value(
                    obj, 'if/interfaces-state/interface/oper-status')
                if oper_state != None:
                    try:
                        set_interface_led(if_obj_list[0])
                    except:
                        nas_if.log_err("Error in setting LED")
                continue
def send_fp_event(port):
    handle = cps.event_connect()
    fp_port_obj = cps_object.CPSObject(module='base-if-phy/front-panel-port',
                                       data={
                                           'npu-id':
                                           port.npu,
                                           'front-panel-port':
                                           port.id,
                                           'control-port':
                                           port.control_port(),
                                           'port':
                                           port.hwports,
                                           'default-name':
                                           port.name,
                                           'breakout-mode':
                                           port.get_breakout_mode(),
                                           'port-speed':
                                           port.get_port_speed()
                                       })
    cps.event_send(handle, fp_port_obj.get())
Example #18
0
 def run(path, method, notify):
     '''Run the event loop'''
     handle = cps.event_connect()
     (yin_form, data) = cps_parse.yin_path(path)
     if yin_form is None:
         return
     cps_obj = cps_utils.CPSObject(yin_form, data=data, qual="observed")
     cps.event_register_object(handle, cps_obj.get())
     import traceback
     while True:
         result = cps.event_wait(handle)
         try:
             event_path = cps_parse.prep_path(yin_form, result)
             if result['data'].get(
                     "cps/object-group/return-code") is not None:
                 del result['data']["cps/object-group/return-code"]
             parsed = cps_parse.convert_result(event_path, result)
             notify(method, parsed)
         except KeyError:
             pass
         except AttributeError:
             pass
def monitor_interface_event():
    handle = cps.event_connect()
    cps.event_register(handle, _physical_key)
    cps.event_register(handle, _logical_if_state_key)
    _led_control = media.led_control_get()
    while True:
        o = cps.event_wait(handle)
        obj = cps_object.CPSObject(obj=o)
        if _physical_key == obj.get_key():
            if o['operation'] != 'create':
                continue
            print "physical port creation event"
            set_media_type_on_port_create(obj)
        elif _logical_if_state_key == obj.get_key():
            if_index = _get_obj_attr_value(obj, 'if/interfaces-state/interface/if-index')
            # check if if_index is present
            if if_index == None:
                print 'Interface index not present in the interface state event'
                continue
            # Get Interface attributes
            admin_state = _get_obj_attr_value(obj, 'if/interfaces-state/interface/admin-status')
            if admin_state != None:
                # This is admin state change event
                try:
                    if_obj_list = nas_if.nas_os_if_list(d={'if-index':if_index})
                    set_media_transceiver(if_obj_list[0])
                except:
                    print "Unable to set media transceiver for ", str(if_index)
            if _led_control == True:
                oper_state = _get_obj_attr_value(obj, 'if/interfaces-state/interface/oper-status')
                if oper_state != None:
                    try:
                        set_interface_led(if_obj_list[0])
                    except:
                        print "Error in setting LED"
                continue
import   cps
import   cps_utils


handle   =  cps.event_connect()


obj   =  cps_utils.CPSObject('base-port/interface',qual='observed', data=   {"ifindex":23})

cps.event_send(handle,   obj.get())

Example #21
0
#
# THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR
# CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT
# LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS
# FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
#
# See the Apache Version 2.0 License for specific language governing
# permissions and limitations under the License.

import cps
import cps_object
import cps_utils

_ipv4_key = cps.key_from_name('target', 'base-ip/ipv4')
_ipv6_key = cps.key_from_name('target', 'base-ip/ipv6')

if __name__ == '__main__':
    # monitor ip change event
    handle = cps.event_connect()
    cps.event_register(handle, _ipv4_key)
    cps.event_register(handle, _ipv6_key)
    while True:
        o = cps.event_wait(handle)
        print o
        obj = cps_object.CPSObject(obj=o)
        cps_utils.print_obj(obj)
        if _ipv4_key == obj.get_key():
            print "IPv4 change event received"
        elif _ipv6_key == obj.get_key():
            print "IPv6 change event received"
Example #22
0
def monitor_VLAN_interface_event():
    _vlan_handle = cps.event_connect()
    cps.event_register(_vlan_handle, _intf_vlan_key)
    mcast_utils.log_info('monitor_VLAN_interface_event started')

    while True:
        vlan_event = cps.event_wait(_vlan_handle)
        obj = cps_object.CPSObject(obj=vlan_event)
        if obj is None:
            mcast_utils.log_err(
                'VLAN_MONITOR: Object not present in the event')
            continue
        if obj.get_key() != _intf_vlan_key:
            mcast_utils.log_debug(
                'VLAN_MONITOR: Wrong VLAN interface event, ignore')
            continue

        try:
            vlan_name = obj.get_attr_data('if/interfaces/interface/name')
            # check if if_name is present
            if vlan_name is None:
                mcast_utils.log_err(
                    'VLAN_MONITOR: VLAN name not present in the event')
                continue

            if 'operation' in vlan_event:
                mcast_utils.log_info('VLAN_MONITOR: Received %s %s event' %
                                     (vlan_name, vlan_event['operation']))
                if (vlan_event['operation'] == 'create'):
                    ret = mcast_utils._update_file_system(
                        mcast_utils._get_path_per_vlan_configs(
                            vlan_name, "multicast_snooping"), 0)
                    if ret is True:
                        mcast_utils.log_info(
                            'VLAN_MONITOR: Disabled snooping on %s in kernel' %
                            (vlan_name))
                    else:
                        mcast_utils.log_err(
                            'VLAN_MONITOR: Failed to disable snooping on %s in kernel'
                            % (vlan_name))
                elif (vlan_event['operation'] == 'delete'):
                    #On VLAN deletion, not sure application sends the snoop disable, even if it sends it comes
                    #with VLAN id, so for getting ifname NAS interface may not have VLAN and will fail to get name.
                    #and per VLAN rule in kernel may not get deleted. So here on VLAN deletion the per VLAN IGMP/MLD
                    #rules are deleted.
                    #
                    if (snoop_remove_vlan_rules(True, vlan_name)) is False:
                        mcast_utils.log_debug(
                            'VLAN_MONITOR: Failed to remove IGMP ebtables rule in kernel for %s'
                            % (vlan_name))
                    if (snoop_remove_vlan_rules(False, vlan_name)) is False:
                        mcast_utils.log_debug(
                            'VLAN_MONITOR: Failed to remove MLD ebtables rule in kernel for %s'
                            % (vlan_name))
            else:
                mcast_utils.log_info(
                    'VLAN_MONITOR: Received event without operation' %
                    (vlan_name))

        except Exception as e:
            mcast_utils.log_err('VLAN_MONITOR: Exception: %s' % e)
def init_events():
    global cps_ev_hdl
    cps_ev_hdl = cps.event_connect()
    cps.event_register(
        cps_ev_hdl,
        cps.key_from_name('observed', 'base-if-linux/if/interfaces/interface'))