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)
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")
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)
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():
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()
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 = {}
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
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)
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)
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