Exemple #1
0
def nas_fp_cps_register(handle):

    d = {}
    d['get'] = get_cb
    d['transaction'] = set_fp_cb

    cps.obj_register(handle, get_value(keys_id, 'fp_key'), d)
    cps.obj_register(handle, get_value(keys_id, 'npu_lane_key'), d)
    cps.obj_register(handle, get_value(keys_id, 'breakout_key'), d)
Exemple #2
0
def main():
    '''Run the dhcp agent'''
    def get_cb(method, params):
        '''CPS get callback'''
        logging.debug("Get CB invoked with %s", "{}".format(params))
        fobj = cps_object.CPSObject(obj=params['filter'])
        params['list'].extend(agent.get(fobj.get()))
        return True

    def trans_cb(method, params):
        '''CPS transaction callback'''
        logging.debug("Trans CB invoked with %s", "{}".format(params))
        return agent.transaction(params['change'])

    agent = None
    cps_utils.add_attr_type('dhcp-agent/if/interfaces/interface/dhcp-server',
                            'ipv4')
    aparser = ArgumentParser(description=main.__doc__)
    aparser.add_argument(
        '--file',
        help='the file containing the dhcp agent config if used in mock mode',
        type=str)
    aparser.add_argument('--verbose', help='verbosity level', type=int)
    args = vars(aparser.parse_args())
    if args.get('verbose') is not None:
        logging.getLogger().setLevel(logging.DEBUG)
    agent = Agent(mock=args.get("file"))
    dict_cb = {"get": get_cb, "transaction": trans_cb}

    # disable cps pylint warnings - they are spurious
    # pylint: disable=no-member
    handle = cps.obj_init()
    # pylint: disable=no-member
    cps.obj_register(handle, cps.key_from_name("target", DHCPPATH_P), dict_cb)

    agent.main_loop()
def nas_fp_cps_register(handle):

    d = {}
    d['get'] = get_cb
    d['transaction'] = set_fp_cb

    cps.obj_register(handle, nas_comm.yang.get_tbl('keys_id')['fp_key'], d)
    cps.obj_register(handle,
                     nas_comm.yang.get_tbl('keys_id')['npu_lane_key'], d)
    cps.obj_register(handle,
                     nas_comm.yang.get_tbl('keys_id')['breakout_key'], d)

def get_cb(methods, params):
    return False


def trans_cb(methods, params):
    if params['operation'] == 'rpc':
        cmd = params['change']['data'][
            'base-switch/diag_shell/input/command'].decode("utf-8")
        resp = run_shell_cmd(cmd).encode("utf-8")
        params['change']['data']['base-switch/diag_shell/output/result'] = resp
    else:
        print "Invalid operation requested."

    return True

if __name__ == '__main__':
    if len(sys.argv) > 1:
        print run_shell_cmd(sys.argv[1])
        sys.exit(0)

    handle = cps.obj_init()
    d = {}
    d['get'] = get_cb
    d['transaction'] = trans_cb
    key = cps.key_from_name('target', 'base-switch/diag_shell')
    cps.obj_register(handle, key, d)
    while True:
        time.sleep(1)
    global shutdown
    shutdown = False

    # Install signal handlers.
    import signal
    signal.signal(signal.SIGTERM, sigterm_hdlr)

    if len(sys.argv) > 1:
        print run_shell_cmd(sys.argv[1])
        sys.exit(0)

    handle = cps.obj_init()
    d = {}
    d['get'] = get_cb
    d['transaction'] = trans_cb
    key = cps.key_from_name('target', 'base-switch/diag_shell')
    cps.obj_register(handle, key, d)
 
    # Notify systemd: Daemon is ready
    systemd.daemon.notify("READY=1")

    # wait until a signal is received
    while False == shutdown:
        signal.pause()

    systemd.daemon.notify("STOPPING=1")
    # cleanup code here

    # No need to specifically call sys.exit(0).
    # That's the default behavior in Python.
    global signum_caught
    signum_caught = signum


if __name__ == '__main__':

    import signal
    signal.signal(signal.SIGTERM, sig_handler)

    handle = cps.obj_init()

    tun_cb = {}
    tun_cb['get'] = get_tunnel_cb
    tun_cb['transaction'] = set_tunnel_cb

    cps.obj_register(handle, cps.key_from_name("target", "cps/tunnel"), tun_cb)

    db_cb = {}
    db_cb['get'] = get_db_cb
    db_cb['transaction'] = set_db_cb

    cps.obj_register(handle, cps.key_from_name("target", "cps/db-instance"),
                     db_cb)

    # WARNING systemd module not currently installed!!!
    #         Waiting for legal approval to bring systemd module into OPX.
    #import systemd.daemon
    #systemd.daemon.notify("READY=1")

    signal.pause()
        #  Do  something   with   them   -- program   hardware, 

        #  update   the   configuration,   etc.
        return   True
    if params[ operation ]   ==    create :
        return   True

    if params[ operation ]   ==    delete :
        return   True

    if params[ operation ]   ==    action :
        return   True
    
    return   False

# Obtain   a handle   to   the   CPS   API   service
    handle   =  cps.obj_init()

#  Register   the   above handlers   to   be run   when   a request   is received
#  for   the   given   key
cps.obj_register(handle, key,
                 {  get :   get_callback,
                    transaction :   transaction_callback
                 }
                )

#  Let   the   handlers   run
while   True:
    time.sleep(1000) 
                                                 attr_n   =  params[ change ][ data ][ attr_n ]

        #Do something with them -- program hardware, 
        #update the configuration, etc.
        return   True
    if params[ operation ]   ==    create :
        return   True

    if params[ operation ]   ==    delete :
        return   True

    if params[ operation ]   ==    action :
        return   True
    
    return   False

#Obtain a handle to the CPS API service
    handle   =  cps.obj_init()

#Register the above handlers to be run when a request is received
#for the given key
cps.obj_register(handle, key,
                 {  get :   get_callback,
                    transaction :   transaction_callback
                 }
                )

#Let the handlers run
while   True:
    time.sleep(1000) 
            print "Attempting to delete address ", addr, name
            if dn_base_ip_tool.del_ip_addr(addr, name):
                return True
            print "Failed to execute request..."
    except Exception as e:
        print "Faild to commit operation.", e
        print params

    return False

if __name__ == '__main__':
    if len(sys.argv) > 1:
        l = []
        _get_ip_objs(cps_object.CPSObject('base-ip/ipv4'), l)
        for i in l:
            cps_utils.print_obj(i)
        sys.exit(1)

    handle = cps.obj_init()
    d = {}
    d['get'] = get_cb
    d['transaction'] = trans_cb

    for i in _keys.keys():
        if i.find('base-ip') == -1:
            continue
        cps.obj_register(handle, _keys[i], d)

    while True:
        time.sleep(1)
    # chassis object is registered.
    chassis_key = cps.key_from_name('observed', 'base-pas/chassis')
    while cps.enabled(chassis_key) == False:
        #wait for chassis object to be ready
        nas_if.log_err('Create Interface: Base MAC address is not yet ready')
        time.sleep(1)
    fp.init('%s/etc/opx/base_port_physical_mapping_table.xml' %
            os.environ.get("OPX_INSTALL_PATH", ""))

    handle = cps.obj_init()

    d = {}
    d['get'] = get_cb
    d['transaction'] = set_cb

    cps.obj_register(handle, _fp_key, d)
    cps.obj_register(handle, _npu_lane_key, d)
    cps.obj_register(handle, _breakout_key, d)

    d = {}
    d['transaction'] = set_intf_cb
    cps.obj_register(handle, _set_intf_key, d)

    get_mac_hdl = cps.obj_init()

    d = {}
    d['transaction'] = get_mac_cb
    cps.obj_register(get_mac_hdl, _get_mac_key, d)

    while True:
        time.sleep(1)
def nas_bridge_cps_regster(handle):
    d = {}
    d['transaction'] = set_bridge_cb
    cps.obj_register(handle,
                     nas_comm.yang.get_value('set_bridge_key', 'keys_id'), d)
    # Register Front Panel Port and HW port object handler
    fp_utils.nas_fp_cps_register(handle)

    # Register for Port Group handler
    pg_utils.nas_pg_cps_register(handle)

    # Register Bridge handler
    if_bridge.nas_bridge_cps_regster(handle)

    # Register for Hybrid Group handler
    hg_utils.nas_hg_cps_register(handle)

    # Register Logical Interface handler
    d = {}
    d['transaction'] = set_intf_cb
    cps.obj_register(handle, nas_comm.yang.get_value('set_intf_key',
                                                     'keys_id'), d)

    fp_identification_led_control = fp_led.identification_led_control_get()

    media_monitor.subscribe_events()
    interface_monitor.subscribe_events()

    # Initialization complete
    # Notify systemd: Daemon is ready
    systemd.daemon.notify("READY=1")

    # Wait until a signal is received
    while False == shutdwn:
        signal.pause()

    systemd.daemon.notify("STOPPING=1")
Exemple #13
0
    params['list'].append(d)
    d = {'key': params['filter']['key'] + "3", 'data': {'pyobj/node': 'Cliff'}}
    params['list'].append(d)

    print params
    return True


def trans_cb(methods, params):
    print "Trans..."
    print params['operation']

    if params['operation'] == 'set':
        params['change']['data']['pyobj/node'] = "Clifford"
        params['change']['data']['pyobj/time'] = time.asctime()
    print params
    return True

if __name__ == '__main__':
    handle = cps.obj_init()
    d = {}
    d['get'] = get_cb
    d['transaction'] = trans_cb

    cps.obj_register(handle, '1.2.3.4', d)
    cps.config('10', '2.3', 'pyobj', '', True, "node")
    cps.config('11', '2.3.1', 'pyobj/node', '', False, "node")
    cps.config('12', '2.3.2', 'pyobj/time', '', False, "node")
    while True:
        time.sleep(1)
Exemple #14
0
    d = {'key': params['filter']['key'] + "3", 'data': {'pyobj/node': 'Cliff'}}
    params['list'].append(d)

    print params
    return True


def trans_cb(methods, params):
    print "Trans..."
    print params['operation']

    if params['operation'] == 'set':
        params['change']['data']['pyobj/node'] = "Clifford"
        params['change']['data']['pyobj/time'] = time.asctime()
    print params
    return True


if __name__ == '__main__':
    handle = cps.obj_init()
    d = {}
    d['get'] = get_cb
    d['transaction'] = trans_cb

    cps.obj_register(handle, '1.2.3.4', d)
    cps.config('10', '2.3', 'pyobj', '', True, "node")
    cps.config('11', '2.3.1', 'pyobj/node', '', False, "node")
    cps.config('12', '2.3.2', 'pyobj/time', '', False, "node")
    while True:
        time.sleep(1)
    if params['operation'] == 'create':
        port = handle_create(obj,group_name)
        if port:
            params['change']['data']['cps/db-instance/port'] = ba.str_to_ba(str(port),len(str(port)))
            return True
        else:
            return False

    if params['operation'] == 'delete':
        return handle_delete(obj,group_name)

    return False

def get_db_cb(methods, params):
    return False

if __name__ == '__main__':

    handle = cps.obj_init()

    d = {}
    d['get'] = get_db_cb
    d['transaction'] = set_db_cb

    # Should create a new objet in cps model or use something internal
    cps.obj_register(handle, cps.key_from_name("target","cps/db-instance"), d)


    while True:
        time.sleep(1)
    # Few IP address attributes are in binaries, these ip address are treated as string type.
    _mcast_set_attr_type()

    handle = cps.obj_init()
    d = {}

    d['transaction'] = trans_cb

    #get is supported only for kernel snooping
    if kernel_snooping_needed is True:
        d['get'] = get_cb
        for i in _igmp_keys.keys():
            if i.find('igmp-mld-snooping') == -1:
                continue
            cps.obj_register(handle, _igmp_keys[i], d)

        # Start thread for multicast groups polling
        mcast_utils.polling_thread.start()
    else:
        #Start VLAN monitor thread to disable snooping in kernel.
        monitor = threading.Thread(target=mcast_snoop.monitor_VLAN_interface_event, name="Snoop_VLAN_Monitor")
        monitor.setDaemon(True)
        monitor.start()

        #if kernel snooping is not used, then only few sets are supported
        # and no gets.
        #TODO: till application code gets commited, relax that part, otherwise it might fail
        d['get'] = mcast_snoop.snoop_get_cb

        for i in _igmp_keys.keys():
Exemple #17
0
    break

#load ACL tables
if not __validate_table():
    print('Unable to create required ACL table for ACL model')
    sys.exit(1)

print('INPUT - Table ID %d' % __table_in.extract_id())
print('OUTPUT - Table ID %d' % __table_out.extract_id())

__sync_file_to_db('acl-config.yaml')
__resync()

# Register for CPS
reg = dict()

reg['get'] = get_status_cb
cps.obj_register(cps_handle, _key_for_status, reg)

reg = {}
reg['get'] = get_status_cb
cps.obj_register(cps_handle, _key_for_cfg, reg)

reg = {}
reg['transaction'] = set_cfg_cb
cps.obj_register(cps_handle, _key_for_reload, reg)

# Wait for responses
while True:
    signal.pause()
Exemple #18
0
    if len(sys.argv) > 1:
        l = []
        _get_ip_objs(cps_object.CPSObject('base-ip/ipv4'), l)
        for i in l:
            cps_utils.print_obj(i)
        sys.exit(1)

    handle = cps.obj_init()
    d = {}
    d['get'] = get_cb
    d['transaction'] = trans_cb

    for i in _keys.keys():
        if i.find('base-ip') == -1:
            continue
        cps.obj_register(handle, _keys[i], d)

    # IPSec Object registration
    dn_base_ipsec_utils.obj_reg()

    # Set IPSec Authentication and Encryption keys type as string
    dn_base_ipsec_utils.add_attr_type()

    d = {}
    d['transaction'] = set_ip_unreach_cb
    cps.obj_register(handle, _ip_unreach_key, d)

    log_msg = 'CPS IP unreachable registration done'
    log_info(log_msg)

    d = {}
Exemple #19
0
    nas_if.log_info('Physical port service is ready after checking %d times' % srv_chk_cnt)

    srv_chk_cnt = 0
    while cps.enabled(nas_comm.yang.get_value('fp_key', 'keys_id')) == False:
        if srv_chk_cnt % srv_chk_rate == 0:
            nas_if.log_info('MAC address config: Front panel port service is not ready')
        time.sleep(1)
        srv_chk_cnt += 1
    nas_if.log_info('Front panel port service is ready after checking %d times' % srv_chk_cnt)

    # Register MAc address allocation handler
    get_mac_hdl = cps.obj_init()

    d = {}
    d['transaction'] = get_mac_cb
    cps.obj_register(get_mac_hdl, nas_comm.yang.get_value('get_mac_key', 'keys_id'), d)

    fp_cache = nas_if.FpPortCache()
    fp_thread = fpMonitorThread(1, 'Front panel port monitor thread')
    fp_thread.daemon = True
    fp_thread.start()

    # Lock to protect front panel port cache updated by thread
    fp_lock = threading.Lock()

    # Wait until a signal is received
    while False == shutdwn:
        signal.pause()

    systemd.daemon.notify("STOPPING=1")
    #Cleanup code here
Exemple #20
0
    signal.signal(signal.SIGTERM, sigterm_hdlr)
    # Clean-up the IP services folders in the /etc/netns/
    try:
        net_ns_ip_svcs_folder = '/etc/netns'
        for dirs in os.listdir(net_ns_ip_svcs_folder):
            rmtree(net_ns_ip_svcs_folder + '/' + dirs)
    except:
        pass

    handle = cps.obj_init()

    _vrf_mutex = threading.Lock()

    d = {}
    d['transaction'] = set_vrf_cb
    cps.obj_register(handle, _vrf_key, d)

    d = {}
    d['transaction'] = set_vrf_intf_cb
    cps.obj_register(handle, _vrf_intf_key, d)

    d = {}
    d['get'] = get_incoming_ip_svcs_cb
    d['transaction'] = config_incoming_ip_svcs_cb
    cps.obj_register(handle, _vrf_incoming_svc_config_key, d)

    d = {}
    d['get'] = get_outgoing_ip_svcs_cb
    d['transaction'] = config_outgoing_ip_svcs_cb
    cps.obj_register(handle, _vrf_outgoing_svc_config_key, d)
Exemple #21
0
    if _m_info.duplex != None:
        _data['duplex'] = nas_if.to_yang_duplex(_m_info.duplex)

    elem = cps_object.CPSObject(module='base-media/media-info', data=_data)
    resp.append(elem.get())


def get_cb(methods, params):
    _media_obj = cps_object.CPSObject(obj=params['filter'])
    resp = params['list']

    if _media_obj.get_key() == _media_key:
        _gen_media_list(_media_obj, resp)
    else:
        return False
    return True


if __name__ == '__main__':
    init('%s/etc/opx/phy_media_default_npu_setting.xml' %
         os.environ.get("OPX_INSTALL_PATH", ""))

    handle = cps.obj_init()

    d = {}
    d['get'] = get_cb

    cps.obj_register(handle, _media_key, d)
    while True:
        time.sleep(1)
Exemple #22
0
    handle = cps.obj_init()

    # Register Front Panel POrt and HW port object handler
    fp_utils.nas_fp_cps_register(handle)

    # Register for Port Group handler
    pg_utils.nas_pg_cps_register(handle)

    # Register for Hybrid Group handler
    hg_utils.nas_hg_cps_register(handle)

    # Register Logical Interface handler
    d = {}
    d['transaction'] = set_intf_cb
    cps.obj_register(handle, nas_comm.get_value(nas_comm.keys_id, 'set_intf_key'), d)

    # Register MAc address allocation handler
    get_mac_hdl = cps.obj_init()

    d = {}
    d['transaction'] = get_mac_cb
    cps.obj_register(get_mac_hdl, nas_comm.get_value(nas_comm.keys_id, 'get_mac_key'), d)

    fp_identification_led_control = fp_led.identification_led_control_get()

    # Initialization complete
    # Notify systemd: Daemon is ready
    systemd.daemon.notify("READY=1")

    # Wait until a signal is received