Exemple #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)
Exemple #2
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()
Exemple #4
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
Exemple #5
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()
Exemple #7
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')
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
Exemple #9
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
Exemple #10
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
Exemple #12
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
Exemple #13
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
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
# 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"
Exemple #16
0
# Python code block to register for events

import cps

# Create handle to connect to event service
handle = cps.event_connect()

# Regidter key with event service
cps.event_register(handle, cps.key_from_name('observed',
                                             'base-port/interface'))
while True:
    obj = cps.event_wait(handle)
    print obj
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'))
Exemple #18
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)
import   cps

handle   =  cps.event_connect()

cps.event_register(handle,   cps.key_from_name('observed','base-port/interface'))
while   True:
    obj  =  cps.event_wait(handle)
    print   obj
#Python code block for CPS event subscriber application

import cps
import cps_utils

handle = cps.event_connect()

cps.event_register(handle, cps_api_object_key)

while True:
   ev = cps.event_wait(handle)

   if ev[‘key’] == ...:
       ...      elif ev['key'] == ...:
       ...
        print "\nCheck the qualifier, not a valid qualifier "
        cps_trace_usage()
        exit(1)

    if len(sys.argv) > 2:
        _key = cps.key_from_name(in_qual, sys.argv[2])
    else:
        _key = cps.key_from_qual(in_qual)

    print "Key : " + _key

    if ((_key == "") or (_key == None)):
        print "Check the object name, not a valid object\n"
        exit(1)

    if len(sys.argv) > 2:
        print " Registering for " + in_qual + " " + sys.argv[2]
    else:
        print " Registering for " + in_qual

    handle = cps.event_connect()

    cps.event_register(handle, _key)

    while True:
        ev = cps.event_wait(handle)
        print ev['key']
        if 'operation' in ev:
            print "Operation : ", ev['operation']
        cps_utils.print_obj(ev)
#
# 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"
Exemple #23
0
#!/usr/bin/python
import sys
import cps
import cps_object
import cps_utils
import nas_os_utils

print "NHT CPS registration..."
handle = cps.event_connect()
cps.event_register(handle, cps.key_from_name('observed',
                                             'base-route/nh-track'))
while True:
    nht_event = cps_object.CPSObject(obj=cps.event_wait(handle))
    dest_addr = nht_event.get_attr_data('dest-addr')
    nh_count = 0
    nh_count = nht_event.get_attr_data('nh-count')
    print "Received NHT Event for: ", dest_addr, nh_count